ETH Price: $2,468.66 (-8.10%)

Token

Mineral (ORE)
 

Overview

Max Total Supply

800,000,000 ORE

Holders

724

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
nakata-jp.eth
Balance
20 ORE

Value
$0.00
0x6722846282868a9c084b423aee79eb8ff69fc497
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB3E00c1A...21B79514C
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Mineral

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-10-16
*/

pragma solidity ^0.4.18;




/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
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) {
    
    uint256 c = a / b;
    
    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;
  }
}





/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}








/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}









/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

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

}









/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}




/**
 * @title Math
 * @dev Assorted math operations
 */

library Math {
  function max64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a < b ? a : b;
  }
}






/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is StandardToken {

    event Burn(address indexed burner, uint256 value);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     */
    function burn(uint256 _value) public {
        require(_value > 0);
        require(_value <= balances[msg.sender]);
        
        

        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(burner, _value);
    }
}





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


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

}









contract Jewel {
    function incise(address owner, uint256 value) external returns (uint);
}

contract DayQualitys {
    function getAreaQualityByDay(uint32 time, uint32 area) external returns (uint32);
}

contract Mineral is BurnableToken, Ownable {

    string public name = "Mineral";
    string public symbol = "ORE";
    uint8 public decimals = 18;

    uint256 public constant INITIAL_SUPPLY = 800 * 1000 * 1000 * (10 ** uint256(decimals));

    uint public constant MINER_4_HOURS = 0.0005 ether;
    uint public constant MINER_8_HOURS = 0.001 ether;
    uint public constant MINER_24_HOURS = 0.003 ether;

    mapping(address => uint[][72]) public deployRange;

    
    
    uint public timeScale = 1; 

    
    
    mapping(uint32 => uint32[3][72]) private areaHourDeployed;

    
    struct AreaHourDeployed {
        uint32[72] lastCollectHour;
        
        mapping(uint32 => uint32[3][72]) hour; 
    }
    
    
    mapping(address => AreaHourDeployed) private userAreaHourDeployed;

    
    uint8 public constant CHECK_POINT_HOUR = 4;

    
    
    mapping(uint32 => uint32[72]) private areaCheckPoints;

    
    mapping(uint32 => uint) private dayAverageOutput;

    
    struct AreaCheckPoint {
        
        mapping(uint32 => uint32[72]) hour;
    }

    
    
    mapping(address => AreaCheckPoint) private userAreaCheckPoints;

    uint256 amountEther;

    
    mapping (address => uint) public remainEther;

    uint32 public constractDeployTime = uint32(now) / 1 hours * 1 hours;

    mapping(address => uint) activeArea; 
    
    bool enableWhiteList = true;
    mapping(address => bool) whiteUserList;    
    address serverAddress;

    address coldWallet;

    bool enableCheckArea = true;

    Jewel public jewelContract;
    DayQualitys public dayQualitysContract;

    event Pause();
    event Unpause();

    bool public paused = false;

    function Mineral() public {
        totalSupply = INITIAL_SUPPLY;
        balances[this] = 300 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x22de6b7F8b6119bA8E62FB4165834eA00adb6f3E")] = 110 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0xA3eCD9F46CCfE4D27D747C9c7469990df7412d48")] = 30 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x686824DB069586aC0aD8060816F1D66A0EE8297b")] = 60 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x9E8eA5C674EBd85868215ceFab9c108Ab9ceA702")] = 150 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x4706f5d2a0d4D4eE5A37dDE1438C7de774A2A184")] = 150 * 1000 * 1000 * (10 ** uint256(decimals));
        dayAverageOutput[0] = 241920 * 10 ** uint256(decimals);
    }

    function parseAddr(string _a) internal returns (address){
        bytes memory b = bytes(_a);
        uint result = 0;
        for (uint i = 0; i < b.length; i++) {
            uint c = uint(b[i]);
            if (c >= 48 && c <= 57) {
                result = result * 16 + (c - 48);
            }
            if(c >= 65 && c<= 90) {
                result = result * 16 + (c - 55);
            }
            if(c >= 97 && c<= 122) {
                result = result * 16 + (c - 87);
            }
        }
        return address(result);
    }

    /*
    function setTimeScale(uint scale) public onlyOwner {
        timeScale = scale;
    }

    
    function setConstractDeployTime(uint32 time) public onlyOwner {
        constractDeployTime = time;
    }*/

    function setColdWallet(address _coldWallet) public onlyOwner {
        coldWallet = _coldWallet;
    }

    function disableWhiteUserList() public onlyOwner {
        enableWhiteList = false;
    }

    function disableCheckArea() public onlyOwner {
        enableCheckArea = false;
    }

    modifier checkWhiteList() {
        if (enableWhiteList) {
            require(whiteUserList[msg.sender]);
        }
        _;
    }

    function setServerAddress(address addr) public onlyOwner {
        serverAddress = addr;
    }

    function authUser(string addr) public {
        require(msg.sender == serverAddress || msg.sender == owner);
        address s = bytesToAddress(bytes(addr));
        whiteUserList[s] = true;
    }

    function bytesToAddress (bytes b) internal view returns (address) {
        uint result = 0;
        for (uint i = 0; i < b.length; i++) {
            uint c = uint(b[i]);
            if (c >= 48 && c <= 57) {
                result = result * 16 + (c - 48);
            }
            if(c >= 65 && c <= 90) {
                result = result * 16 + (c - 55);
            }
            if(c >= 97 && c <= 122) {
                result = result * 16 + (c - 87);
            }
        }
        return address(result);
    }

    function setDayQualitys(address dayQualitys) public onlyOwner {
        dayQualitysContract = DayQualitys(dayQualitys);
    }

    function getMyDeployAt(uint32 area, uint32 hour) public view returns (uint32[3]) {
        return userAreaHourDeployed[msg.sender].hour[hour][area];
    }

    function getMyMinersAt(uint32 area, uint32 hour) public view returns (uint32) {
        return _getUserMinersAt(msg.sender, area, hour);
    }

    function _getUserMinersAt(address user, uint32 area, uint32 hour) internal view returns(uint32) {
        //now start from start's nearest check point
        uint32 nc = hour/CHECK_POINT_HOUR*CHECK_POINT_HOUR;
        if (userAreaCheckPoints[user].hour[nc][area] == 0 && userAreaCheckPoints[user].hour[nc + CHECK_POINT_HOUR][area] == 0) {
            return 0;
        }
        uint32 h = 0;
        int64 userInc = 0;
        uint32[3] storage ptUser;
        AreaHourDeployed storage _userAreaHourDeployed = userAreaHourDeployed[user];
        
        for (h = nc; h <= hour; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            userInc += ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - 
                _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
        }
        return userAreaCheckPoints[user].hour[nc][area] + uint32(userInc);
    }

    function getDeployAt(uint32 area, uint32 hour) public view returns (uint32[3]) {
        return areaHourDeployed[hour][area];
    }


    function getMinersAt(uint32 area, uint32 hour) public view returns (uint32) {
        return _getMinersAt(area, hour);
    }

    function _getMinersAt(uint32 area, uint32 hour) internal view returns (uint32) {
        //now start from start's nearest check point
        uint32 nc = hour/CHECK_POINT_HOUR*CHECK_POINT_HOUR;
        uint32 h = 0;
        int64 userInc = 0;
        int64 totalInc = 0;
        uint32[3] storage ptArea;
        
        for (h = nc; h <= hour; ++h) {
            
            
            
            ptArea = areaHourDeployed[h][area];
            totalInc += ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
        }

        return areaCheckPoints[nc][area] + uint32(totalInc);
    }

    function updateArea(uint areaId) internal pure returns (uint) {
        
        uint row = areaId / 8;
        uint colum = areaId % 8;

        uint result = uint(1) << areaId;
        if (row-1 >= 0) {
            result |= uint(1) << ((row-1)*8+colum);
        }
        if (row+1 < 9) {
            result |= uint(1) << ((row+1)*8+colum);
        }
        if (colum-1 >= 0) {
            result |= uint(1) << (row*8+colum-1);
        }
        if (colum+1 < 8) {
            result |= uint(1) << (row*8+colum+1);
        }
        
        return result;
    }

    function checkArea(uint32[] area, address user) internal {
        if (enableCheckArea) {
            uint[] memory distinctArea = new uint[](area.length);
            uint distinctAreaLength = 0;
        
            for (uint i = 0; i < area.length; i++) {
                bool find = false;
                for (uint j = 0; j < distinctAreaLength; j++) {
                    if (distinctArea[j] == area[i]) {
                        find = true;
                        break;
                    }
                }     
                if (!find) {
                    distinctArea[distinctAreaLength] = area[i];
                    distinctAreaLength += 1;
                }
            }

            if (activeArea[user] == 0) {
                require(distinctAreaLength == 1);
                activeArea[user] = updateArea(distinctArea[0]);
            } else {
                uint userActiveArea = activeArea[user];
                uint updateActiveArea = userActiveArea;
                for (i = 0; i < distinctAreaLength; i++) {
                    require(userActiveArea & uint(1) << distinctArea[i] > 0);
                    updateActiveArea = updateActiveArea | updateArea(distinctArea[i]);
                }

                activeArea[user] = updateActiveArea;
            }
        }
    }

    function deployMiners(address user, uint32[] area, uint32[] period, uint32[] count) public checkWhiteList whenNotPaused payable {
        require(area.length > 0);
        require(area.length == period.length);
        require(area.length == count.length);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        
        uint32 _hour = uint32((now - constractDeployTime) * timeScale / 1 hours);

        checkArea(area, user);
        
        uint payment = _deployMiners(_user, _hour, area, period, count);
        _updateCheckPoints(_user, _hour, area, period, count);

        require(payment <= msg.value);
        remainEther[msg.sender] += (msg.value - payment);
        if (coldWallet != address(0)) {
            coldWallet.transfer(payment);
        } else {
            amountEther += payment;
        }
        
    }

    /*function deployMinersTest(uint32 _hour, address user, uint32[] area, uint32[] period, uint32[] count) public checkWhiteList payable {
        require(area.length > 0);
        require(area.length == period.length);
        require(area.length == count.length);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        

        checkArea(area, user);
        
        uint payment = _deployMiners(_user, _hour, area, period, count);
        _updateCheckPoints(_user, _hour, area, period, count);

        require(payment <= msg.value);
        remainEther[msg.sender] += (msg.value - payment);
        amountEther += payment;
    }*/

    function _deployMiners(address _user, uint32 _hour, uint32[] memory area, uint32[] memory period, uint32[] memory count) internal returns(uint){
        uint payment = 0;
        uint32 minerCount = 0;
        uint32[3][72] storage _areaDeployed = areaHourDeployed[_hour];
        uint32[3][72] storage _userAreaDeployed = userAreaHourDeployed[_user].hour[_hour];
        
        
        for (uint index = 0; index < area.length; ++index) {
            require (period[index] == 4 || period[index] == 8 || period[index] == 24);
            if (period[index] == 4) {
                _areaDeployed[area[index]][0] += count[index];
                _userAreaDeployed[area[index]][0] += count[index];
                payment += count[index] * MINER_4_HOURS;
            } else if (period[index] == 8) {
                _areaDeployed[area[index]][1] += count[index];
                _userAreaDeployed[area[index]][1] += count[index];
                payment += count[index] * MINER_8_HOURS;
            } else if (period[index] == 24) {
                _areaDeployed[area[index]][2] += count[index];
                _userAreaDeployed[area[index]][2] += count[index];
                payment += count[index] * MINER_24_HOURS;
            }
            minerCount += count[index];
            DeployMiner(_user, area[index], _hour, _hour + period[index], count[index]);

            adjustDeployRange(area[index], _hour, _hour + period[index]);
        }
        return payment;
    }   

    function adjustDeployRange(uint area, uint start, uint end) internal {
        uint len = deployRange[msg.sender][area].length;
        if (len == 0) {
            deployRange[msg.sender][area].push(start | (end << 128));
        } else {
            uint s = uint128(deployRange[msg.sender][area][len - 1]);
            uint e = uint128(deployRange[msg.sender][area][len - 1] >> 128);
            
            if (start >= s && start < e) {
                end = e > end ? e : end;
                deployRange[msg.sender][area][len - 1] = s | (end << 128);
            } else {
                deployRange[msg.sender][area].push(start | (end << 128));
            }
        }
    }

    function getDeployArrayLength(uint area) public view returns (uint) {
        return deployRange[msg.sender][area].length;
    }
    
    function getDeploy(uint area, uint index) public view returns (uint,uint) {
        uint s = uint128(deployRange[msg.sender][area][index]);
        uint e = uint128(deployRange[msg.sender][area][index] >> 128);
        return (s, e);
    }

    function _updateCheckPoints(address _user, uint32 _hour, uint32[] memory area, uint32[] memory period, uint32[] memory count) internal {
        uint32 _area = 0;
        uint32 _count = 0;
        uint32 ce4 = _hour + 4;
        uint32 ce8 = _hour + 8;
        uint32 ce24 = _hour + 24;
        uint32 cs = (_hour/CHECK_POINT_HOUR+1)*CHECK_POINT_HOUR;
        AreaCheckPoint storage _userAreaCheckPoints = userAreaCheckPoints[_user];
        uint32 cp = 0;
        for (uint index = 0; index < area.length; ++index) {
            _area = area[index];
            _count = count[index];
            if (period[index] == 4) {
                for (cp = cs; cp <= ce4; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            } else if (period[index] == 8) {
                for (cp = cs; cp <= ce8; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            } else if (period[index] == 24) {
                for (cp = cs; cp <= ce24; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            }
        }
    }

    

    event DeployMiner(address addr, uint32 area, uint32 start, uint32 end, uint32 count);

    event Collect(address addr, uint32 area, uint32 start, uint32 end, uint areaCount);

    function getMyLastCollectHour(uint32 area) public view returns (uint32){
        return userAreaHourDeployed[msg.sender].lastCollectHour[area];
    }

    
    
    function collect(address user, uint32[] area) public  checkWhiteList whenNotPaused {
        require(address(dayQualitysContract) != address(0));
        uint32 current = uint32((now - constractDeployTime) * timeScale / 1 hours);
        require(area.length > 0);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        uint total = 0;
        
        for (uint a = 0; a < area.length; ++a) {
            uint len = deployRange[msg.sender][area[a]].length;
            bool finish = true;
            for (uint i = 0; i < len; i += 1) {
                uint s = uint128(deployRange[msg.sender][area[a]][i]);
                uint e = uint128(deployRange[msg.sender][area[a]][i] >> 128);
                if (current < e && current >= s ) {
                    total += _collect(_user, uint32(s), current, area[a]);
                    
                    deployRange[msg.sender][area[a]][i] = current | (e << 128);
                    finish = false;
                } else if (current >= e) {
                    total += _collect(_user, uint32(s), uint32(e), area[a]);
                }
            }
            
            if (finish) {
                deployRange[msg.sender][area[a]].length = 0;
            } else {
                deployRange[msg.sender][area[a]][0] = deployRange[msg.sender][area[a]][len - 1];
                deployRange[msg.sender][area[a]].length = 1;
            }
        }    

        ERC20(this).transfer(_user, total);
    }

    function _collect(address _user, uint32 start, uint32 end, uint32 area) internal returns (uint) {
        uint result = 0;
        uint32 writeCount = 1;
        uint income = 0;
        uint32[] memory totalMiners = new uint32[](CHECK_POINT_HOUR);
        uint32[] memory userMiners = new uint32[](CHECK_POINT_HOUR);
        uint32 ps = start/CHECK_POINT_HOUR*CHECK_POINT_HOUR+CHECK_POINT_HOUR;
        if (ps >= end) {
            
            (income, writeCount) = _collectMinersByCheckPoints(_user, area, start, end, totalMiners, userMiners, writeCount);
            result += income;
        } else {
            
            (income, writeCount) = _collectMinersByCheckPoints(_user, area, start, ps, totalMiners, userMiners, writeCount);
            result += income;

            while (ps < end) {
                (income, writeCount) = _collectMinersByCheckPoints(_user, area, ps, uint32(Math.min64(end, ps + CHECK_POINT_HOUR)), totalMiners, userMiners, writeCount);
                result += income;

                ps += CHECK_POINT_HOUR;
            }
        }
        Collect(_user, area, start, end, result);
        return result;
    }

    function _collectMinersByCheckPoints(address _user, uint32 area, uint32 start, uint32 end, uint32[] memory totalMiners, uint32[] memory userMiners, uint32 _writeCount) internal returns (uint income, uint32 writeCount) {
        //now start from start's nearest check point
        writeCount = _writeCount;
        income = 0;
        
        
        if (userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] == 0 && userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR + CHECK_POINT_HOUR][area] == 0) {
            return;
        }
        _getMinersByCheckPoints(_user, area, start, end, totalMiners, userMiners);
        uint ao = dayAverageOutput[start / 24];
        if (ao == 0) {
            uint32 d = start / 24;
            for (; d >= 0; --d) {
                if (dayAverageOutput[d] != 0) {
                    break;
                }
            } 
            ao = dayAverageOutput[d];
            for (d = d+1; d <= start / 24; ++d) {
                ao = ao*9996/10000;
                if ((start / 24 - d) < writeCount) {
                    dayAverageOutput[d] = ao;
                }
            }
            if (writeCount > (start / 24 - d - 1)) {
                writeCount = writeCount - (start / 24 - d - 1);
            } else {
                writeCount = 0;
            }
        }

        uint week = dayQualitysContract.getAreaQualityByDay(uint32(start * 1 hours + constractDeployTime), area);
        require(week > 0);

        ao = week * ao / 10 / 24 / 72;
        
        income = _getTotalIncomeAt(end - start, userMiners, totalMiners, ao, week);

        if (week == 10) { 
            income = income * 8 / 10;
        } else if (week == 5) { 
            income = income * 6 / 10;
        } 
    }

    function _getTotalIncomeAt(uint32 hourLength, uint32[] memory userMiners, uint32[] memory totalMiners, uint areaOutput, uint week) internal view returns(uint) {
        uint income = 0;
        for (uint i = 0; i < hourLength; ++i) {
            if (userMiners[i] != 0 && totalMiners[i] != 0) {
                income += (Math.min256(10 ** uint256(decimals), areaOutput / totalMiners[i]) * userMiners[i]);
            }
        }
        return income;
    } 

    function _getMinersByCheckPoints(address _user, uint32 area, uint32 start, uint32 end, uint32[] memory totalMiners, uint32[] memory userMiners) internal view {
        require((end - start) <= CHECK_POINT_HOUR);
        //now start from start's nearest check point
        uint32 h = 0;
        int64 userInc = 0;
        int64 totalInc = 0;
        uint32[3] storage ptUser;
        uint32[3] storage ptArea;
        AreaHourDeployed storage _userAreaHourDeployed = userAreaHourDeployed[_user];
        
        for (h = start/CHECK_POINT_HOUR*CHECK_POINT_HOUR; h <= start; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            ptArea = areaHourDeployed[h][area];
            totalInc += ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
            userInc += ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
        }

        totalMiners[0] = areaCheckPoints[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] + uint32(totalInc);
        userMiners[0] = userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] + uint32(userInc);

        uint32 i = 1;
        for (h = start + 1; h < end; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            ptArea = areaHourDeployed[h][area];
            totalMiners[i] = totalMiners[i-1] + ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
            userMiners[i] = userMiners[i-1] + ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
            ++i;
        }
    }

    
    function withdraw() public {
        uint remain = remainEther[msg.sender]; 
        require(remain > 0);
        remainEther[msg.sender] = 0;

        msg.sender.transfer(remain);
    }

    
    function withdrawMinerFee() public onlyOwner {
        require(amountEther > 0);
        owner.transfer(amountEther);
        amountEther = 0;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused() {
        require(paused);
        _;
    }

    function pause() onlyOwner whenNotPaused public {
        paused = true;
        Pause();
    }

    function unpause() onlyOwner whenPaused public {
        paused = false;
        Unpause();
    }

    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function setJewelContract(address jewel) public onlyOwner {
        jewelContract = Jewel(jewel);
    }

    function incise(uint256 value) public returns (uint) {
        require(jewelContract != address(0));

        uint256 balance = balances[msg.sender];
        require(balance >= value);
        uint256 count = (value / (10 ** uint256(decimals)));
        require(count >= 1);

        uint ret = jewelContract.incise(msg.sender, count);

        burn(count * 10 ** uint256(decimals));

        return ret;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"remainEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coldWallet","type":"address"}],"name":"setColdWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableWhiteUserList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CHECK_POINT_HOUR","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawMinerFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMyDeployAt","outputs":[{"name":"","type":"uint32[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint256"}],"name":"getDeployArrayLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getDeployAt","outputs":[{"name":"","type":"uint32[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMyMinersAt","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setServerAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"area","type":"uint32[]"}],"name":"collect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MINER_8_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint256"},{"name":"index","type":"uint256"}],"name":"getDeploy","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"string"}],"name":"authUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINER_4_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"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":"value","type":"uint256"}],"name":"incise","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINER_24_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dayQualitysContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deployRange","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":false,"inputs":[{"name":"jewel","type":"address"}],"name":"setJewelContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"constractDeployTime","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"}],"name":"getMyLastCollectHour","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableCheckArea","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"jewelContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMinersAt","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"area","type":"uint32[]"},{"name":"period","type":"uint32[]"},{"name":"count","type":"uint32[]"}],"name":"deployMiners","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"dayQualitys","type":"address"}],"name":"setDayQualitys","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeScale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"area","type":"uint32"},{"indexed":false,"name":"start","type":"uint32"},{"indexed":false,"name":"end","type":"uint32"},{"indexed":false,"name":"count","type":"uint32"}],"name":"DeployMiner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"area","type":"uint32"},{"indexed":false,"name":"start","type":"uint32"},{"indexed":false,"name":"end","type":"uint32"},{"indexed":false,"name":"areaCount","type":"uint256"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

