ETH Price: $3,654.37 (+0.90%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem138341402021-12-19 7:13:211114 days ago1639898001IN
0xE452c8bE...0A55e8e1a
0 ETH0.0035555332.85619444
Redeem137891022021-12-12 8:01:281121 days ago1639296088IN
0xE452c8bE...0A55e8e1a
0 ETH0.0050866545.93249575
Redeem137890942021-12-12 7:59:131121 days ago1639295953IN
0xE452c8bE...0A55e8e1a
0 ETH0.0046582542.15429015
Redeem136879892021-11-26 5:46:231137 days ago1637905583IN
0xE452c8bE...0A55e8e1a
0 ETH0.0068687568.35060433
Redeem136877452021-11-26 4:51:041137 days ago1637902264IN
0xE452c8bE...0A55e8e1a
0 ETH0.0081161275
Redeem136478492021-11-19 21:15:251143 days ago1637356525IN
0xE452c8bE...0A55e8e1a
0 ETH0.01791595177.86113069
Redeem136478452021-11-19 21:14:411143 days ago1637356481IN
0xE452c8bE...0A55e8e1a
0 ETH0.01671245171.47307678
Redeem136121392021-11-14 5:34:091149 days ago1636868049IN
0xE452c8bE...0A55e8e1a
0 ETH0.01170386106.32434115
Staking135640942021-11-06 16:34:541156 days ago1636216494IN
0xE452c8bE...0A55e8e1a
0 ETH0.0242882471
Redeem134587802021-10-21 4:04:361173 days ago1634789076IN
0xE452c8bE...0A55e8e1a
0 ETH0.0028744480.40846645
Redeem134587802021-10-21 4:04:361173 days ago1634789076IN
0xE452c8bE...0A55e8e1a
0 ETH0.0081141180.00667337
Redeem134586952021-10-21 3:41:411173 days ago1634787701IN
0xE452c8bE...0A55e8e1a
0 ETH0.0081028674.3729978
Redeem134586712021-10-21 3:35:451173 days ago1634787345IN
0xE452c8bE...0A55e8e1a
0 ETH0.0068092764.44512316
Redeem134586612021-10-21 3:33:441173 days ago1634787224IN
0xE452c8bE...0A55e8e1a
0 ETH0.0068300665.51242127
Redeem134586542021-10-21 3:32:391173 days ago1634787159IN
0xE452c8bE...0A55e8e1a
0 ETH0.0064405262.55058258
Staking132993292021-09-26 4:35:511198 days ago1632630951IN
0xE452c8bE...0A55e8e1a
0 ETH0.0138192641.47053646
Staking132813572021-09-23 10:07:321201 days ago1632391652IN
0xE452c8bE...0A55e8e1a
0 ETH0.0118612537.54311067
Staking132728142021-09-22 2:07:101202 days ago1632276430IN
0xE452c8bE...0A55e8e1a
0 ETH0.0135173271.91289978
Staking132574672021-09-19 17:17:011204 days ago1632071821IN
0xE452c8bE...0A55e8e1a
0 ETH0.0072409734.91846501
Staking132574532021-09-19 17:14:531204 days ago1632071693IN
0xE452c8bE...0A55e8e1a
0 ETH0.0232425336
Staking132568862021-09-19 15:16:451204 days ago1632064605IN
0xE452c8bE...0A55e8e1a
0 ETH0.0077849859.5
Staking132562792021-09-19 13:02:251205 days ago1632056545IN
0xE452c8bE...0A55e8e1a
0 ETH0.0073097537.00000145
Staking132548292021-09-19 7:34:491205 days ago1632036889IN
0xE452c8bE...0A55e8e1a
0 ETH0.0049193733.82969443
Staking132281772021-09-15 4:37:371209 days ago1631680657IN
0xE452c8bE...0A55e8e1a
0 ETH0.0058277741.89328567
Staking132030532021-09-11 7:14:501213 days ago1631344490IN
0xE452c8bE...0A55e8e1a
0 ETH0.007568653.68871838
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CompStaking

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : CompStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.25;
abstract contract  IComp {
    mapping (uint256 => string) public geneMap;
    function ownerOf(uint256 tokenId) external view virtual returns (address owner);
    uint256  public tokenId;
}
abstract contract IERC20{
    function transferFrom(address sender, address recipient, uint256 amount) external virtual returns (bool);
    function transfer(address recipient, uint256 amount) external virtual returns (bool);
    function balanceOf(address account) external view  virtual returns (uint256);
}
contract CompStaking {

    struct PoolInfo{
        uint32 startRedeemTokenId; // 2000
        address poolTokenContract; //
        uint32  initStakingRatio; //10
        uint32  onceCompReward; //20
        address initOwner;
        uint32 totalPower;
    }

    uint32 private _syncTokenId=0;

    mapping (address => mapping(uint32=>uint256) ) public compStakingMap;
    mapping (address => PoolInfo ) public pools;

    uint8[][] public standTemplates=
    [
    [5,9,10,10,1,7,3,0,0],
    [5,9,10,3,10,1,0,0,0],
    [5,9,10,3,10,1,0,0,0],
    [5,8,5,10,3,4,1,0,0],
    [5,9,10,3,1,0,0,0,0],
    [5,9,3,10,1,4,0,0,0],
    [5,9,10,10,1,0,0,0,0],
    [5,8,5,10,1,3,0,0,0],
    [5,9,3,10,2,1,0,0,0],
    [5,9,3,10,5,1,0,0,0],
    [5,9,10,3,10,1,2,0,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,3,10,1,10,0,0,0],
    [5,9,10,10,1,10,10,5,0],
    [5,9,10,10,4,2,1,3,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,3,10,7,1,0,0,0],
    [5,9,10,10,1,0,0,0,0],
    [5,9,10,10,6,1,0,0,0],
    [5,9,10,3,9,1,0,0,0],
    [5,9,10,10,1,3,7,0,0],
    [5,9,10,3,1,0,0,0,0],
    [5,9,10,3,1,4,0,0,0],
    [5,9,10,1,10,3,7,5,0],
    [5,9,3,10,10,1,0,0,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,10,4,3,10,9,1,0],
    [5,9,1,3,0,0,0,0,0],
    [5,9,10,3,5,1,0,0,0],
    [5,9,2,3,10,1,0,0,0],
    [5,9,10,3,1,0,0,0,0],
    [5,9,1,2,7,3,0,0,0],
    [5,9,10,1,10,3,0,0,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,10,3,4,1,0,0,0],
    [5,9,10,10,3,4,1,10,0],
    [5,9,3,10,1,0,0,0,0],
    [5,9,10,10,10,1,3,0,0],
    [5,9,10,7,1,10,0,0,0],
    [5,9,10,1,10,10,0,0,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,10,1,0,0,0,0,0],
    [5,9,10,10,3,4,1,0,0],
    [5,9,10,10,10,3,1,0,0],
    [5,9,10,1,0,0,0,0,0],
    [5,9,10,1,7,3,0,0,0],
    [5,9,3,10,7,1,0,0,0],
    [5,9,1,3,7,0,0,0,0],
    [5,9,4,3,1,6,0,0,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,10,1,3,10,7,0,0],
    [5,9,2,1,3,7,0,0,0],
    [5,9,10,7,10,1,3,0,0],
    [5,8,10,10,1,10,0,0,0],
    [5,9,10,10,7,3,1,2,0],
    [5,9,10,7,1,3,10,0,0],
    [5,9,10,1,10,3,7,10,0],
    [5,9,1,10,10,2,10,0,0],
    [5,9,10,10,1,0,0,0,0],
    [5,9,10,10,3,5,1,0,0],
    [5,9,10,10,1,10,10,10,0],
    [5,9,10,10,3,1,10,0,0],
    [5,9,10,1,10,6,0,0,0],
    [5,9,2,10,10,1,3,0,0],
    [5,9,10,10,1,0,0,0,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,10,10,3,2,1,0,0],
    [5,9,10,10,1,0,0,0,0],
    [1,9,10,10,1,0,0,0,0],
    [5,9,10,2,4,3,1,10,0],
    [5,9,10,1,3,7,0,0,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,10,10,2,1,3,4,0],
    [5,9,10,10,3,10,1,0,0],
    [5,9,10,10,10,3,1,0,0],
    [5,9,10,1,10,0,0,0,0],
    [5,9,10,10,1,10,3,0,0],
    [5,9,10,10,10,3,1,4,0],
    [5,9,10,3,1,0,0,0,0],
    [5,9,10,1,3,10,0,0,0],
    [5,9,10,3,10,10,1,0,0],
    [5,9,10,10,3,1,4,10,10],
    [5,9,10,10,4,10,10,1,0],
    [5,9,4,10,3,10,1,2,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,10,1,3,0,0,0,0],
    [5,9,7,1,5,10,3,0,0],
    [5,9,10,10,3,4,1,0,0],
    [5,9,4,10,3,1,10,0,0],
    [5,9,10,1,3,10,0,0,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,10,4,10,1,3,0,0],
    [5,9,10,10,3,1,0,0,0],
    [5,9,10,3,1,5,9,0,0],
    [1,9,10,1,3,9,0,0,0],
    [5,9,10,2,10,3,10,1,0],
    [5,9,10,3,4,1,10,0,0],
    [5,9,1,10,10,3,0,0,0],
    [5,9,3,10,1,10,0,0,0],
    [5,9,10,10,7,1,3,0,0]
    ];

    address  public compContract= address(0xABa31c041E916e4141036F080B554D40Cdb2BCD0);
    event Staking(address indexed from,uint32 power,uint256 amount);
    event Redeem(address indexed to,uint32 compId,uint32 power,uint256 amount);


    /**
   *
   * compPower
   *
   * Requirements
   * - `tokenId`  tokenId
   */
    function compPower(uint32 tokenId) public view returns(uint8){
        //fetch gene from contract
        IComp comp = IComp(compContract);
        string memory gene = comp.geneMap(tokenId);

        require(bytes(gene).length > 0,'token is not exist');

        uint8 power = 0;

        uint8[] memory geneIntArray = _geneToIntArray(gene);

        for(uint8 i= 1;i<geneIntArray.length; i++){
            if(geneIntArray[i]==99){ //stop flag
                //sex
                uint8 sexNum = geneIntArray[i-1];
                if(sexNum == 0){
                    power=power+5;
                }else if(sexNum==3){
                    power=power+1;
                }else{
                    power=power+3;
                }
                break;
            }
            //not sex gene and not match add 10 power
            else if((geneIntArray[i+1] != 99)  && (geneIntArray[i] != standTemplates[geneIntArray[0]][i-1] )){
                power=power+1;
            }
        }

        return power*10;

    }
    /**
   *
   * geneToIntArray
   *
   * Requirements
   * - `geneStr`  geneStr
   */
    function _geneToIntArray(string memory geneStr) private pure  returns(uint8[] memory){

        uint8[] memory geneIntArray = new uint8[](12);
        bytes memory genebytes = bytes (geneStr);
        uint8 tempValue = 0;
        uint length=0;
        for(uint256 i=0;i<genebytes.length;i++){
            uint8 c = uint8(genebytes[i]);
            //is number: 0-9
            if(c >= 48 && c <= 57){
                tempValue = tempValue*10 + (c - 48);
            }else{
                geneIntArray[length] = tempValue;
                tempValue = 0;
                length++;
            }
        }
        geneIntArray[length]=tempValue;

        geneIntArray[length+1] = 99; //stop flag
        return geneIntArray;

    }
    /**
   *
   * staking params
   *
   * Requirements
   * - `compIdList`  compIdList
   * - `poolTokenContract`
   */
    function currentStakingParams(uint32[] memory compIdList,address poolTokenContract) public view returns( uint32, uint256) {

        uint32 totalPower =0;
        for(uint8 i=0;i<compIdList.length;i++){
            totalPower += compPower(compIdList[i]);
        }
        return (totalPower,_currentStakingAmount(totalPower,poolTokenContract));
    }

    /**
   *
   * currentStakingAmount
   *
   * Requirements
   * - `power`  tokenId list
   * - `poolTokenContract`
   */
    function _currentStakingAmount(uint32 power,address poolTokenContract) private view returns( uint256) {
        PoolInfo memory pool = pools[poolTokenContract];
        require(pool.initOwner != address(0), "pool is not exist");

        uint availableBouns = poolAvailableBouns(poolTokenContract);

        return  pool.totalPower>0? (availableBouns * power / pool.totalPower) : (power*pool.initStakingRatio * 10**uint256(18));
    }

    function poolAvailableBouns(address poolTokenContract) public view returns(uint256){
        PoolInfo memory pool = pools[poolTokenContract];
        require(pool.initOwner != address(0), "pool is not exist");

        IComp comp = IComp(compContract);
        IERC20 poolBalance = IERC20(poolTokenContract);

        uint256 totalPower = pool.totalPower;
        uint256 maxTokenId = comp.tokenId();
        uint256 totalBouns = poolBalance.balanceOf(address(this));

        if(maxTokenId> pool.startRedeemTokenId && totalPower>0){ //start
            if(block.number<13600000){ //stop time
                totalBouns -= (10000-(maxTokenId-1)) * pool.onceCompReward * 10**uint256(18);
            }
        }else{
            totalBouns =  totalPower*pool.initStakingRatio * 10**uint256(18);
        }

        return totalBouns;
    }

    /**
  *
  * staking
  *
  * Requirements
  * - `compIdList`  tokenId list
  * - `poolTokenContract`
  */

    function staking(uint32[] memory compIdList , address poolTokenContract) public returns (bool){

        PoolInfo storage poolInfo = pools[poolTokenContract];
        require(poolInfo.initOwner != address(0), "pool is not exist");
        require(compIdList.length > 0 , "at least one comp");


        uint32 stakingPower = 0;
        for(uint8 i=0;i<compIdList.length;i++){

            IComp comp = IComp(compContract);
            address owner =  comp.ownerOf(compIdList[i]);

            require(owner==msg.sender, "must be owner of token");
            require(compStakingMap[poolTokenContract][compIdList[i]]==0,"already staking ");

            uint32 power = compPower(compIdList[i]);

            compStakingMap[poolTokenContract][compIdList[i]] = power;
            stakingPower += power;
        }
        uint256 stakingAmount = _currentStakingAmount(stakingPower,poolTokenContract);
        emit Staking(msg.sender,stakingPower,stakingAmount);

        IERC20 erc20 = IERC20(poolTokenContract);
        erc20.transferFrom(msg.sender,address(this), stakingAmount);
        poolInfo.totalPower +=  stakingPower;

        return true;
    }
    /**
  *
  * redeem staking
  *
  * Requirements
  * - `compId`  redeem compId
  * - `poolTokenContract`
  */
    function redeem(uint32 compId, address poolTokenContract)public returns (bool){

        PoolInfo storage poolInfo = pools[poolTokenContract];
        require(poolInfo.initOwner != address(0), "pool is not exist");

        IComp comp = IComp(compContract);
        address owner =  comp.ownerOf(compId);
        require(owner==msg.sender, "must be owner of token");
        require(compStakingMap[poolTokenContract][compId] !=0 , "not staking");

        uint32 power= compPower(compId);
        require(poolInfo.totalPower>=power, "power error");

        uint256  amount = _currentStakingAmount(power,poolTokenContract);

        poolInfo.totalPower -= power;

        IERC20 erc20 = IERC20(poolTokenContract);

        uint256 redeemAmount = poolInfo.totalPower > 0 ? (amount * 99 / 100): amount;
        erc20.transfer(msg.sender, redeemAmount);  //1% fee
        compStakingMap[poolTokenContract][compId] = 0;


        emit Redeem(msg.sender, compId,power,redeemAmount);

        return true;

    }

    /**
  *
  * add new pool
  *
  * Requirements
  * - `startRedeemTokenId`
  * - `poolTokenContract`
  * - `initStakingRatio`
  * - `onceCompReward`
  */
    function createPool(uint32 startRedeemTokenId,address poolTokenContract, uint32 initStakingRatio,uint32 onceCompReward) public returns (bool){

        PoolInfo storage poolInfo = pools[poolTokenContract];
        require(poolInfo.initOwner == address(0), "staking has started");

        IERC20 erc20 = IERC20(poolTokenContract);
        erc20.transferFrom(msg.sender,address(this), onceCompReward * 10000 * 10**uint256(18));

        poolInfo.startRedeemTokenId = startRedeemTokenId;
        poolInfo.poolTokenContract = poolTokenContract;
        poolInfo.initStakingRatio = initStakingRatio;
        poolInfo.onceCompReward = onceCompReward;
        poolInfo.initOwner = msg.sender;
        return true;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint32","name":"compId","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"power","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint32","name":"power","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staking","type":"event"},{"inputs":[],"name":"compContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenId","type":"uint32"}],"name":"compPower","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"compStakingMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"startRedeemTokenId","type":"uint32"},{"internalType":"address","name":"poolTokenContract","type":"address"},{"internalType":"uint32","name":"initStakingRatio","type":"uint32"},{"internalType":"uint32","name":"onceCompReward","type":"uint32"}],"name":"createPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"compIdList","type":"uint32[]"},{"internalType":"address","name":"poolTokenContract","type":"address"}],"name":"currentStakingParams","outputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolTokenContract","type":"address"}],"name":"poolAvailableBouns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pools","outputs":[{"internalType":"uint32","name":"startRedeemTokenId","type":"uint32"},{"internalType":"address","name":"poolTokenContract","type":"address"},{"internalType":"uint32","name":"initStakingRatio","type":"uint32"},{"internalType":"uint32","name":"onceCompReward","type":"uint32"},{"internalType":"address","name":"initOwner","type":"address"},{"internalType":"uint32","name":"totalPower","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"compId","type":"uint32"},{"internalType":"address","name":"poolTokenContract","type":"address"}],"name":"redeem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"compIdList","type":"uint32[]"},{"internalType":"address","name":"poolTokenContract","type":"address"}],"name":"staking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"standTemplates","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405260008060006101000a81548163ffffffff021916908363ffffffff16021790555060405180610c800160405280604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600760ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600860ff168152602001600560ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600460ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600860ff168152602001600560ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600260ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600560ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600260ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600a60ff168152602001600560ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600460ff168152602001600260ff168152602001600160ff168152602001600360ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600760ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600660ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600960ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600760ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600460ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600360ff168152602001600760ff168152602001600560ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600460ff168152602001600360ff168152602001600a60ff168152602001600960ff168152602001600160ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600560ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600260ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600160ff168152602001600260ff168152602001600760ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600a60ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600760ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600760ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600760ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600160ff168152602001600360ff168152602001600760ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600460ff168152602001600360ff168152602001600160ff168152602001600660ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600a60ff168152602001600760ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600260ff168152602001600160ff168152602001600360ff168152602001600760ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600760ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600860ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600760ff168152602001600360ff168152602001600160ff168152602001600260ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600760ff168152602001600160ff168152602001600360ff168152602001600a60ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600360ff168152602001600760ff168152602001600a60ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600160ff168152602001600a60ff168152602001600a60ff168152602001600260ff168152602001600a60ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600560ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600a60ff168152602001600a60ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600660ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600260ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600260ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600160ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600260ff168152602001600460ff168152602001600360ff168152602001600160ff168152602001600a60ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600760ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600260ff168152602001600160ff168152602001600360ff168152602001600460ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600460ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600460ff168152602001600a60ff168152602001600a60ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600460ff168152602001600a60ff168152602001600a60ff168152602001600160ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600460ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600260ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600760ff168152602001600160ff168152602001600560ff168152602001600a60ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600460ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600460ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600160ff168152602001600560ff168152602001600960ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600160ff168152602001600960ff168152602001600a60ff168152602001600160ff168152602001600360ff168152602001600960ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600260ff168152602001600a60ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600160ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600360ff168152602001600a60ff168152602001600160ff168152602001600a60ff168152602001600060ff168152602001600060ff168152602001600060ff168152508152602001604051806101200160405280600560ff168152602001600960ff168152602001600a60ff168152602001600a60ff168152602001600760ff168152602001600160ff168152602001600360ff168152602001600060ff168152602001600060ff16815250815250600390606462002945929190620029af565b5073aba31c041e916e4141036f080b554d40cdb2bcd0600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620029a857600080fd5b5062002b30565b828054828255906000526020600020908101928215620029fe579160200282015b82811115620029fd57825182906009620029ec92919062002a11565b5091602001919060010190620029d0565b5b50905062002a0d919062002abf565b5090565b82805482825590600052602060002090601f0160209004810192821562002aac5791602002820160005b8382111562002a7b57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262002a3b565b801562002aaa5782816101000a81549060ff021916905560010160208160000104928301926001030262002a7b565b505b50905062002abb919062002ae7565b5090565b5b8082111562002ae3576000818162002ad9919062002b06565b5060010162002ac0565b5090565b5b8082111562002b0257600081600090555060010162002ae8565b5090565b50805460008255601f01602090049060005260206000209081019062002b2d919062002ae7565b50565b612cf88062002b406000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063cc1c17c711610066578063cc1c17c714610199578063d07ad165146101c9578063d329c558146101f9578063d60efe7d14610217578063fb76c71e146102475761009e565b80633cf698cf146100a357806367ba28bd146100d3578063a4063dbc14610103578063bec9392214610138578063cafadbc414610169575b600080fd5b6100bd60048036038101906100b89190611f84565b610277565b6040516100ca9190612457565b60405180910390f35b6100ed60048036038101906100e89190611dab565b610561565b6040516100fa9190612360565b60405180910390f35b61011d60048036038101906101189190611dab565b610974565b60405161012f96959493929190612396565b60405180910390f35b610152600480360381019061014d9190611e45565b610a30565b6040516101609291906123f7565b60405180910390f35b610183600480360381019061017e9190611ff1565b610aa4565b6040516101909190612245565b60405180910390f35b6101b360048036038101906101ae9190611e05565b610d38565b6040516101c09190612360565b60405180910390f35b6101e360048036038101906101de9190611e45565b610d5d565b6040516101f09190612245565b60405180910390f35b61020161129c565b60405161020e91906121ca565b60405180910390f35b610231600480360381019061022c9190611f44565b6112c2565b60405161023e9190612457565b60405180910390f35b610261600480360381019061025c9190611fb1565b611311565b60405161026e9190612245565b60405180910390f35b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663753a509b856040518263ffffffff1660e01b81526004016102da919061237b565b60006040518083038186803b1580156102f257600080fd5b505afa158015610306573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032f9190611ece565b90506000815111610375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036c90612260565b60405180910390fd5b6000806103818361180a565b90506000600190505b81518160ff161015610548576063828260ff16815181106103ae576103ad612a89565b5b602002602001015160ff161415610444576000826001836103cf91906128a9565b60ff16815181106103e3576103e2612a89565b5b6020026020010151905060008160ff16141561040d576005846104069190612595565b935061043e565b60038160ff16141561042d576001846104269190612595565b935061043d565b60038461043a9190612595565b93505b5b50610548565b6063826001836104549190612595565b60ff168151811061046857610467612a89565b5b602002602001015160ff1614158015610520575060038260008151811061049257610491612a89565b5b602002602001015160ff16815481106104ae576104ad612a89565b5b906000526020600020016001826104c591906128a9565b60ff16815481106104d9576104d8612a89565b5b90600052602060002090602091828204019190069054906101000a900460ff1660ff16828260ff168151811061051257610511612a89565b5b602002602001015160ff1614155b15610535576001836105329190612595565b92505b808061054090612a01565b91505061038a565b50600a826105569190612806565b945050505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161415610768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075f906122c0565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600084905060008360a0015163ffffffff16905060008373ffffffffffffffffffffffffffffffffffffffff166317d70f7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107eb57600080fd5b505afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190611f17565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086091906121ca565b60206040518083038186803b15801561087857600080fd5b505afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611f17565b9050856000015163ffffffff16821180156108cb5750600083115b156109355762cf8500431015610930576012600a6108e99190612650565b866060015163ffffffff166001846109019190612841565b61271061090e9190612841565b610918919061276e565b610922919061276e565b8161092d9190612841565b90505b610966565b6012600a6109439190612650565b866040015163ffffffff1684610959919061276e565b610963919061276e565b90505b809650505050505050919050565b60026020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff169080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900463ffffffff16905086565b6000806000805b85518160ff161015610a8c57610a69868260ff1681518110610a5c57610a5b612a89565b5b6020026020010151610277565b60ff1682610a77919061255b565b91508080610a8490612a01565b915050610a37565b5080610a988286611994565b92509250509250929050565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b72906122a0565b60405180910390fd5b60008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306012600a610bac9190612650565b61271089610bba91906127c8565b63ffffffff16610bca919061276e565b6040518463ffffffff1660e01b8152600401610be8939291906121e5565b602060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611ea1565b50868260000160006101000a81548163ffffffff021916908363ffffffff160217905550858260000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848260000160186101000a81548163ffffffff021916908363ffffffff1602179055508382600001601c6101000a81548163ffffffff021916908363ffffffff160217905550338260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600192505050949350505050565b6001602052816000526040600020602052806000526040600020600091509150505481565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906122c0565b60405180910390fd5b6000845111610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612320565b60405180910390fd5b6000805b85518160ff161015611159576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e898560ff1681518110610ee457610ee3612a89565b5b60200260200101516040518263ffffffff1660e01b8152600401610f08919061237b565b60206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190611dd8565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90612300565b60405180910390fd5b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a8660ff168151811061102157611020612a89565b5b602002602001015163ffffffff1663ffffffff1681526020019081526020016000205414611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612340565b60405180910390fd5b60006110ac898560ff168151811061109f5761109e612a89565b5b6020026020010151610277565b60ff1690508063ffffffff16600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b8760ff168151811061110f5761110e612a89565b5b602002602001015163ffffffff1663ffffffff168152602001908152602001600020819055508085611141919061255b565b9450505050808061115190612a01565b915050610e7d565b5060006111668286611994565b90503373ffffffffffffffffffffffffffffffffffffffff167f1ac00418eb496e6386d33a660690ef39c6552b643171d85d264772e09000e79683836040516111b09291906123f7565b60405180910390a260008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016111fa939291906121e5565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611ea1565b50828460010160148282829054906101000a900463ffffffff16611270919061255b565b92506101000a81548163ffffffff021916908363ffffffff160217905550600194505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600382815481106112d257600080fd5b9060005260206000200181815481106112ea57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906122c0565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b815260040161144b919061237b565b60206040518083038186803b15801561146357600080fd5b505afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190611dd8565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290612300565b60405180910390fd5b6000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008863ffffffff1663ffffffff1681526020019081526020016000205414156115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a2906122e0565b60405180910390fd5b60006115b687610277565b60ff1690508063ffffffff168460010160149054906101000a900463ffffffff1663ffffffff16101561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590612280565b60405180910390fd5b600061162a8288611994565b9050818560010160148282829054906101000a900463ffffffff1661164f9190612875565b92506101000a81548163ffffffff021916908363ffffffff16021790555060008790506000808760010160149054906101000a900463ffffffff1663ffffffff161161169b57826116b5565b60646063846116aa919061276e565b6116b491906125cc565b5b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116f292919061221c565b602060405180830381600087803b15801561170c57600080fd5b505af1158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190611ea1565b506000600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167ff8738d3d3a041b62e600e28a897953c4737d9de7d218adfff1df07e3202c3ff28b86846040516117f193929190612420565b60405180910390a2600197505050505050505092915050565b60606000600c67ffffffffffffffff81111561182957611828612ab8565b5b6040519080825280602002602001820160405280156118575781602001602082028036833780820191505090505b509050600083905060008060005b835181101561192a57600084828151811061188357611882612a89565b5b602001015160f81c60f81b60f81c905060308160ff16101580156118ab575060398160ff1611155b156118db576030816118bd91906128a9565b600a856118ca9190612806565b6118d49190612595565b9350611916565b838684815181106118ef576118ee612a89565b5b602002602001019060ff16908160ff1681525050600093508280611912906129b8565b9350505b508080611922906129b8565b915050611865565b508184828151811061193f5761193e612a89565b5b602002602001019060ff16908160ff16815250506063846001836119639190612505565b8151811061197457611973612a89565b5b602002602001019060ff16908160ff168152505083945050505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906122c0565b60405180910390fd5b6000611ba684610561565b905060008260a0015163ffffffff1611611bed576012600a611bc89190612650565b826040015186611bd891906127c8565b63ffffffff16611be8919061276e565b611c15565b8160a0015163ffffffff168563ffffffff1682611c0a919061276e565b611c1491906125cc565b5b9250505092915050565b6000611c32611c2d84612497565b612472565b90508083825260208201905082856020860282011115611c5557611c54612aec565b5b60005b85811015611c855781611c6b8882611d96565b845260208401935060208301925050600181019050611c58565b5050509392505050565b6000611ca2611c9d846124c3565b612472565b905082815260208101848484011115611cbe57611cbd612af1565b5b611cc9848285612954565b509392505050565b600081359050611ce081612c66565b92915050565b600081519050611cf581612c66565b92915050565b600082601f830112611d1057611d0f612ae7565b5b8135611d20848260208601611c1f565b91505092915050565b600081519050611d3881612c7d565b92915050565b600082601f830112611d5357611d52612ae7565b5b8151611d63848260208601611c8f565b91505092915050565b600081359050611d7b81612c94565b92915050565b600081519050611d9081612c94565b92915050565b600081359050611da581612cab565b92915050565b600060208284031215611dc157611dc0612afb565b5b6000611dcf84828501611cd1565b91505092915050565b600060208284031215611dee57611ded612afb565b5b6000611dfc84828501611ce6565b91505092915050565b60008060408385031215611e1c57611e1b612afb565b5b6000611e2a85828601611cd1565b9250506020611e3b85828601611d96565b9150509250929050565b60008060408385031215611e5c57611e5b612afb565b5b600083013567ffffffffffffffff811115611e7a57611e79612af6565b5b611e8685828601611cfb565b9250506020611e9785828601611cd1565b9150509250929050565b600060208284031215611eb757611eb6612afb565b5b6000611ec584828501611d29565b91505092915050565b600060208284031215611ee457611ee3612afb565b5b600082015167ffffffffffffffff811115611f0257611f01612af6565b5b611f0e84828501611d3e565b91505092915050565b600060208284031215611f2d57611f2c612afb565b5b6000611f3b84828501611d81565b91505092915050565b60008060408385031215611f5b57611f5a612afb565b5b6000611f6985828601611d6c565b9250506020611f7a85828601611d6c565b9150509250929050565b600060208284031215611f9a57611f99612afb565b5b6000611fa884828501611d96565b91505092915050565b60008060408385031215611fc857611fc7612afb565b5b6000611fd685828601611d96565b9250506020611fe785828601611cd1565b9150509250929050565b6000806000806080858703121561200b5761200a612afb565b5b600061201987828801611d96565b945050602061202a87828801611cd1565b935050604061203b87828801611d96565b925050606061204c87828801611d96565b91505092959194509250565b612061816128dd565b82525050565b612070816128ef565b82525050565b60006120836012836124f4565b915061208e82612b1e565b602082019050919050565b60006120a6600b836124f4565b91506120b182612b47565b602082019050919050565b60006120c96013836124f4565b91506120d482612b70565b602082019050919050565b60006120ec6011836124f4565b91506120f782612b99565b602082019050919050565b600061210f600b836124f4565b915061211a82612bc2565b602082019050919050565b60006121326016836124f4565b915061213d82612beb565b602082019050919050565b60006121556011836124f4565b915061216082612c14565b602082019050919050565b60006121786010836124f4565b915061218382612c3d565b602082019050919050565b6121978161291b565b82525050565b6121a681612942565b82525050565b6121b581612925565b82525050565b6121c481612935565b82525050565b60006020820190506121df6000830184612058565b92915050565b60006060820190506121fa6000830186612058565b6122076020830185612058565b612214604083018461218e565b949350505050565b60006040820190506122316000830185612058565b61223e602083018461218e565b9392505050565b600060208201905061225a6000830184612067565b92915050565b6000602082019050818103600083015261227981612076565b9050919050565b6000602082019050818103600083015261229981612099565b9050919050565b600060208201905081810360008301526122b9816120bc565b9050919050565b600060208201905081810360008301526122d9816120df565b9050919050565b600060208201905081810360008301526122f981612102565b9050919050565b6000602082019050818103600083015261231981612125565b9050919050565b6000602082019050818103600083015261233981612148565b9050919050565b600060208201905081810360008301526123598161216b565b9050919050565b6000602082019050612375600083018461218e565b92915050565b6000602082019050612390600083018461219d565b92915050565b600060c0820190506123ab60008301896121ac565b6123b86020830188612058565b6123c560408301876121ac565b6123d260608301866121ac565b6123df6080830185612058565b6123ec60a08301846121ac565b979650505050505050565b600060408201905061240c60008301856121ac565b612419602083018461218e565b9392505050565b600060608201905061243560008301866121ac565b61244260208301856121ac565b61244f604083018461218e565b949350505050565b600060208201905061246c60008301846121bb565b92915050565b600061247c61248d565b90506124888282612987565b919050565b6000604051905090565b600067ffffffffffffffff8211156124b2576124b1612ab8565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156124de576124dd612ab8565b5b6124e782612b00565b9050602081019050919050565b600082825260208201905092915050565b60006125108261291b565b915061251b8361291b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125505761254f612a2b565b5b828201905092915050565b600061256682612925565b915061257183612925565b92508263ffffffff0382111561258a57612589612a2b565b5b828201905092915050565b60006125a082612935565b91506125ab83612935565b92508260ff038211156125c1576125c0612a2b565b5b828201905092915050565b60006125d78261291b565b91506125e28361291b565b9250826125f2576125f1612a5a565b5b828204905092915050565b6000808291508390505b60018511156126475780860481111561262357612622612a2b565b5b60018516156126325780820291505b808102905061264085612b11565b9450612607565b94509492505050565b600061265b8261291b565b91506126668361291b565b92506126937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461269b565b905092915050565b6000826126ab5760019050612767565b816126b95760009050612767565b81600181146126cf57600281146126d957612708565b6001915050612767565b60ff8411156126eb576126ea612a2b565b5b8360020a91508482111561270257612701612a2b565b5b50612767565b5060208310610133831016604e8410600b841016171561273d5782820a90508381111561273857612737612a2b565b5b612767565b61274a84848460016125fd565b9250905081840481111561276157612760612a2b565b5b81810290505b9392505050565b60006127798261291b565b91506127848361291b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127bd576127bc612a2b565b5b828202905092915050565b60006127d382612925565b91506127de83612925565b92508163ffffffff04831182151516156127fb576127fa612a2b565b5b828202905092915050565b600061281182612935565b915061281c83612935565b92508160ff048311821515161561283657612835612a2b565b5b828202905092915050565b600061284c8261291b565b91506128578361291b565b92508282101561286a57612869612a2b565b5b828203905092915050565b600061288082612925565b915061288b83612925565b92508282101561289e5761289d612a2b565b5b828203905092915050565b60006128b482612935565b91506128bf83612935565b9250828210156128d2576128d1612a2b565b5b828203905092915050565b60006128e8826128fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b600061294d82612925565b9050919050565b60005b83811015612972578082015181840152602081019050612957565b83811115612981576000848401525b50505050565b61299082612b00565b810181811067ffffffffffffffff821117156129af576129ae612ab8565b5b80604052505050565b60006129c38261291b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129f6576129f5612a2b565b5b600182019050919050565b6000612a0c82612935565b915060ff821415612a2057612a1f612a2b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f746f6b656e206973206e6f742065786973740000000000000000000000000000600082015250565b7f706f776572206572726f72000000000000000000000000000000000000000000600082015250565b7f7374616b696e6720686173207374617274656400000000000000000000000000600082015250565b7f706f6f6c206973206e6f74206578697374000000000000000000000000000000600082015250565b7f6e6f74207374616b696e67000000000000000000000000000000000000000000600082015250565b7f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000600082015250565b7f6174206c65617374206f6e6520636f6d70000000000000000000000000000000600082015250565b7f616c7265616479207374616b696e672000000000000000000000000000000000600082015250565b612c6f816128dd565b8114612c7a57600080fd5b50565b612c86816128ef565b8114612c9157600080fd5b50565b612c9d8161291b565b8114612ca857600080fd5b50565b612cb481612925565b8114612cbf57600080fd5b5056fea2646970667358221220da2244b7d25d9c0c335359a191ae8a8287e61535a826289c600fad6db243159e64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063cc1c17c711610066578063cc1c17c714610199578063d07ad165146101c9578063d329c558146101f9578063d60efe7d14610217578063fb76c71e146102475761009e565b80633cf698cf146100a357806367ba28bd146100d3578063a4063dbc14610103578063bec9392214610138578063cafadbc414610169575b600080fd5b6100bd60048036038101906100b89190611f84565b610277565b6040516100ca9190612457565b60405180910390f35b6100ed60048036038101906100e89190611dab565b610561565b6040516100fa9190612360565b60405180910390f35b61011d60048036038101906101189190611dab565b610974565b60405161012f96959493929190612396565b60405180910390f35b610152600480360381019061014d9190611e45565b610a30565b6040516101609291906123f7565b60405180910390f35b610183600480360381019061017e9190611ff1565b610aa4565b6040516101909190612245565b60405180910390f35b6101b360048036038101906101ae9190611e05565b610d38565b6040516101c09190612360565b60405180910390f35b6101e360048036038101906101de9190611e45565b610d5d565b6040516101f09190612245565b60405180910390f35b61020161129c565b60405161020e91906121ca565b60405180910390f35b610231600480360381019061022c9190611f44565b6112c2565b60405161023e9190612457565b60405180910390f35b610261600480360381019061025c9190611fb1565b611311565b60405161026e9190612245565b60405180910390f35b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663753a509b856040518263ffffffff1660e01b81526004016102da919061237b565b60006040518083038186803b1580156102f257600080fd5b505afa158015610306573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032f9190611ece565b90506000815111610375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036c90612260565b60405180910390fd5b6000806103818361180a565b90506000600190505b81518160ff161015610548576063828260ff16815181106103ae576103ad612a89565b5b602002602001015160ff161415610444576000826001836103cf91906128a9565b60ff16815181106103e3576103e2612a89565b5b6020026020010151905060008160ff16141561040d576005846104069190612595565b935061043e565b60038160ff16141561042d576001846104269190612595565b935061043d565b60038461043a9190612595565b93505b5b50610548565b6063826001836104549190612595565b60ff168151811061046857610467612a89565b5b602002602001015160ff1614158015610520575060038260008151811061049257610491612a89565b5b602002602001015160ff16815481106104ae576104ad612a89565b5b906000526020600020016001826104c591906128a9565b60ff16815481106104d9576104d8612a89565b5b90600052602060002090602091828204019190069054906101000a900460ff1660ff16828260ff168151811061051257610511612a89565b5b602002602001015160ff1614155b15610535576001836105329190612595565b92505b808061054090612a01565b91505061038a565b50600a826105569190612806565b945050505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161415610768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075f906122c0565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600084905060008360a0015163ffffffff16905060008373ffffffffffffffffffffffffffffffffffffffff166317d70f7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107eb57600080fd5b505afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190611f17565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086091906121ca565b60206040518083038186803b15801561087857600080fd5b505afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190611f17565b9050856000015163ffffffff16821180156108cb5750600083115b156109355762cf8500431015610930576012600a6108e99190612650565b866060015163ffffffff166001846109019190612841565b61271061090e9190612841565b610918919061276e565b610922919061276e565b8161092d9190612841565b90505b610966565b6012600a6109439190612650565b866040015163ffffffff1684610959919061276e565b610963919061276e565b90505b809650505050505050919050565b60026020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff169080600001601c9054906101000a900463ffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900463ffffffff16905086565b6000806000805b85518160ff161015610a8c57610a69868260ff1681518110610a5c57610a5b612a89565b5b6020026020010151610277565b60ff1682610a77919061255b565b91508080610a8490612a01565b915050610a37565b5080610a988286611994565b92509250509250929050565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b72906122a0565b60405180910390fd5b60008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306012600a610bac9190612650565b61271089610bba91906127c8565b63ffffffff16610bca919061276e565b6040518463ffffffff1660e01b8152600401610be8939291906121e5565b602060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611ea1565b50868260000160006101000a81548163ffffffff021916908363ffffffff160217905550858260000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848260000160186101000a81548163ffffffff021916908363ffffffff1602179055508382600001601c6101000a81548163ffffffff021916908363ffffffff160217905550338260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600192505050949350505050565b6001602052816000526040600020602052806000526040600020600091509150505481565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906122c0565b60405180910390fd5b6000845111610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612320565b60405180910390fd5b6000805b85518160ff161015611159576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e898560ff1681518110610ee457610ee3612a89565b5b60200260200101516040518263ffffffff1660e01b8152600401610f08919061237b565b60206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190611dd8565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90612300565b60405180910390fd5b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a8660ff168151811061102157611020612a89565b5b602002602001015163ffffffff1663ffffffff1681526020019081526020016000205414611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b90612340565b60405180910390fd5b60006110ac898560ff168151811061109f5761109e612a89565b5b6020026020010151610277565b60ff1690508063ffffffff16600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b8760ff168151811061110f5761110e612a89565b5b602002602001015163ffffffff1663ffffffff168152602001908152602001600020819055508085611141919061255b565b9450505050808061115190612a01565b915050610e7d565b5060006111668286611994565b90503373ffffffffffffffffffffffffffffffffffffffff167f1ac00418eb496e6386d33a660690ef39c6552b643171d85d264772e09000e79683836040516111b09291906123f7565b60405180910390a260008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016111fa939291906121e5565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611ea1565b50828460010160148282829054906101000a900463ffffffff16611270919061255b565b92506101000a81548163ffffffff021916908363ffffffff160217905550600194505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600382815481106112d257600080fd5b9060005260206000200181815481106112ea57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906122c0565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b815260040161144b919061237b565b60206040518083038186803b15801561146357600080fd5b505afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190611dd8565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290612300565b60405180910390fd5b6000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008863ffffffff1663ffffffff1681526020019081526020016000205414156115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a2906122e0565b60405180910390fd5b60006115b687610277565b60ff1690508063ffffffff168460010160149054906101000a900463ffffffff1663ffffffff16101561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590612280565b60405180910390fd5b600061162a8288611994565b9050818560010160148282829054906101000a900463ffffffff1661164f9190612875565b92506101000a81548163ffffffff021916908363ffffffff16021790555060008790506000808760010160149054906101000a900463ffffffff1663ffffffff161161169b57826116b5565b60646063846116aa919061276e565b6116b491906125cc565b5b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116f292919061221c565b602060405180830381600087803b15801561170c57600080fd5b505af1158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190611ea1565b506000600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167ff8738d3d3a041b62e600e28a897953c4737d9de7d218adfff1df07e3202c3ff28b86846040516117f193929190612420565b60405180910390a2600197505050505050505092915050565b60606000600c67ffffffffffffffff81111561182957611828612ab8565b5b6040519080825280602002602001820160405280156118575781602001602082028036833780820191505090505b509050600083905060008060005b835181101561192a57600084828151811061188357611882612a89565b5b602001015160f81c60f81b60f81c905060308160ff16101580156118ab575060398160ff1611155b156118db576030816118bd91906128a9565b600a856118ca9190612806565b6118d49190612595565b9350611916565b838684815181106118ef576118ee612a89565b5b602002602001019060ff16908160ff1681525050600093508280611912906129b8565b9350505b508080611922906129b8565b915050611865565b508184828151811061193f5761193e612a89565b5b602002602001019060ff16908160ff16815250506063846001836119639190612505565b8151811061197457611973612a89565b5b602002602001019060ff16908160ff168152505083945050505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906122c0565b60405180910390fd5b6000611ba684610561565b905060008260a0015163ffffffff1611611bed576012600a611bc89190612650565b826040015186611bd891906127c8565b63ffffffff16611be8919061276e565b611c15565b8160a0015163ffffffff168563ffffffff1682611c0a919061276e565b611c1491906125cc565b5b9250505092915050565b6000611c32611c2d84612497565b612472565b90508083825260208201905082856020860282011115611c5557611c54612aec565b5b60005b85811015611c855781611c6b8882611d96565b845260208401935060208301925050600181019050611c58565b5050509392505050565b6000611ca2611c9d846124c3565b612472565b905082815260208101848484011115611cbe57611cbd612af1565b5b611cc9848285612954565b509392505050565b600081359050611ce081612c66565b92915050565b600081519050611cf581612c66565b92915050565b600082601f830112611d1057611d0f612ae7565b5b8135611d20848260208601611c1f565b91505092915050565b600081519050611d3881612c7d565b92915050565b600082601f830112611d5357611d52612ae7565b5b8151611d63848260208601611c8f565b91505092915050565b600081359050611d7b81612c94565b92915050565b600081519050611d9081612c94565b92915050565b600081359050611da581612cab565b92915050565b600060208284031215611dc157611dc0612afb565b5b6000611dcf84828501611cd1565b91505092915050565b600060208284031215611dee57611ded612afb565b5b6000611dfc84828501611ce6565b91505092915050565b60008060408385031215611e1c57611e1b612afb565b5b6000611e2a85828601611cd1565b9250506020611e3b85828601611d96565b9150509250929050565b60008060408385031215611e5c57611e5b612afb565b5b600083013567ffffffffffffffff811115611e7a57611e79612af6565b5b611e8685828601611cfb565b9250506020611e9785828601611cd1565b9150509250929050565b600060208284031215611eb757611eb6612afb565b5b6000611ec584828501611d29565b91505092915050565b600060208284031215611ee457611ee3612afb565b5b600082015167ffffffffffffffff811115611f0257611f01612af6565b5b611f0e84828501611d3e565b91505092915050565b600060208284031215611f2d57611f2c612afb565b5b6000611f3b84828501611d81565b91505092915050565b60008060408385031215611f5b57611f5a612afb565b5b6000611f6985828601611d6c565b9250506020611f7a85828601611d6c565b9150509250929050565b600060208284031215611f9a57611f99612afb565b5b6000611fa884828501611d96565b91505092915050565b60008060408385031215611fc857611fc7612afb565b5b6000611fd685828601611d96565b9250506020611fe785828601611cd1565b9150509250929050565b6000806000806080858703121561200b5761200a612afb565b5b600061201987828801611d96565b945050602061202a87828801611cd1565b935050604061203b87828801611d96565b925050606061204c87828801611d96565b91505092959194509250565b612061816128dd565b82525050565b612070816128ef565b82525050565b60006120836012836124f4565b915061208e82612b1e565b602082019050919050565b60006120a6600b836124f4565b91506120b182612b47565b602082019050919050565b60006120c96013836124f4565b91506120d482612b70565b602082019050919050565b60006120ec6011836124f4565b91506120f782612b99565b602082019050919050565b600061210f600b836124f4565b915061211a82612bc2565b602082019050919050565b60006121326016836124f4565b915061213d82612beb565b602082019050919050565b60006121556011836124f4565b915061216082612c14565b602082019050919050565b60006121786010836124f4565b915061218382612c3d565b602082019050919050565b6121978161291b565b82525050565b6121a681612942565b82525050565b6121b581612925565b82525050565b6121c481612935565b82525050565b60006020820190506121df6000830184612058565b92915050565b60006060820190506121fa6000830186612058565b6122076020830185612058565b612214604083018461218e565b949350505050565b60006040820190506122316000830185612058565b61223e602083018461218e565b9392505050565b600060208201905061225a6000830184612067565b92915050565b6000602082019050818103600083015261227981612076565b9050919050565b6000602082019050818103600083015261229981612099565b9050919050565b600060208201905081810360008301526122b9816120bc565b9050919050565b600060208201905081810360008301526122d9816120df565b9050919050565b600060208201905081810360008301526122f981612102565b9050919050565b6000602082019050818103600083015261231981612125565b9050919050565b6000602082019050818103600083015261233981612148565b9050919050565b600060208201905081810360008301526123598161216b565b9050919050565b6000602082019050612375600083018461218e565b92915050565b6000602082019050612390600083018461219d565b92915050565b600060c0820190506123ab60008301896121ac565b6123b86020830188612058565b6123c560408301876121ac565b6123d260608301866121ac565b6123df6080830185612058565b6123ec60a08301846121ac565b979650505050505050565b600060408201905061240c60008301856121ac565b612419602083018461218e565b9392505050565b600060608201905061243560008301866121ac565b61244260208301856121ac565b61244f604083018461218e565b949350505050565b600060208201905061246c60008301846121bb565b92915050565b600061247c61248d565b90506124888282612987565b919050565b6000604051905090565b600067ffffffffffffffff8211156124b2576124b1612ab8565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156124de576124dd612ab8565b5b6124e782612b00565b9050602081019050919050565b600082825260208201905092915050565b60006125108261291b565b915061251b8361291b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125505761254f612a2b565b5b828201905092915050565b600061256682612925565b915061257183612925565b92508263ffffffff0382111561258a57612589612a2b565b5b828201905092915050565b60006125a082612935565b91506125ab83612935565b92508260ff038211156125c1576125c0612a2b565b5b828201905092915050565b60006125d78261291b565b91506125e28361291b565b9250826125f2576125f1612a5a565b5b828204905092915050565b6000808291508390505b60018511156126475780860481111561262357612622612a2b565b5b60018516156126325780820291505b808102905061264085612b11565b9450612607565b94509492505050565b600061265b8261291b565b91506126668361291b565b92506126937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461269b565b905092915050565b6000826126ab5760019050612767565b816126b95760009050612767565b81600181146126cf57600281146126d957612708565b6001915050612767565b60ff8411156126eb576126ea612a2b565b5b8360020a91508482111561270257612701612a2b565b5b50612767565b5060208310610133831016604e8410600b841016171561273d5782820a90508381111561273857612737612a2b565b5b612767565b61274a84848460016125fd565b9250905081840481111561276157612760612a2b565b5b81810290505b9392505050565b60006127798261291b565b91506127848361291b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127bd576127bc612a2b565b5b828202905092915050565b60006127d382612925565b91506127de83612925565b92508163ffffffff04831182151516156127fb576127fa612a2b565b5b828202905092915050565b600061281182612935565b915061281c83612935565b92508160ff048311821515161561283657612835612a2b565b5b828202905092915050565b600061284c8261291b565b91506128578361291b565b92508282101561286a57612869612a2b565b5b828203905092915050565b600061288082612925565b915061288b83612925565b92508282101561289e5761289d612a2b565b5b828203905092915050565b60006128b482612935565b91506128bf83612935565b9250828210156128d2576128d1612a2b565b5b828203905092915050565b60006128e8826128fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b600061294d82612925565b9050919050565b60005b83811015612972578082015181840152602081019050612957565b83811115612981576000848401525b50505050565b61299082612b00565b810181811067ffffffffffffffff821117156129af576129ae612ab8565b5b80604052505050565b60006129c38261291b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129f6576129f5612a2b565b5b600182019050919050565b6000612a0c82612935565b915060ff821415612a2057612a1f612a2b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f746f6b656e206973206e6f742065786973740000000000000000000000000000600082015250565b7f706f776572206572726f72000000000000000000000000000000000000000000600082015250565b7f7374616b696e6720686173207374617274656400000000000000000000000000600082015250565b7f706f6f6c206973206e6f74206578697374000000000000000000000000000000600082015250565b7f6e6f74207374616b696e67000000000000000000000000000000000000000000600082015250565b7f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000600082015250565b7f6174206c65617374206f6e6520636f6d70000000000000000000000000000000600082015250565b7f616c7265616479207374616b696e672000000000000000000000000000000000600082015250565b612c6f816128dd565b8114612c7a57600080fd5b50565b612c86816128ef565b8114612c9157600080fd5b50565b612c9d8161291b565b8114612ca857600080fd5b50565b612cb481612925565b8114612cbf57600080fd5b5056fea2646970667358221220da2244b7d25d9c0c335359a191ae8a8287e61535a826289c600fad6db243159e64736f6c63430008070033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.