60c0604052600760808190527f4d696e6572616c0000000000000000000000000000000000000000000000000060a0908152620000409160049190620005f4565b506040805180820190915260038082527f4f5245000000000000000000000000000000000000000000000000000000000060209092019182526200008791600591620005f4565b506006805460ff191660121790556001600855610e1063ffffffff42166010805463ffffffff191692909104610e100263ffffffff169190911790556012805460ff19166001179055601580547401000000000000000000000000000000000000000060a060020a60ff0219918216179091556017805490911690553480156200011057600080fd5b5060038054600160a060020a0319163317905560068054632faf080060ff918216600a90810a91820260009081553081526001602081815260408084206311e1a30090960290955595548451606081018652602a81527f3078323264653662374638623631313962413845363246423431363538333465978101979097527f41303061646236663345000000000000000000000000000000000000000000009487019490945263068e77809390941690910a9190910292620001db9064010000000062000520810204565b600160a060020a0316600160a060020a0316815260200190815260200160002081905550600660009054906101000a900460ff1660ff16600a0a6301c9c380026001600062000295606060405190810160405280602a81526020017f307841336543443946343643436645344432374437343743396337343639393981526020017f306466373431326434380000000000000000000000000000000000000000000081525062000520640100000000026401000000009004565b600160a060020a0316600160a060020a0316815260200190815260200160002081905550600660009054906101000a900460ff1660ff16600a0a630393870002600160006200034f606060405190810160405280602a81526020017f307836383638323444423036393538366143306144383036303831364631443681526020017f364130454538323937620000000000000000000000000000000000000000000081525062000520640100000000026401000000009004565b600160a060020a0316600160a060020a0316815260200190815260200160002081905550600660009054906101000a900460ff1660ff16600a0a6308f0d180026001600062000409606060405190810160405280602a81526020017f307839453865413543363734454264383538363832313563654661623963313081526020017f384162396365413730320000000000000000000000000000000000000000000081525062000520640100000000026401000000009004565b600160a060020a0316600160a060020a0316815260200190815260200160002081905550600660009054906101000a900460ff1660ff16600a0a6308f0d1800260016000620004c3606060405190810160405280602a81526020017f307834373036663564326130643444346545354133376444453134333843376481526020017f653737344132413138340000000000000000000000000000000000000000000081525062000520640100000000026401000000009004565b600160a060020a03168152602080820192909252604001600090812092909255600654918052600c905260ff16600a0a6203b100027f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e85562000699565b6000818180805b8351821015620005ea5783828151811015156200054057fe5b01602001517f01000000000000000000000000000000000000000000000000000000000000009081900481020490506030811080159062000582575060398111155b15620005945760308103836010020192505b60418110158015620005a75750605a8111155b15620005b95760378103836010020192505b60618110158015620005cc5750607a8111155b15620005de5760578103836010020192505b60019091019062000527565b5090949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063757805160ff191683800117855562000667565b8280016001018555821562000667579182015b82811115620006675782518255916020019190600101906200064a565b506200067592915062000679565b5090565b6200069691905b8082111562000675576000815560010162000680565b90565b613d5280620006a96000396000f30060806040526004361061023a5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630433df85811461023f57806306087e5b1461027257806306fdde0314610295578063095ea7b31461031f57806314dacf5b146103575780631813aea51461036c57806318160ddd1461039757806323b872dd146103ac57806328ce5cdb146103d65780632b048f77146103eb5780632c027eb9146104475780632ff2e9dc1461045f578063313ce567146104745780633b404266146104895780633ccfd60b146104ad5780633dd00c42146104c25780633f4ba83a146104ff57806342966c681461051457806347b64eb01461052c5780634d6a7d331461054d5780634dbd71eb146105b057806350beb835146105c55780635a589fc9146105f95780635c975abb1461065257806363c2558a14610667578063661884631461067c57806370a08231146106a057806382281104146106c15780638456cb59146106d95780638da5cb5b146106ee5780638e73d8571461071f5780638ffdbf0b1461073457806390ce34ec1461074957806395d89b411461077057806395ddb3a614610785578063a7d53800146107a6578063a9059cbb146107bb578063a949f3af146107df578063b74d13a5146107fd578063cc99ece114610812578063d6387a3e14610827578063d73dd6231461084b578063dd62ed3e1461086f578063eea0d16814610896578063f0a7975f1461095e578063f2fde38b1461097f578063f32b85e8146109a0575b600080fd5b34801561024b57600080fd5b50610260600160a060020a03600435166109b5565b60408051918252519081900360200190f35b34801561027e57600080fd5b50610293600160a060020a03600435166109c7565b005b3480156102a157600080fd5b506102aa610a0d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e45781810151838201526020016102cc565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b50610343600160a060020a0360043516602435610a9b565b604080519115158252519081900360200190f35b34801561036357600080fd5b50610293610b01565b34801561037857600080fd5b50610381610b24565b6040805160ff9092168252519081900360200190f35b3480156103a357600080fd5b50610260610b29565b3480156103b857600080fd5b50610343600160a060020a0360043581169060243516604435610b2f565b3480156103e257600080fd5b50610293610b5c565b3480156103f757600080fd5b5061040f63ffffffff60043581169060243516610bc6565b6040518082606080838360005b8381101561043457818101518382015260200161041c565b5050505090500191505060405180910390f35b34801561045357600080fd5b50610260600435610c64565b34801561046b57600080fd5b50610260610c86565b34801561048057600080fd5b50610381610c98565b34801561049557600080fd5b5061040f63ffffffff60043581169060243516610ca1565b3480156104b957600080fd5b50610293610ccc565b3480156104ce57600080fd5b506104e663ffffffff60043581169060243516610d27565b6040805163ffffffff9092168252519081900360200190f35b34801561050b57600080fd5b50610293610d3b565b34801561052057600080fd5b50610293600435610db3565b34801561053857600080fd5b50610293600160a060020a0360043516610e71565b34801561055957600080fd5b50604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750949750610eb79650505050505050565b3480156105bc57600080fd5b50610260611381565b3480156105d157600080fd5b506105e060043560243561138c565b6040805192835260208301919091528051918290030190f35b34801561060557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102939436949293602493928401919081908401838280828437509497506114399650505050505050565b34801561065e57600080fd5b50610343611499565b34801561067357600080fd5b506102606114a9565b34801561068857600080fd5b50610343600160a060020a03600435166024356114b4565b3480156106ac57600080fd5b50610260600160a060020a03600435166115a4565b3480156106cd57600080fd5b506102606004356115bf565b3480156106e557600080fd5b506102936116d2565b3480156106fa57600080fd5b5061070361174f565b60408051600160a060020a039092168252519081900360200190f35b34801561072b57600080fd5b5061026061175e565b34801561074057600080fd5b50610703611769565b34801561075557600080fd5b50610260600160a060020a0360043516602435604435611778565b34801561077c57600080fd5b506102aa6117b4565b34801561079157600080fd5b50610293600160a060020a036004351661180f565b3480156107b257600080fd5b506104e6611855565b3480156107c757600080fd5b50610343600160a060020a0360043516602435611861565b3480156107eb57600080fd5b506104e663ffffffff60043516611885565b34801561080957600080fd5b506102936118c8565b34801561081e57600080fd5b506107036118ff565b34801561083357600080fd5b506104e663ffffffff6004358116906024351661190e565b34801561085757600080fd5b50610343600160a060020a036004351660243561191a565b34801561087b57600080fd5b50610260600160a060020a03600435811690602435166119b3565b604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506119de9650505050505050565b34801561096a57600080fd5b50610293600160a060020a0360043516611b2c565b34801561098b57600080fd5b50610293600160a060020a0360043516611b72565b3480156109ac57600080fd5b50610260611c07565b600f6020526000908152604090205481565b600354600160a060020a031633146109de57600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600354600160a060020a03163314610b1857600080fd5b6012805460ff19169055565b600481565b60005481565b60175460009060a060020a900460ff1615610b4957600080fd5b610b54848484611c0d565b949350505050565b600354600160a060020a03163314610b7357600080fd5b600e54600010610b8257600080fd5b600354600e54604051600160a060020a039092169181156108fc0291906000818181858888f19350505050158015610bbe573d6000803e3d6000fd5b506000600e55565b610bce613cbd565b336000908152600a6020908152604080832063ffffffff8087168552600990910190925290912090841660488110610c0257fe5b604080516060810191829052929190910190600390826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610c1c57509498975050505050505050565b3360009081526007602052604081208260488110610c7e57fe5b015492915050565b60065460ff16600a0a632faf08000281565b60065460ff1681565b610ca9613cbd565b63ffffffff808316600090815260096020526040902090841660488110610c0257fe5b336000908152600f6020526040812054908111610ce857600080fd5b336000818152600f60205260408082208290555183156108fc0291849190818181858888f19350505050158015610d23573d6000803e3d6000fd5b5050565b6000610d34338484611d86565b9392505050565b600354600160a060020a03163314610d5257600080fd5b60175460a060020a900460ff161515610d6a57600080fd5b6017805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000808211610dc157600080fd5b33600090815260016020526040902054821115610ddd57600080fd5b5033600081815260016020526040902054610dfe908363ffffffff61200516565b600160a060020a03821660009081526001602052604081209190915554610e2b908363ffffffff61200516565b600055604080518381529051600160a060020a038316917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25050565b600354600160a060020a03163314610e8857600080fd5b6014805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000806000806000806000601260009054906101000a900460ff1615610ef8573360009081526013602052604090205460ff161515610ef857600080fd5b60175460a060020a900460ff1615610f0f57600080fd5b601754600160a060020a03161515610f2657600080fd5b600854601054610e109163ffffffff90911642030204985060008a51111515610f4e57600080fd5b8a9750600160a060020a0388161515610f65573397505b60009650600095505b89518610156112e0573360009081526007602052604090208a518b9088908110610f9457fe5b6020908102909101015163ffffffff1660488110610fae57fe5b0154945060019350600092505b84831015611198573360009081526007602052604090208a518b9088908110610fe057fe5b6020908102909101015163ffffffff1660488110610ffa57fe5b0180548490811061100757fe5b90600052602060002001546fffffffffffffffffffffffffffffffff16915060806007600033600160a060020a0316600160a060020a031681526020019081526020016000208b8881518110151561105b57fe5b6020908102909101015163ffffffff166048811061107557fe5b0180548590811061108257fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff169050808963ffffffff161080156110c25750818963ffffffff1610155b15611167576110ea88838b8d8a8151811015156110db57fe5b90602001906020020151612017565b3360009081526007602052604090208b51919098019763ffffffff8b16700100000000000000000000000000000000840217918c908990811061112957fe5b6020908102909101015163ffffffff166048811061114357fe5b0180548590811061115057fe5b90600052602060002001819055506000935061118d565b63ffffffff8916811161118d576111888883838d8a8151811015156110db57fe5b870196505b600183019250610fbb565b83156111e6573360009081526007602052604081208b518c90899081106111bb57fe5b6020908102909101015163ffffffff16604881106111d557fe5b6111e0910182613cdc565b506112d5565b3360009081526007602052604090208a518b908890811061120357fe5b6020908102909101015163ffffffff166048811061121d57fe5b018054600019870190811061122e57fe5b6000918252602080832090910154338352600790915260409091208b518c908990811061125757fe5b6020908102909101015163ffffffff166048811061127157fe5b018054600090811061127f57fe5b60009182526020808320909101929092553381526007909152604090208a51600191908c90899081106112ae57fe5b6020908102909101015163ffffffff16604881106112c857fe5b6112d3910182613cdc565b505b856001019550610f6e565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038a166004820152602481018990529051309163a9059cbb9160448083019260209291908290030181600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d602081101561137257600080fd5b50505050505050505050505050565b66038d7ea4c6800081565b33600090815260076020526040812081908190819086604881106113ac57fe5b018054869081106113b957fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff909116925060809087604881106113f857fe5b0180548790811061140557fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081819350935050509250929050565b601454600090600160a060020a031633148061145f5750600354600160a060020a031633145b151561146a57600080fd5b61147382612172565b600160a060020a03166000908152601360205260409020805460ff191660011790555050565b60175460a060020a900460ff1681565b6601c6bf5263400081565b336000908152600260209081526040808320600160a060020a03861684529091528120548083111561150957336000908152600260209081526040808320600160a060020a038816845290915281205561153e565b611519818463ffffffff61200516565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b601654600090819081908190600160a060020a031615156115df57600080fd5b336000908152600160205260409020549250848310156115fe57600080fd5b60065460ff16600a0a8581151561161157fe5b049150600182101561162257600080fd5b601654604080517f833eaa8b000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163833eaa8b916044808201926020929091908290030181600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050506040513d60208110156116b957600080fd5b5051600654909150610b549060ff16600a0a8302610db3565b600354600160a060020a031633146116e957600080fd5b60175460a060020a900460ff161561170057600080fd5b6017805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600354600160a060020a031681565b660aa87bee53800081565b601754600160a060020a031681565b6007602052600083815260409020826048811061179157fe5b0180548290811061179e57fe5b9060005260206000200160009250925050505481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b600354600160a060020a0316331461182657600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60105463ffffffff1681565b60175460009060a060020a900460ff161561187b57600080fd5b610d34838361223b565b336000908152600a6020526040812063ffffffff8316604881106118a557fe5b600891828204019190066004029054906101000a900463ffffffff169050919050565b600354600160a060020a031633146118df57600080fd5b6015805474ff000000000000000000000000000000000000000019169055565b601654600160a060020a031681565b6000610d34838361231e565b336000908152600260209081526040808320600160a060020a038616845290915281205461194e908363ffffffff61249516565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b6012546000908190819060ff1615611a0e573360009081526013602052604090205460ff161515611a0e57600080fd5b60175460a060020a900460ff1615611a2557600080fd5b8551600010611a3357600080fd5b8451865114611a4157600080fd5b8351865114611a4f57600080fd5b869250600160a060020a0383161515611a66573392505b600854601054610e109163ffffffff909116420302049150611a8886886124a4565b611a9583838888886126b5565b9050611aa48383888888612c16565b34811115611ab157600080fd5b336000908152600f60205260409020805434839003019055601554600160a060020a031615611b1a57601554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015611b14573d6000803e3d6000fd5b50611b23565b600e8054820190555b50505050505050565b600354600160a060020a03163314611b4357600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a03163314611b8957600080fd5b600160a060020a0381161515611b9e57600080fd5b600354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085481565b6000600160a060020a0383161515611c2457600080fd5b600160a060020a038416600090815260016020526040902054821115611c4957600080fd5b600160a060020a0384166000908152600260209081526040808320338452909152902054821115611c7957600080fd5b600160a060020a038416600090815260016020526040902054611ca2908363ffffffff61200516565b600160a060020a038086166000908152600160205260408082209390935590851681522054611cd7908363ffffffff61249516565b600160a060020a038085166000908152600160209081526040808320949094559187168152600282528281203382529091522054611d1b908363ffffffff61200516565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b6000808080808060048063ffffffff8916600160a060020a038c166000908152600d60209081526040808320949093049490940263ffffffff81811683529390945220919650891660488110611dd857fe5b60088104919091015460079091166004026101000a900463ffffffff16158015611e565750600160a060020a0389166000908152600d6020908152604080832063ffffffff60048a0181168552925290912090891660488110611e3757fe5b60088104919091015460079091166004026101000a900463ffffffff16155b15611e645760009550611ff9565b50600160a060020a0388166000908152600a602052604081208594509092505b63ffffffff80881690851611611fa15763ffffffff8085166000908152600983016020526040902090891660488110611eb957fe5b63ffffffff6017198701811660009081526009850160205260409020929091019350891660488110611ee757fe5b015463ffffffff600719860181166000908152600984016020526040902068010000000000000000909204811691908a1660488110611f2257fe5b015463ffffffff6003198701811660009081526009850160205260409020640100000000909204811691908b1660488110611f5957fe5b015484546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169290920191611e84565b600160a060020a0389166000908152600d6020908152604080832063ffffffff808a168552925290912084918a1660488110611fd957fe5b600891828204019190066004029054906101000a900463ffffffff160195505b50505050509392505050565b60008282111561201157fe5b50900390565b60408051600480825260a08201909252600091829160019183916060918291849160208201608080388339505060408051600480825260a082019092529295509050602082016080803883390190505091506004808063ffffffff8d16040201905063ffffffff808a16908216106120a5576120988b898c8c87878b612f75565b9681019695509350612105565b6120b48b898c8487878b612f75565b96810196955093505b8863ffffffff168163ffffffff161015612105576120f58b89836120ed63ffffffff808f169060048401166132b5565b87878b612f75565b96810196955093506004016120bd565b60408051600160a060020a038d16815263ffffffff808b166020830152808d16828401528b1660608201526080810188905290517feb20d87b6aef9216f658e1fcee101a026ada2f53b25e6fc37e6ed979b8d9f44f9181900360a00190a150939998505050505050505050565b60008080805b845182101561223257848281518110151561218f57fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049050603081108015906121d0575060398111155b156121e15760308103836010020192505b604181101580156121f35750605a8111155b156122045760378103836010020192505b606181101580156122165750607a8111155b156122275760578103836010020192505b600190910190612178565b50909392505050565b6000600160a060020a038316151561225257600080fd5b3360009081526001602052604090205482111561226e57600080fd5b3360009081526001602052604090205461228e908363ffffffff61200516565b3360009081526001602052604080822092909255600160a060020a038516815220546122c0908363ffffffff61249516565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b6000600463ffffffff831681900402808280805b63ffffffff808816908516116124475763ffffffff80851660009081526009602052604090209089166048811061236557fe5b63ffffffff60171987018116600090815260096020526040902092909101925089166048811061239157fe5b015463ffffffff60071986018116600090815260096020526040902068010000000000000000909204811691908a16604881106123ca57fe5b015463ffffffff600319870181166000908152600960205260409020640100000000909204811691908b16604881106123ff57fe5b015483546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169190910190612332565b63ffffffff8086166000908152600b6020526040902083918a166048811061246b57fe5b600891828204019190066004029054906101000a900463ffffffff16019550505050505092915050565b600082820183811015610d3457fe5b6060600080600080600080601560149054906101000a900460ff16156126aa5788516040519080825280602002602001820160405280156124ef578160200160208202803883390190505b50965060009550600094505b88518510156125b55760009350600092505b8583101561256557888581518110151561252357fe5b9060200190602002015163ffffffff16878481518110151561254157fe5b90602001906020020151141561255a5760019350612565565b60019092019161250d565b8315156125aa57888581518110151561257a57fe5b9060200190602002015163ffffffff16878781518110151561259857fe5b60209081029091010152600195909501945b6001909401936124fb565b600160a060020a038816600090815260116020526040902054151561262057600186146125e157600080fd5b6126028760008151811015156125f357fe5b906020019060200201516132df565b600160a060020a0389166000908152601160205260409020556126aa565b5050600160a060020a038616600090815260116020526040812054909350805b8585101561268e576000878681518110151561265857fe5b6020908102909101015160020a83161161267157600080fd5b61268287868151811015156125f357fe5b60019095019417612640565b600160a060020a03881660009081526011602052604090208190555b505050505050505050565b63ffffffff84166000818152600960208181526040808420600160a060020a038b168552600a8352818520958552949092019052812090918291829190825b8851811015612c0757878181518110151561270b57fe5b9060200190602002015163ffffffff16600414806127465750878181518110151561273257fe5b9060200190602002015163ffffffff166008145b8061276e5750878181518110151561275a57fe5b9060200190602002015163ffffffff166018145b151561277957600080fd5b878181518110151561278757fe5b9060200190602002015163ffffffff166004141561288e5786818151811015156127ad57fe5b90602001906020020151838a838151811015156127c657fe5b6020908102909101015163ffffffff16604881106127e057fe5b01805463ffffffff19811663ffffffff9182169390930116919091179055865187908290811061280c57fe5b90602001906020020151828a8381518110151561282557fe5b6020908102909101015163ffffffff166048811061283f57fe5b01805463ffffffff19811663ffffffff918216939093011691909117905586516601c6bf526340009088908390811061287457fe5b9060200190602002015163ffffffff160285019450612ae8565b878181518110151561289c57fe5b9060200190602002015163ffffffff16600814156129a85786818151811015156128c257fe5b90602001906020020151838a838151811015156128db57fe5b6020908102909101015163ffffffff16604881106128f557fe5b01805463ffffffff6401000000008083048216949094011690920267ffffffff0000000019909216919091179055865187908290811061293157fe5b90602001906020020151828a8381518110151561294a57fe5b6020908102909101015163ffffffff166048811061296457fe5b01805463ffffffff64010000000080830482169094011690920267ffffffff0000000019909216919091179055865166038d7ea4c680009088908390811061287457fe5b87818151811015156129b657fe5b9060200190602002015163ffffffff1660181415612ae85786818151811015156129dc57fe5b90602001906020020151838a838151811015156129f557fe5b6020908102909101015163ffffffff1660488110612a0f57fe5b01805463ffffffff68010000000000000000808304821694909401169092026bffffffff0000000000000000199092169190911790558651879082908110612a5357fe5b90602001906020020151828a83815181101515612a6c57fe5b6020908102909101015163ffffffff1660488110612a8657fe5b01805463ffffffff680100000000000000008083048216909401169092026bffffffff0000000000000000199092169190911790558651660aa87bee53800090889083908110612ad257fe5b9060200190602002015163ffffffff1602850194505b8681815181101515612af657fe5b90602001906020020151840193507f66412e9e4538ab9be49dd3e9c38afd30dc90b3bfdfe105047cf5cc945c311af68b8a83815181101515612b3457fe5b906020019060200201518c8b85815181101515612b4d57fe5b906020019060200201518e018b86815181101515612b6757fe5b602090810290910181015160408051600160a060020a03909716875263ffffffff9586169287019290925292841685820152908316606085015291166080830152519081900360a00190a1612bff8982815181101515612bc357fe5b9060200190602002015163ffffffff168b63ffffffff168a84815181101515612be857fe5b906020019060200201518d0163ffffffff1661335d565b6001016126f4565b50929998505050505050505050565b600160a060020a0385166000908152600d602052604081208190600487810191600889019160188a0191600163ffffffff8c16839004019091029085805b8b51811015612f65578b81815181101515612c6b57fe5b9060200190602002015198508981815181101515612c8557fe5b9060200190602002015197508a81815181101515612c9f57fe5b9060200190602002015163ffffffff1660041415612d83578391505b63ffffffff80881690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612cef57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612d4257fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612cbb565b612f5d565b8a81815181101515612d9157fe5b9060200190602002015163ffffffff1660081415612e70578391505b63ffffffff80871690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612de157fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612e3457fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612dad565b8a81815181101515612e7e57fe5b9060200190602002015163ffffffff1660181415612f5d578391505b63ffffffff80861690831611612f5d5763ffffffff8083166000908152600b6020526040902089918b1660488110612ece57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612f2157fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612e9a565b600101612c54565b5050505050505050505050505050565b600160a060020a0387166000908152600d60209081526040808320600463ffffffff8a811682900490910281168552925282208391839182918291908c1660488110612fbd57fe5b60088104919091015460079091166004026101000a900463ffffffff161580156130445750600160a060020a038c166000908152600d60209081526040808320600463ffffffff8f81168290048202909101811685529252909120908c166048811061302557fe5b60088104919091015460079091166004026101000a900463ffffffff16155b1561304e576132a6565b61305c8c8c8c8c8c8c613539565b601863ffffffff8b811691909104166000908152600c6020526040902054925082151561319d57601863ffffffff8b160491505b600063ffffffff8316106130ca5763ffffffff82166000908152600c6020526040902054156130be576130ca565b60001990910190613090565b63ffffffff82166000908152600c602052604090205492506001909101905b601863ffffffff8b160463ffffffff168263ffffffff1611151561315e5761271061270c84020492508363ffffffff168260188c63ffffffff1681151561312c57fe5b040363ffffffff1610156131535763ffffffff82166000908152600c602052604090208390555b8160010191506130e9565b600182601863ffffffff8d1604030363ffffffff168463ffffffff16111561319857600182601863ffffffff8d160403038403935061319d565b600093505b601754601054604080517f0eb3f993000000000000000000000000000000000000000000000000000000008152610e108e0263ffffffff9384160183166004820152918e16602483015251600160a060020a0390921691630eb3f993916044808201926020929091908290030181600087803b15801561321c57600080fd5b505af1158015613230573d6000803e3d6000fd5b505050506040513d602081101561324657600080fd5b505163ffffffff1690506000811161325d57600080fd5b60486018600a838602040404925061327a8a8a03888a8685613bd4565b945080600a141561329357600a600886020494506132a6565b80600514156132a657600a600686020494505b50505097509795505050505050565b60008167ffffffffffffffff168367ffffffffffffffff16106132d85781610d34565b5090919050565b60006008820460078316600284900a60001983018411613308576008600019840102820160020a175b60098360010110156133225760086001840102820160020a175b600060001983011061333d576000196008840283010160020a175b6008826001011015610b54576008929092020160010160020a1792915050565b33600090815260076020526040812081908190866048811061337b57fe5b015492508215156133d15733600090815260076020526040902086604881106133a057fe5b0180546001810182556000918252602090912070010000000000000000000000000000000086028717910155613531565b33600090815260076020526040902086604881106133eb57fe5b01805460001985019081106133fc57fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff9091169250608090876048811061343b57fe5b018054600019860190811061344c57fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081851015801561348057508085105b156134ea578381116134925783613494565b805b336000908152600760205260409020909450700100000000000000000000000000000000850283179087604881106134c857fe5b01805460001986019081106134d957fe5b600091825260209091200155613531565b336000908152600760205260409020866048811061350457fe5b01805460018101825560009182526020909120700100000000000000000000000000000000860287179101555b505050505050565b6000808080808080600463ffffffff8c8c0316111561355757600080fd5b600160a060020a038d166000908152600a60205260408120600463ffffffff8e1681900402985090965086955091505b63ffffffff808c169088161161379c5763ffffffff80881660009081526009840160205260409020908d16604881106135bc57fe5b63ffffffff808a1660009081526009602052604090209290910195508d16604881106135e457fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061361057fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e166048811061364957fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f166048811061367e57fe5b015485546017198b0163ffffffff90811660009081526009880160205260409020928116828216640100000000840483160168010000000000000000909304821692909201919091039290920392909203811696909601958d16604881106136e257fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e166048811061371d57fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f166048811061375457fe5b0154865460019a909a019963ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169590950194613587565b84600b6000600460ff16600460ff168f63ffffffff168115156137bb57fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156137ea57fe5b600891828204019190066004029054906101000a900463ffffffff160189600081518110151561381657fe5b9060200190602002019063ffffffff16908163ffffffff168152505085600d60008f600160a060020a0316600160a060020a031681526020019081526020016000206000016000600460ff16600460ff168f63ffffffff1681151561387757fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156138a657fe5b600891828204019190066004029054906101000a900463ffffffff16018860008151811015156138d257fe5b63ffffffff9092166020928302909101909101525060018a810196505b8963ffffffff168763ffffffff1610156113725763ffffffff80881660009081526009840160205260409020908d166048811061392857fe5b63ffffffff808a1660009081526009602052604090209290910195508d166048811061395057fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061397c57fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e16604881106139b557fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f16604881106139ea57fe5b01600060088104919091015460079091166004026101000a900463ffffffff1685600260088104919091015460079091166004026101000a900463ffffffff1686600160088104919091015460079091166004026101000a900463ffffffff16876000600891828204019190066004029054906101000a900463ffffffff168e6001880363ffffffff16815181101515613a8057fe5b90602001906020020151010101030303898263ffffffff16815181101515613aa457fe5b63ffffffff92831660209182029092018101919091526017198901821660009081526009850190915260409020908d1660488110613ade57fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e1660488110613b1957fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f1660488110613b5057fe5b015486548b5163ffffffff928316926801000000000000000083048116926401000000008104821692908216918f916000198a01909116908110613b9057fe5b90602001906020020151010101030303888263ffffffff16815181101515613bb457fe5b63ffffffff909216602092830290910190910152600196870196016138ef565b600080805b8763ffffffff16811015613ca3578681815181101515613bf557fe5b9060200190602002015163ffffffff16600014158015613c3357508581815181101515613c1e57fe5b9060200190602002015163ffffffff16600014155b15613c9b578681815181101515613c4657fe5b60209081029091010151600654875163ffffffff90921691613c959160ff16600a0a90899085908110613c7557fe5b9060200190602002015163ffffffff1688811515613c8f57fe5b04613cae565b02820191505b600101613bd9565b509695505050505050565b60008183106132d85781610d34565b6060604051908101604052806003906020820280388339509192915050565b815481835581811115613d0057600083815260209020613d00918101908301613d05565b505050565b613d2391905b80821115613d1f5760008155600101613d0b565b5090565b905600a165627a7a723058207502ec7dc64dc5cbf594830ad5a7904e16365f453afcbcc56527f1118d6986d90029

Deployed Bytecode

0x60806040526004361061023a5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630433df85811461023f57806306087e5b1461027257806306fdde0314610295578063095ea7b31461031f57806314dacf5b146103575780631813aea51461036c57806318160ddd1461039757806323b872dd146103ac57806328ce5cdb146103d65780632b048f77146103eb5780632c027eb9146104475780632ff2e9dc1461045f578063313ce567146104745780633b404266146104895780633ccfd60b146104ad5780633dd00c42146104c25780633f4ba83a146104ff57806342966c681461051457806347b64eb01461052c5780634d6a7d331461054d5780634dbd71eb146105b057806350beb835146105c55780635a589fc9146105f95780635c975abb1461065257806363c2558a14610667578063661884631461067c57806370a08231146106a057806382281104146106c15780638456cb59146106d95780638da5cb5b146106ee5780638e73d8571461071f5780638ffdbf0b1461073457806390ce34ec1461074957806395d89b411461077057806395ddb3a614610785578063a7d53800146107a6578063a9059cbb146107bb578063a949f3af146107df578063b74d13a5146107fd578063cc99ece114610812578063d6387a3e14610827578063d73dd6231461084b578063dd62ed3e1461086f578063eea0d16814610896578063f0a7975f1461095e578063f2fde38b1461097f578063f32b85e8146109a0575b600080fd5b34801561024b57600080fd5b50610260600160a060020a03600435166109b5565b60408051918252519081900360200190f35b34801561027e57600080fd5b50610293600160a060020a03600435166109c7565b005b3480156102a157600080fd5b506102aa610a0d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e45781810151838201526020016102cc565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b50610343600160a060020a0360043516602435610a9b565b604080519115158252519081900360200190f35b34801561036357600080fd5b50610293610b01565b34801561037857600080fd5b50610381610b24565b6040805160ff9092168252519081900360200190f35b3480156103a357600080fd5b50610260610b29565b3480156103b857600080fd5b50610343600160a060020a0360043581169060243516604435610b2f565b3480156103e257600080fd5b50610293610b5c565b3480156103f757600080fd5b5061040f63ffffffff60043581169060243516610bc6565b6040518082606080838360005b8381101561043457818101518382015260200161041c565b5050505090500191505060405180910390f35b34801561045357600080fd5b50610260600435610c64565b34801561046b57600080fd5b50610260610c86565b34801561048057600080fd5b50610381610c98565b34801561049557600080fd5b5061040f63ffffffff60043581169060243516610ca1565b3480156104b957600080fd5b50610293610ccc565b3480156104ce57600080fd5b506104e663ffffffff60043581169060243516610d27565b6040805163ffffffff9092168252519081900360200190f35b34801561050b57600080fd5b50610293610d3b565b34801561052057600080fd5b50610293600435610db3565b34801561053857600080fd5b50610293600160a060020a0360043516610e71565b34801561055957600080fd5b50604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750949750610eb79650505050505050565b3480156105bc57600080fd5b50610260611381565b3480156105d157600080fd5b506105e060043560243561138c565b6040805192835260208301919091528051918290030190f35b34801561060557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102939436949293602493928401919081908401838280828437509497506114399650505050505050565b34801561065e57600080fd5b50610343611499565b34801561067357600080fd5b506102606114a9565b34801561068857600080fd5b50610343600160a060020a03600435166024356114b4565b3480156106ac57600080fd5b50610260600160a060020a03600435166115a4565b3480156106cd57600080fd5b506102606004356115bf565b3480156106e557600080fd5b506102936116d2565b3480156106fa57600080fd5b5061070361174f565b60408051600160a060020a039092168252519081900360200190f35b34801561072b57600080fd5b5061026061175e565b34801561074057600080fd5b50610703611769565b34801561075557600080fd5b50610260600160a060020a0360043516602435604435611778565b34801561077c57600080fd5b506102aa6117b4565b34801561079157600080fd5b50610293600160a060020a036004351661180f565b3480156107b257600080fd5b506104e6611855565b3480156107c757600080fd5b50610343600160a060020a0360043516602435611861565b3480156107eb57600080fd5b506104e663ffffffff60043516611885565b34801561080957600080fd5b506102936118c8565b34801561081e57600080fd5b506107036118ff565b34801561083357600080fd5b506104e663ffffffff6004358116906024351661190e565b34801561085757600080fd5b50610343600160a060020a036004351660243561191a565b34801561087b57600080fd5b50610260600160a060020a03600435811690602435166119b3565b604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506119de9650505050505050565b34801561096a57600080fd5b50610293600160a060020a0360043516611b2c565b34801561098b57600080fd5b50610293600160a060020a0360043516611b72565b3480156109ac57600080fd5b50610260611c07565b600f6020526000908152604090205481565b600354600160a060020a031633146109de57600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600354600160a060020a03163314610b1857600080fd5b6012805460ff19169055565b600481565b60005481565b60175460009060a060020a900460ff1615610b4957600080fd5b610b54848484611c0d565b949350505050565b600354600160a060020a03163314610b7357600080fd5b600e54600010610b8257600080fd5b600354600e54604051600160a060020a039092169181156108fc0291906000818181858888f19350505050158015610bbe573d6000803e3d6000fd5b506000600e55565b610bce613cbd565b336000908152600a6020908152604080832063ffffffff8087168552600990910190925290912090841660488110610c0257fe5b604080516060810191829052929190910190600390826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610c1c57509498975050505050505050565b3360009081526007602052604081208260488110610c7e57fe5b015492915050565b60065460ff16600a0a632faf08000281565b60065460ff1681565b610ca9613cbd565b63ffffffff808316600090815260096020526040902090841660488110610c0257fe5b336000908152600f6020526040812054908111610ce857600080fd5b336000818152600f60205260408082208290555183156108fc0291849190818181858888f19350505050158015610d23573d6000803e3d6000fd5b5050565b6000610d34338484611d86565b9392505050565b600354600160a060020a03163314610d5257600080fd5b60175460a060020a900460ff161515610d6a57600080fd5b6017805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000808211610dc157600080fd5b33600090815260016020526040902054821115610ddd57600080fd5b5033600081815260016020526040902054610dfe908363ffffffff61200516565b600160a060020a03821660009081526001602052604081209190915554610e2b908363ffffffff61200516565b600055604080518381529051600160a060020a038316917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25050565b600354600160a060020a03163314610e8857600080fd5b6014805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000806000806000806000601260009054906101000a900460ff1615610ef8573360009081526013602052604090205460ff161515610ef857600080fd5b60175460a060020a900460ff1615610f0f57600080fd5b601754600160a060020a03161515610f2657600080fd5b600854601054610e109163ffffffff90911642030204985060008a51111515610f4e57600080fd5b8a9750600160a060020a0388161515610f65573397505b60009650600095505b89518610156112e0573360009081526007602052604090208a518b9088908110610f9457fe5b6020908102909101015163ffffffff1660488110610fae57fe5b0154945060019350600092505b84831015611198573360009081526007602052604090208a518b9088908110610fe057fe5b6020908102909101015163ffffffff1660488110610ffa57fe5b0180548490811061100757fe5b90600052602060002001546fffffffffffffffffffffffffffffffff16915060806007600033600160a060020a0316600160a060020a031681526020019081526020016000208b8881518110151561105b57fe5b6020908102909101015163ffffffff166048811061107557fe5b0180548590811061108257fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff169050808963ffffffff161080156110c25750818963ffffffff1610155b15611167576110ea88838b8d8a8151811015156110db57fe5b90602001906020020151612017565b3360009081526007602052604090208b51919098019763ffffffff8b16700100000000000000000000000000000000840217918c908990811061112957fe5b6020908102909101015163ffffffff166048811061114357fe5b0180548590811061115057fe5b90600052602060002001819055506000935061118d565b63ffffffff8916811161118d576111888883838d8a8151811015156110db57fe5b870196505b600183019250610fbb565b83156111e6573360009081526007602052604081208b518c90899081106111bb57fe5b6020908102909101015163ffffffff16604881106111d557fe5b6111e0910182613cdc565b506112d5565b3360009081526007602052604090208a518b908890811061120357fe5b6020908102909101015163ffffffff166048811061121d57fe5b018054600019870190811061122e57fe5b6000918252602080832090910154338352600790915260409091208b518c908990811061125757fe5b6020908102909101015163ffffffff166048811061127157fe5b018054600090811061127f57fe5b60009182526020808320909101929092553381526007909152604090208a51600191908c90899081106112ae57fe5b6020908102909101015163ffffffff16604881106112c857fe5b6112d3910182613cdc565b505b856001019550610f6e565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038a166004820152602481018990529051309163a9059cbb9160448083019260209291908290030181600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d602081101561137257600080fd5b50505050505050505050505050565b66038d7ea4c6800081565b33600090815260076020526040812081908190819086604881106113ac57fe5b018054869081106113b957fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff909116925060809087604881106113f857fe5b0180548790811061140557fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081819350935050509250929050565b601454600090600160a060020a031633148061145f5750600354600160a060020a031633145b151561146a57600080fd5b61147382612172565b600160a060020a03166000908152601360205260409020805460ff191660011790555050565b60175460a060020a900460ff1681565b6601c6bf5263400081565b336000908152600260209081526040808320600160a060020a03861684529091528120548083111561150957336000908152600260209081526040808320600160a060020a038816845290915281205561153e565b611519818463ffffffff61200516565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b601654600090819081908190600160a060020a031615156115df57600080fd5b336000908152600160205260409020549250848310156115fe57600080fd5b60065460ff16600a0a8581151561161157fe5b049150600182101561162257600080fd5b601654604080517f833eaa8b000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163833eaa8b916044808201926020929091908290030181600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050506040513d60208110156116b957600080fd5b5051600654909150610b549060ff16600a0a8302610db3565b600354600160a060020a031633146116e957600080fd5b60175460a060020a900460ff161561170057600080fd5b6017805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600354600160a060020a031681565b660aa87bee53800081565b601754600160a060020a031681565b6007602052600083815260409020826048811061179157fe5b0180548290811061179e57fe5b9060005260206000200160009250925050505481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b600354600160a060020a0316331461182657600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60105463ffffffff1681565b60175460009060a060020a900460ff161561187b57600080fd5b610d34838361223b565b336000908152600a6020526040812063ffffffff8316604881106118a557fe5b600891828204019190066004029054906101000a900463ffffffff169050919050565b600354600160a060020a031633146118df57600080fd5b6015805474ff000000000000000000000000000000000000000019169055565b601654600160a060020a031681565b6000610d34838361231e565b336000908152600260209081526040808320600160a060020a038616845290915281205461194e908363ffffffff61249516565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b6012546000908190819060ff1615611a0e573360009081526013602052604090205460ff161515611a0e57600080fd5b60175460a060020a900460ff1615611a2557600080fd5b8551600010611a3357600080fd5b8451865114611a4157600080fd5b8351865114611a4f57600080fd5b869250600160a060020a0383161515611a66573392505b600854601054610e109163ffffffff909116420302049150611a8886886124a4565b611a9583838888886126b5565b9050611aa48383888888612c16565b34811115611ab157600080fd5b336000908152600f60205260409020805434839003019055601554600160a060020a031615611b1a57601554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015611b14573d6000803e3d6000fd5b50611b23565b600e8054820190555b50505050505050565b600354600160a060020a03163314611b4357600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a03163314611b8957600080fd5b600160a060020a0381161515611b9e57600080fd5b600354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085481565b6000600160a060020a0383161515611c2457600080fd5b600160a060020a038416600090815260016020526040902054821115611c4957600080fd5b600160a060020a0384166000908152600260209081526040808320338452909152902054821115611c7957600080fd5b600160a060020a038416600090815260016020526040902054611ca2908363ffffffff61200516565b600160a060020a038086166000908152600160205260408082209390935590851681522054611cd7908363ffffffff61249516565b600160a060020a038085166000908152600160209081526040808320949094559187168152600282528281203382529091522054611d1b908363ffffffff61200516565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b6000808080808060048063ffffffff8916600160a060020a038c166000908152600d60209081526040808320949093049490940263ffffffff81811683529390945220919650891660488110611dd857fe5b60088104919091015460079091166004026101000a900463ffffffff16158015611e565750600160a060020a0389166000908152600d6020908152604080832063ffffffff60048a0181168552925290912090891660488110611e3757fe5b60088104919091015460079091166004026101000a900463ffffffff16155b15611e645760009550611ff9565b50600160a060020a0388166000908152600a602052604081208594509092505b63ffffffff80881690851611611fa15763ffffffff8085166000908152600983016020526040902090891660488110611eb957fe5b63ffffffff6017198701811660009081526009850160205260409020929091019350891660488110611ee757fe5b015463ffffffff600719860181166000908152600984016020526040902068010000000000000000909204811691908a1660488110611f2257fe5b015463ffffffff6003198701811660009081526009850160205260409020640100000000909204811691908b1660488110611f5957fe5b015484546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169290920191611e84565b600160a060020a0389166000908152600d6020908152604080832063ffffffff808a168552925290912084918a1660488110611fd957fe5b600891828204019190066004029054906101000a900463ffffffff160195505b50505050509392505050565b60008282111561201157fe5b50900390565b60408051600480825260a08201909252600091829160019183916060918291849160208201608080388339505060408051600480825260a082019092529295509050602082016080803883390190505091506004808063ffffffff8d16040201905063ffffffff808a16908216106120a5576120988b898c8c87878b612f75565b9681019695509350612105565b6120b48b898c8487878b612f75565b96810196955093505b8863ffffffff168163ffffffff161015612105576120f58b89836120ed63ffffffff808f169060048401166132b5565b87878b612f75565b96810196955093506004016120bd565b60408051600160a060020a038d16815263ffffffff808b166020830152808d16828401528b1660608201526080810188905290517feb20d87b6aef9216f658e1fcee101a026ada2f53b25e6fc37e6ed979b8d9f44f9181900360a00190a150939998505050505050505050565b60008080805b845182101561223257848281518110151561218f57fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049050603081108015906121d0575060398111155b156121e15760308103836010020192505b604181101580156121f35750605a8111155b156122045760378103836010020192505b606181101580156122165750607a8111155b156122275760578103836010020192505b600190910190612178565b50909392505050565b6000600160a060020a038316151561225257600080fd5b3360009081526001602052604090205482111561226e57600080fd5b3360009081526001602052604090205461228e908363ffffffff61200516565b3360009081526001602052604080822092909255600160a060020a038516815220546122c0908363ffffffff61249516565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b6000600463ffffffff831681900402808280805b63ffffffff808816908516116124475763ffffffff80851660009081526009602052604090209089166048811061236557fe5b63ffffffff60171987018116600090815260096020526040902092909101925089166048811061239157fe5b015463ffffffff60071986018116600090815260096020526040902068010000000000000000909204811691908a16604881106123ca57fe5b015463ffffffff600319870181166000908152600960205260409020640100000000909204811691908b16604881106123ff57fe5b015483546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169190910190612332565b63ffffffff8086166000908152600b6020526040902083918a166048811061246b57fe5b600891828204019190066004029054906101000a900463ffffffff16019550505050505092915050565b600082820183811015610d3457fe5b6060600080600080600080601560149054906101000a900460ff16156126aa5788516040519080825280602002602001820160405280156124ef578160200160208202803883390190505b50965060009550600094505b88518510156125b55760009350600092505b8583101561256557888581518110151561252357fe5b9060200190602002015163ffffffff16878481518110151561254157fe5b90602001906020020151141561255a5760019350612565565b60019092019161250d565b8315156125aa57888581518110151561257a57fe5b9060200190602002015163ffffffff16878781518110151561259857fe5b60209081029091010152600195909501945b6001909401936124fb565b600160a060020a038816600090815260116020526040902054151561262057600186146125e157600080fd5b6126028760008151811015156125f357fe5b906020019060200201516132df565b600160a060020a0389166000908152601160205260409020556126aa565b5050600160a060020a038616600090815260116020526040812054909350805b8585101561268e576000878681518110151561265857fe5b6020908102909101015160020a83161161267157600080fd5b61268287868151811015156125f357fe5b60019095019417612640565b600160a060020a03881660009081526011602052604090208190555b505050505050505050565b63ffffffff84166000818152600960208181526040808420600160a060020a038b168552600a8352818520958552949092019052812090918291829190825b8851811015612c0757878181518110151561270b57fe5b9060200190602002015163ffffffff16600414806127465750878181518110151561273257fe5b9060200190602002015163ffffffff166008145b8061276e5750878181518110151561275a57fe5b9060200190602002015163ffffffff166018145b151561277957600080fd5b878181518110151561278757fe5b9060200190602002015163ffffffff166004141561288e5786818151811015156127ad57fe5b90602001906020020151838a838151811015156127c657fe5b6020908102909101015163ffffffff16604881106127e057fe5b01805463ffffffff19811663ffffffff9182169390930116919091179055865187908290811061280c57fe5b90602001906020020151828a8381518110151561282557fe5b6020908102909101015163ffffffff166048811061283f57fe5b01805463ffffffff19811663ffffffff918216939093011691909117905586516601c6bf526340009088908390811061287457fe5b9060200190602002015163ffffffff160285019450612ae8565b878181518110151561289c57fe5b9060200190602002015163ffffffff16600814156129a85786818151811015156128c257fe5b90602001906020020151838a838151811015156128db57fe5b6020908102909101015163ffffffff16604881106128f557fe5b01805463ffffffff6401000000008083048216949094011690920267ffffffff0000000019909216919091179055865187908290811061293157fe5b90602001906020020151828a8381518110151561294a57fe5b6020908102909101015163ffffffff166048811061296457fe5b01805463ffffffff64010000000080830482169094011690920267ffffffff0000000019909216919091179055865166038d7ea4c680009088908390811061287457fe5b87818151811015156129b657fe5b9060200190602002015163ffffffff1660181415612ae85786818151811015156129dc57fe5b90602001906020020151838a838151811015156129f557fe5b6020908102909101015163ffffffff1660488110612a0f57fe5b01805463ffffffff68010000000000000000808304821694909401169092026bffffffff0000000000000000199092169190911790558651879082908110612a5357fe5b90602001906020020151828a83815181101515612a6c57fe5b6020908102909101015163ffffffff1660488110612a8657fe5b01805463ffffffff680100000000000000008083048216909401169092026bffffffff0000000000000000199092169190911790558651660aa87bee53800090889083908110612ad257fe5b9060200190602002015163ffffffff1602850194505b8681815181101515612af657fe5b90602001906020020151840193507f66412e9e4538ab9be49dd3e9c38afd30dc90b3bfdfe105047cf5cc945c311af68b8a83815181101515612b3457fe5b906020019060200201518c8b85815181101515612b4d57fe5b906020019060200201518e018b86815181101515612b6757fe5b602090810290910181015160408051600160a060020a03909716875263ffffffff9586169287019290925292841685820152908316606085015291166080830152519081900360a00190a1612bff8982815181101515612bc357fe5b9060200190602002015163ffffffff168b63ffffffff168a84815181101515612be857fe5b906020019060200201518d0163ffffffff1661335d565b6001016126f4565b50929998505050505050505050565b600160a060020a0385166000908152600d602052604081208190600487810191600889019160188a0191600163ffffffff8c16839004019091029085805b8b51811015612f65578b81815181101515612c6b57fe5b9060200190602002015198508981815181101515612c8557fe5b9060200190602002015197508a81815181101515612c9f57fe5b9060200190602002015163ffffffff1660041415612d83578391505b63ffffffff80881690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612cef57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612d4257fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612cbb565b612f5d565b8a81815181101515612d9157fe5b9060200190602002015163ffffffff1660081415612e70578391505b63ffffffff80871690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612de157fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612e3457fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612dad565b8a81815181101515612e7e57fe5b9060200190602002015163ffffffff1660181415612f5d578391505b63ffffffff80861690831611612f5d5763ffffffff8083166000908152600b6020526040902089918b1660488110612ece57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612f2157fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612e9a565b600101612c54565b5050505050505050505050505050565b600160a060020a0387166000908152600d60209081526040808320600463ffffffff8a811682900490910281168552925282208391839182918291908c1660488110612fbd57fe5b60088104919091015460079091166004026101000a900463ffffffff161580156130445750600160a060020a038c166000908152600d60209081526040808320600463ffffffff8f81168290048202909101811685529252909120908c166048811061302557fe5b60088104919091015460079091166004026101000a900463ffffffff16155b1561304e576132a6565b61305c8c8c8c8c8c8c613539565b601863ffffffff8b811691909104166000908152600c6020526040902054925082151561319d57601863ffffffff8b160491505b600063ffffffff8316106130ca5763ffffffff82166000908152600c6020526040902054156130be576130ca565b60001990910190613090565b63ffffffff82166000908152600c602052604090205492506001909101905b601863ffffffff8b160463ffffffff168263ffffffff1611151561315e5761271061270c84020492508363ffffffff168260188c63ffffffff1681151561312c57fe5b040363ffffffff1610156131535763ffffffff82166000908152600c602052604090208390555b8160010191506130e9565b600182601863ffffffff8d1604030363ffffffff168463ffffffff16111561319857600182601863ffffffff8d160403038403935061319d565b600093505b601754601054604080517f0eb3f993000000000000000000000000000000000000000000000000000000008152610e108e0263ffffffff9384160183166004820152918e16602483015251600160a060020a0390921691630eb3f993916044808201926020929091908290030181600087803b15801561321c57600080fd5b505af1158015613230573d6000803e3d6000fd5b505050506040513d602081101561324657600080fd5b505163ffffffff1690506000811161325d57600080fd5b60486018600a838602040404925061327a8a8a03888a8685613bd4565b945080600a141561329357600a600886020494506132a6565b80600514156132a657600a600686020494505b50505097509795505050505050565b60008167ffffffffffffffff168367ffffffffffffffff16106132d85781610d34565b5090919050565b60006008820460078316600284900a60001983018411613308576008600019840102820160020a175b60098360010110156133225760086001840102820160020a175b600060001983011061333d576000196008840283010160020a175b6008826001011015610b54576008929092020160010160020a1792915050565b33600090815260076020526040812081908190866048811061337b57fe5b015492508215156133d15733600090815260076020526040902086604881106133a057fe5b0180546001810182556000918252602090912070010000000000000000000000000000000086028717910155613531565b33600090815260076020526040902086604881106133eb57fe5b01805460001985019081106133fc57fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff9091169250608090876048811061343b57fe5b018054600019860190811061344c57fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081851015801561348057508085105b156134ea578381116134925783613494565b805b336000908152600760205260409020909450700100000000000000000000000000000000850283179087604881106134c857fe5b01805460001986019081106134d957fe5b600091825260209091200155613531565b336000908152600760205260409020866048811061350457fe5b01805460018101825560009182526020909120700100000000000000000000000000000000860287179101555b505050505050565b6000808080808080600463ffffffff8c8c0316111561355757600080fd5b600160a060020a038d166000908152600a60205260408120600463ffffffff8e1681900402985090965086955091505b63ffffffff808c169088161161379c5763ffffffff80881660009081526009840160205260409020908d16604881106135bc57fe5b63ffffffff808a1660009081526009602052604090209290910195508d16604881106135e457fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061361057fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e166048811061364957fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f166048811061367e57fe5b015485546017198b0163ffffffff90811660009081526009880160205260409020928116828216640100000000840483160168010000000000000000909304821692909201919091039290920392909203811696909601958d16604881106136e257fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e166048811061371d57fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f166048811061375457fe5b0154865460019a909a019963ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169590950194613587565b84600b6000600460ff16600460ff168f63ffffffff168115156137bb57fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156137ea57fe5b600891828204019190066004029054906101000a900463ffffffff160189600081518110151561381657fe5b9060200190602002019063ffffffff16908163ffffffff168152505085600d60008f600160a060020a0316600160a060020a031681526020019081526020016000206000016000600460ff16600460ff168f63ffffffff1681151561387757fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156138a657fe5b600891828204019190066004029054906101000a900463ffffffff16018860008151811015156138d257fe5b63ffffffff9092166020928302909101909101525060018a810196505b8963ffffffff168763ffffffff1610156113725763ffffffff80881660009081526009840160205260409020908d166048811061392857fe5b63ffffffff808a1660009081526009602052604090209290910195508d166048811061395057fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061397c57fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e16604881106139b557fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f16604881106139ea57fe5b01600060088104919091015460079091166004026101000a900463ffffffff1685600260088104919091015460079091166004026101000a900463ffffffff1686600160088104919091015460079091166004026101000a900463ffffffff16876000600891828204019190066004029054906101000a900463ffffffff168e6001880363ffffffff16815181101515613a8057fe5b90602001906020020151010101030303898263ffffffff16815181101515613aa457fe5b63ffffffff92831660209182029092018101919091526017198901821660009081526009850190915260409020908d1660488110613ade57fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e1660488110613b1957fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f1660488110613b5057fe5b015486548b5163ffffffff928316926801000000000000000083048116926401000000008104821692908216918f916000198a01909116908110613b9057fe5b90602001906020020151010101030303888263ffffffff16815181101515613bb457fe5b63ffffffff909216602092830290910190910152600196870196016138ef565b600080805b8763ffffffff16811015613ca3578681815181101515613bf557fe5b9060200190602002015163ffffffff16600014158015613c3357508581815181101515613c1e57fe5b9060200190602002015163ffffffff16600014155b15613c9b578681815181101515613c4657fe5b60209081029091010151600654875163ffffffff90921691613c959160ff16600a0a90899085908110613c7557fe5b9060200190602002015163ffffffff1688811515613c8f57fe5b04613cae565b02820191505b600101613bd9565b509695505050505050565b60008183106132d85781610d34565b6060604051908101604052806003906020820280388339509192915050565b815481835581811115613d0057600083815260209020613d00918101908301613d05565b505050565b613d2391905b80821115613d1f5760008155600101613d0b565b5090565b905600a165627a7a723058207502ec7dc64dc5cbf594830ad5a7904e16365f453afcbcc56527f1118d6986d90029

Swarm Source

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