ETH Price: $3,275.56 (+3.80%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Award130622762021-08-20 12:59:211259 days ago1629464361IN
0xAF1aEB50...106474f93
0 ETH0.0070824630.00000145
Withdraw Award130615752021-08-20 10:23:571259 days ago1629455037IN
0xAF1aEB50...106474f93
0 ETH0.0051320321.76529342
Withdraw Award130614072021-08-20 9:45:321259 days ago1629452732IN
0xAF1aEB50...106474f93
0 ETH0.0054511323.07573834
Withdraw Award130613382021-08-20 9:32:381259 days ago1629451958IN
0xAF1aEB50...106474f93
0 ETH0.0053782522.79540425
Withdraw Award130612632021-08-20 9:16:591259 days ago1629451019IN
0xAF1aEB50...106474f93
0 ETH0.0071061330.00000145
Obtain Car130600522021-08-20 4:39:251259 days ago1629434365IN
0xAF1aEB50...106474f93
0 ETH0.0062346529.00000145
Obtain Car130543822021-08-19 7:33:221260 days ago1629358402IN
0xAF1aEB50...106474f93
0 ETH0.0042552622.00000145
Withdraw Award130543672021-08-19 7:31:081260 days ago1629358268IN
0xAF1aEB50...106474f93
0 ETH0.0048359525.00000145
Obtain Car130539442021-08-19 5:55:211260 days ago1629352521IN
0xAF1aEB50...106474f93
0 ETH0.0054648425.41787891
Obtain Car130479942021-08-18 7:48:241261 days ago1629272904IN
0xAF1aEB50...106474f93
0 ETH0.0063828933.00000145
Obtain Car130459942021-08-18 0:23:211262 days ago1629246201IN
0xAF1aEB50...106474f93
0 ETH0.0076630235.64198387
Obtain Car130411782021-08-17 6:42:511262 days ago1629182571IN
0xAF1aEB50...106474f93
0 ETH0.0054362428.10576447
Withdraw Award130403832021-08-17 3:45:221262 days ago1629171922IN
0xAF1aEB50...106474f93
0 ETH0.0135129252.00000145
Obtain Car130394402021-08-17 0:10:281263 days ago1629159028IN
0xAF1aEB50...106474f93
0 ETH0.00623529.00000145
Obtain Car130349582021-08-16 7:36:211263 days ago1629099381IN
0xAF1aEB50...106474f93
0 ETH0.0061294231.69151708
Obtain Car130347752021-08-16 6:58:341263 days ago1629097114IN
0xAF1aEB50...106474f93
0 ETH0.0076134339.36197722
Obtain Car130344722021-08-16 5:51:291263 days ago1629093089IN
0xAF1aEB50...106474f93
0 ETH0.0071204633.11846286
Obtain Car130275322021-08-15 4:06:501264 days ago1629000410IN
0xAF1aEB50...106474f93
0 ETH0.0068265235.29361641
Obtain Car130275232021-08-15 4:04:301264 days ago1629000270IN
0xAF1aEB50...106474f93
0 ETH0.0058855630.42876631
Obtain Car130266662021-08-15 0:50:071265 days ago1628988607IN
0xAF1aEB50...106474f93
0 ETH0.0068581131.9
Obtain Car130263372021-08-14 23:34:061265 days ago1628984046IN
0xAF1aEB50...106474f93
0 ETH0.0055952828.9279915
Obtain Car130223952021-08-14 9:18:051265 days ago1628932685IN
0xAF1aEB50...106474f93
0 ETH0.006390133.03726572
Obtain Car130209772021-08-14 3:55:501265 days ago1628913350IN
0xAF1aEB50...106474f93
0 ETH0.0085783739.8993982
Obtain Car130171732021-08-13 13:45:041266 days ago1628862304IN
0xAF1aEB50...106474f93
0 ETH0.0097587243.14146142
Obtain Car130170412021-08-13 13:19:241266 days ago1628860764IN
0xAF1aEB50...106474f93
0 ETH0.0077280139.95438559
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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

Contract Name:
MiningCore

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: MiningCore.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

import "./SafeMath.sol";
import "./IERC1155.sol";
import "./IERC1155TokenReceiver.sol";
import "./Ownable.sol";
import "./Address.sol";

// sns: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
// ids:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
// fertilities:[1,2,5,10,30,100,1,2,5,10,30,100,10,20,50,100,300,1000]
// carries:[0,0,0,0,0,0,10,20,50,100,300,1000,1,2,5,10,30,100]

interface MiningPool{
    
    function users(address userAddress) external view returns(uint256 id,uint256 investment,uint256 freezeTime);
    
    function balanceOf(address userAddress) external view returns (address[2] memory,uint256[2] memory balances);
    
    function totalSupply() external view returns (uint256);
    
    function stakeAmount() external view returns (uint256);
    
    function duration() external view returns (uint256);
    
    function token() external view returns (address);
    
    function deposit(uint256[2] calldata amounts) external returns(bool);
    
    function allot(address userAddress,uint256[2] calldata amounts) external returns(bool);
    
    function lock(address holder, address locker, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external;
    
    function lockStatus(address userAddress) external view returns(bool);
}

interface IUniswapPair {
    
    function setFeeOwner(address _feeOwner) external;
}

interface IUniswapFactory {
    
    function getPair(address token0,address token1) external returns(address);
}

abstract contract ERC1155TokenReceiver is IERC1155TokenReceiver{
    
    bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
    bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;
    
    //-------------------------------------ERC1155---------------------------------------------------------------------
    
    function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external override returns(bytes4) {
        uint256[] memory _values = new uint256[](1);
        uint256[] memory _ids = new uint256[](1);
        _ids[0] = _id;
        _values[0] = _value;
        
        operateToken1155(msg.sender,_operator,_from,_ids,_values,_data);
        return ERC1155_RECEIVED_VALUE;
    }

    function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external override returns(bytes4) {
        operateToken1155(msg.sender,_operator,_from,_ids,_values,_data);
        return ERC1155_BATCH_RECEIVED_VALUE;
    }

    // ERC165 interface support
    function supportsInterface(bytes4 interfaceID) external override pure returns (bool) {
        return  interfaceID == 0x01ffc9a7 ||    // ERC165
                interfaceID == 0x4e2312e0;      // ERC1155_ACCEPTED ^ ERC1155_BATCH_ACCEPTED;
    }
    
    function operateToken1155(address msgSender, address _operator, address _from, uint256[] memory _ids, uint256[] memory _values, bytes calldata _data) internal virtual;
}

contract Config{
    
    uint256 public constant ONE_DAY = 1 days;
    
    uint256[10] public  RANKING_AWARD_PERCENT = [10,5,3,1,1,1,1,1,1,1];
    
    uint256 public constant LAST_STRAW_PERCNET = 5;
    
    uint256[2] public  OUT_RATE = [1,1];

}


contract MiningCore is Config, Ownable, ERC1155TokenReceiver {
    
    using SafeMath for uint256;
    
    constructor(MiningPool _pool,IERC1155 _token1155,address payable _developer) {
        pool = _pool;
        token1155 = _token1155;
        developer = _developer;
    }
    
    MiningPool public pool;
    
    IERC1155 public token1155;
    
    
    uint256 public ORE_AMOUNT = 125000000;
    
    struct Record{
        //提现状态
        bool drawStatus;
        //挖矿总量
        uint256 digGross;
        //最后一击
        bool lastStraw;
       
        mapping(uint256=>uint256) disCars;
    }
    
    struct Pair {
        uint256[2] amounts;
        //挖矿总量
        uint256 complete;
        //实际挖矿量
        uint256 actual;
        
        uint256 oracleAmount;
        
        address lastStraw;
    }
    
    struct Car{
        uint256 sn;
        uint256 fertility;
        uint256 carry;
    }
    
    //address[] callHelper;
    
    address payable developer;
    
    uint256 public version;
    
    //User acquisition record
    //mapping(uint256=>mapping(address=>bool)) public obtainLogs;
    
    mapping(uint256=>mapping(address=>Record)) public records;
    
    //Record of each mining period
    mapping(uint256=>Pair) public history;
    
    //Daily output
    mapping(uint256=>uint256) public dailyOutput;
    
    //The number corresponds to the carIndex
    uint256[] public carIndex;
    
    //Each ID corresponds to a car attribute
    mapping(uint256=>Car) public cars;
    
    mapping(uint256=> address[10]) public rank;
    
    event ObtainCar(address indexed userAddress,uint256 indexed _version,uint256 amount );
    
    event Mining(address indexed userAddress,uint256 indexed _version,uint256[] ,uint256[],uint256 amount);
    
    event WithdrawAward(address indexed userAddress,uint256 indexed _version,uint256[2] amounts);
    
    event UpdateRank(address indexed operator);
    
    event DeveloperFee(uint256 fee1,uint256 fee2);
    
    event SetCarIndex(uint256 sn,uint256 id,uint256 fertility,uint256 carry);
    
    event LastStraw(address indexed userAddress,uint256 _version,uint256,uint256,uint256);
    
    function init() public onlyOwner {
        uint256[18] memory _ids = [uint256(1),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];
        uint256[18] memory _fertilities = [uint256(1),2,5,10,30,100,1,2,5,10,30,100,10,20,50,100,300,1000];
        uint256[18] memory _carries = [uint256(1),2,5,10,30,100,10,20,50,100,300,1000,1,2,5,10,30,100];
        setCarIndexs(_ids,_fertilities,_carries);
    }

     //Set vehicle properties
    function setCarIndex(uint256 sn,uint256 id,uint256 fertility,uint256 carry) public onlyOwner{
        if(sn+1>carIndex.length){
            carIndex.push(id);
            //callHelper.push(address(this));
        }else{
            carIndex[sn] = id;
        }
        
        cars[id] = Car(sn,fertility,carry);
        emit SetCarIndex( sn, id, fertility, carry);
    }
    
    //Batch set vehicle properties
    function setCarIndexs(uint256[18] memory ids,uint256[18] memory fertilities,uint256[18] memory carries) private {
        for(uint256 i=0;i<ids.length;i++){
            setCarIndex(i,ids[i],fertilities[i],carries[i]);
        }
    }
    
    function setFeeOwner(address _feeOwner,address factory) external  onlyOwner {
        (address[2] memory tokens,) = pool.balanceOf(address(0));
        address pair = IUniswapFactory(factory).getPair(tokens[0],tokens[1]);
        IUniswapPair(pair).setFeeOwner(_feeOwner);
    }
    
    
    function setOracle(uint256 _ORE_AMOUNT) public onlyOwner {
        ORE_AMOUNT = _ORE_AMOUNT;
    }
    
    
    function operateToken1155(address msgSender,address _operator, address _from, uint256[] memory _ids, uint256[] memory _values, bytes calldata) internal override virtual{
        
        require(address(token1155)==msgSender,"not allowed");
        require(!Address.isContract(_operator),"Contract invocation is not allowed");
       
        if(_from!=address(0x0)){
            mining(_from,_ids,_values);
        }
    }
    

    function obtainCar(uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) public {
        require(!pool.lockStatus(msg.sender),"Have been received");
		
		     (,uint256[] memory counts,uint256 len,uint256 token1155Amount,uint256 quantity) = cat(msg.sender);
            
             if(dailyOutput[pool.duration()]==0){
                 dailyOutput[pool.duration()] = token1155Amount;
             }
        
        pool.lock(msg.sender,address(this),nonce,expiry,allowed,v,r,s);
        //token1155.safeBatchTransferFrom(address(this),msg.sender,carIndex,carUsable,"success");
 
    }
    
    function withdrawAward(uint256 _version) public {
        
       require(!records[_version][msg.sender].drawStatus,"have withdrawal");
	   require(_version<version,"Event not over");
        
       (uint256[2] memory amounts) =  getVersionAward(_version,msg.sender);

       records[_version][msg.sender].drawStatus = true;
       
       pool.allot(msg.sender,amounts);
       
       emit WithdrawAward(msg.sender,_version,amounts);
       
    }
    
    
    function getVersionAward(uint256 _version,address userAddress) public view returns(uint256[2] memory amounts){
        Pair memory pair = history[_version];
        return getPredictAward(_version,userAddress,pair);
    }
    
    function getPredictAward(uint256 _version,address userAddress,Pair memory pair) internal view returns(uint256[2] memory amounts){
        Record storage record = records[_version][userAddress];
        
        uint256 ranking = getRanking(userAddress,_version);

        for(uint8 i = 0;i<2;i++){
            uint256 baseAmount = pair.amounts[i].mul(70).div(100);
            uint256 awardAmount = pair.amounts[i].mul(30).div(100);
            
            amounts[i] = amounts[i].add(baseAmount.mul(record.digGross).div(pair.oracleAmount==0?ORE_AMOUNT:pair.oracleAmount));
            
            if(ranking<10){
                amounts[i] = amounts[i].add(awardAmount.mul(RANKING_AWARD_PERCENT[ranking]).div(30));
            }
            
            if(record.lastStraw){
                amounts[i] = amounts[i].add(awardAmount.mul(LAST_STRAW_PERCNET).div(30));
            }
        }
    }

    function getGlobalStats(uint256 _version) external view returns (uint256[5] memory stats,address lastStrawUser) {
        
        Pair memory pair = history[_version];
        if(_version==version){
            (,uint256[2] memory balances) = pool.balanceOf(address(this));
            pair.amounts = balances;
        }
        
        stats[0] = pair.amounts[0];
        stats[1] = pair.amounts[1];
        stats[2] = pair.complete;
        stats[3] = pair.actual;
        stats[4] = (pool.duration()+1)*ONE_DAY;
        lastStrawUser = pair.lastStraw;
  
    }
    
    
    function crown(uint256 _version) external view returns (address[10] memory ranking,uint256[10] memory digGross){
        ranking = sortRank(_version);
        for(uint8 i =0;i<ranking.length;i++){
            digGross[i] = getDigGross(ranking[i],_version);
        }
    }
    
    
    function getPersonalStats(uint256 _version,address userAddress) external view returns (uint256[8] memory stats,bool[3] memory stats2,uint256[] memory departs){
        Record storage record = records[_version][userAddress];
         
        (uint256 id,uint256 investment,uint256 freezeTime) = pool.users(userAddress);
        stats[0] = investment;
        stats[1] = record.digGross;
         
        Pair memory pair = history[_version];
         
        if(_version==version){
            (,uint256[2] memory balances) = pool.balanceOf(address(this));
            pair.amounts = balances;
        }
         
        uint256[2] memory amounts = getPredictAward(_version,userAddress,pair);
         
        stats[2] = amounts[1];
        stats[3] = amounts[0];
        stats[4] = id;
        stats[5] = freezeTime;
        stats[6] = getRanking(userAddress,_version)+1;
         
        stats2[0] = record.drawStatus;
        stats2[1] = record.lastStraw;
        stats2[2] = pool.lockStatus(userAddress);
         
        departs = new uint256[](kinds());
        uint256 total;
        for(uint256 i =0;i<kinds();i++){
            uint256 depart = getDepartCars(_version,userAddress,carIndex[i]);
            departs[i] = depart;
            total = total.add(depart);
        }
        stats[7] = total;
        
     }
     

    function getDepartCars(uint256 _version,address userAddress,uint256 _carId) public view returns(uint256){
        return records[_version][userAddress].disCars[_carId];
    }
    
    
    
    function mining(address userAddress,uint256[] memory ids,uint256[] memory amounts) internal returns(uint256){
        Pair storage pair = history[version];
        require(ids.length>0&&ids.length == amounts.length,"error");
        
        uint256 carFertility;
        uint256 carCarry;
        Record storage record = records[version][userAddress];
        uint256 output;
        for(uint256 i = 0;i<ids.length;i++){
            Car memory car = cars[ids[i]];
            carFertility = carFertility.add(car.fertility.mul(amounts[i]));
            carCarry = carCarry.add(car.carry.mul(amounts[i]));
            record.disCars[ids[i]] = record.disCars[ids[i]].add(amounts[i]);
        }
        
        if(carFertility>carCarry){
            output = carCarry;
        }else{
            output = carFertility;
        }
        
        uint256 miningQuantity = pair.complete.add(carFertility);
        
        if(pair.complete.add(output)>ORE_AMOUNT){
            output = ORE_AMOUNT>pair.complete?ORE_AMOUNT-pair.complete:0;
        }
        
        record.digGross = record.digGross.add(output);
        pair.complete = pair.complete.add(carFertility);
        pair.actual = pair.actual.add(output);
        updateRank(userAddress);
        
        if(miningQuantity>=ORE_AMOUNT){ 
            emit LastStraw(userAddress,version,carFertility,carCarry,output);
            lastStraw(userAddress,pair);
        }
        
        token1155.safeBatchTransferFrom(address(this),owner(),ids,amounts,"success");
        
        emit Mining(userAddress,version,ids,amounts,output);
        return output;
    }
    
    function getRanking(address userAddress,uint256 _version) public view returns(uint256){
        address[10] memory rankingList = sortRank(_version);
        uint256 ranking = 10;
        for(uint8 i =0;i<rankingList.length;i++){
            if(userAddress == rankingList[i]){
                ranking = i;
                break;
            }
        }
        return ranking;
    }
    
    function pickUp(address[10] memory rankingList,address userAddress) internal view returns (uint256 sn,uint256 minDig){
        
        minDig = getDigGross(rankingList[0]);
        for(uint8 i =0;i<rankingList.length;i++){
            if(rankingList[i]==userAddress){
                return (rankingList.length,0);
            }
            if(getDigGross(rankingList[i])<minDig){
                minDig = getDigGross(rankingList[i]);
                sn = i;
            }
        }
        
        return (sn,minDig);
    }
    
    function updateRank(address userAddress) internal {
        address[10] memory rankingList = rank[version];
        
        (uint256 sn,uint256 minDig) = pickUp(rankingList,userAddress);
        if(sn!=rankingList.length){
            if(minDig< getDigGross(userAddress)){
                rankingList[sn] = userAddress;
            }
            rank[version] = rankingList;
            emit UpdateRank(userAddress);
        }
    }
    
    function sortRank(uint256 _version) public view returns(address[10] memory ranking){
        ranking = rank[_version];
        
        address tmp;
        for(uint8 i = 1;i<10;i++){
            for(uint8 j = 0;j<10-i;j++){
                if(getDigGross(ranking[j],_version)<getDigGross(ranking[j+1],_version)){
                    tmp = ranking[j];
                    ranking[j] = ranking[j+1];
                    ranking[j+1] = tmp;
                }
            }
        }
        return ranking;
    }
    
    function getDigGross(address userAddress) internal view returns(uint256){
        return getDigGross(userAddress,version);
    }
    
    function getDigGross(address userAddress,uint256 _version) internal view returns(uint256){
        return records[_version][userAddress].digGross;
    }
    
    function lastStraw(address userAddress,Pair storage pair) internal{
        
        (address[2] memory tokens,uint256[2] memory amounts) = pool.balanceOf(address(this));
        
        for(uint8 i;i<amounts.length;i++){
            TransferHelper.safeApprove(tokens[i],address(pool),amounts[i]);
        }
        pool.deposit(amounts);
        pair.amounts = amounts;

        pair.lastStraw = userAddress;
        pair.oracleAmount = ORE_AMOUNT;
        records[version][userAddress].lastStraw = true;    
        
        developerFee(pair);
        version++;  
        
    }
    
     //项目方收款
    function developerFee(Pair storage pair) internal{
     
        uint256[2] memory amounts;
        address[10] memory rankingList = rank[version];
        uint count;
        for(uint i = 0;i<rankingList.length;i++) {
            if(rankingList[i]==address(0)) {
                count++;
            }
        }
        
        uint used;
        for(uint j = 0;j<count;j++){
            used+=RANKING_AWARD_PERCENT[j];
        }
        
        for(uint256 i = 0;i<amounts.length;i++){
            uint waste = pair.amounts[i].mul(70).mul(pair.oracleAmount.sub(pair.actual)).div(ORE_AMOUNT).div(100);
            uint rest = pair.amounts[i].mul(30).mul(uint256(25).sub(used)).div(30).div(100);
            amounts[i] = waste+rest;
        }
        
        pool.allot(developer,amounts);
        
        emit DeveloperFee(amounts[0],amounts[1]);
    }
    
    
    
    function cat(address userAddress) public view returns(uint256[] memory,uint256[] memory counts,uint256 len,uint256 token1155Amount,uint256 quantity){
        
        ( ,uint256 investment, ) = pool.users(userAddress);
        
        (counts,token1155Amount) = determinate(); 

        uint256 dailyTokenAmount = dailyOutput[pool.duration()];
        if(dailyTokenAmount==0){
            dailyTokenAmount = token1155Amount;
        }
        uint256 totalSupply = pool.totalSupply();
        quantity = investment.mul(dailyTokenAmount).div(totalSupply);
        
        return (carIndex,counts,kinds(),token1155Amount,quantity);

    }
    
    function determinate() public view returns(uint256[] memory counts,uint256 token1155Amount){
        address _owner = owner();
        counts = new uint256[](kinds());
        for(uint8 i = 0;i<kinds();i++){
            uint256 count = token1155.balanceOf(_owner,carIndex[i]);
            counts[i] = count;
            token1155Amount+=count;
        }
		
        for(uint8 i = 0;i<kinds();i++){
            token1155Amount+=counts[i];
        }
        
    }
    
    function kinds() internal view returns (uint256) {
        return carIndex.length;
    }
}


// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

File 2 of 6: Address.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * IMPORTANT: It is unsafe to assume that an address for which this
     * function returns false is an externally-owned account (EOA) and not a
     * contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value:amount}(new bytes(0));
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

File 3 of 6: IERC1155.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;


interface IERC1155 {
  // Events

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

  /**
   * @dev MUST emit when an approval is updated
   */
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /**
   * @dev MUST emit when the URI is updated for a token ID
   *   URIs are defined in RFC 3986
   *   The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema"
   */
  event URI(string _amount, uint256 indexed _id);

  /**
   * @notice Transfers amount of an _id from the _from address to the _to address specified
   * @dev MUST emit TransferSingle event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @dev MUST emit TransferBatch event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if length of `_ids` is not the same as length of `_amounts`
   * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
  */
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  
  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return        The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @dev MUST emit the ApprovalForAll event on success
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved) external;


  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);

}

File 4 of 6: IERC1155TokenReceiver.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev ERC-1155 interface for accepting safe transfers.
 */
interface IERC1155TokenReceiver {

  /**
   * @notice Handle the receipt of a single ERC1155 token type
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value MUST result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _id        The id of the token being transferred
   * @param _amount    The amount of tokens being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   */
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Handle the receipt of multiple ERC1155 token types
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value WILL result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeBatchTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _ids       An array containing ids of each token being transferred
   * @param _amounts   An array containing amounts of each token being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   */
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types.
   * @param  interfaceID The ERC-165 interface ID that is queried for support.s
   * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface.
   *      This function MUST NOT consume more than 5,000 gas.
   * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported.
   */
  function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

File 5 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;


import "./SafeMath.sol";

contract Context {
    
    
    constructor () { }
    

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    
    address private _owner;

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

    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    
    function owner() public view returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 6 of 6: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;


library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        
        
        
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        
        require(b > 0, errorMessage);
        uint256 c = a / b;
        

        return c;
    }

    
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract MiningPool","name":"_pool","type":"address"},{"internalType":"contract IERC1155","name":"_token1155","type":"address"},{"internalType":"address payable","name":"_developer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee2","type":"uint256"}],"name":"DeveloperFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_version","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"LastStraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_version","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mining","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_version","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ObtainCar","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fertility","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"carry","type":"uint256"}],"name":"SetCarIndex","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"}],"name":"UpdateRank","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_version","type":"uint256"},{"indexed":false,"internalType":"uint256[2]","name":"amounts","type":"uint256[2]"}],"name":"WithdrawAward","type":"event"},{"inputs":[],"name":"LAST_STRAW_PERCNET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORE_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"OUT_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RANKING_AWARD_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"carIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cars","outputs":[{"internalType":"uint256","name":"sn","type":"uint256"},{"internalType":"uint256","name":"fertility","type":"uint256"},{"internalType":"uint256","name":"carry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"cat","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"token1155Amount","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"crown","outputs":[{"internalType":"address[10]","name":"ranking","type":"address[10]"},{"internalType":"uint256[10]","name":"digGross","type":"uint256[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailyOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"determinate","outputs":[{"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"internalType":"uint256","name":"token1155Amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"_carId","type":"uint256"}],"name":"getDepartCars","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"getGlobalStats","outputs":[{"internalType":"uint256[5]","name":"stats","type":"uint256[5]"},{"internalType":"address","name":"lastStrawUser","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getPersonalStats","outputs":[{"internalType":"uint256[8]","name":"stats","type":"uint256[8]"},{"internalType":"bool[3]","name":"stats2","type":"bool[3]"},{"internalType":"uint256[]","name":"departs","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"getRanking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getVersionAward","outputs":[{"internalType":"uint256[2]","name":"amounts","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint256","name":"complete","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"oracleAmount","type":"uint256"},{"internalType":"address","name":"lastStraw","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"obtainCar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract MiningPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rank","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"records","outputs":[{"internalType":"bool","name":"drawStatus","type":"bool"},{"internalType":"uint256","name":"digGross","type":"uint256"},{"internalType":"bool","name":"lastStraw","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sn","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"fertility","type":"uint256"},{"internalType":"uint256","name":"carry","type":"uint256"}],"name":"setCarIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeOwner","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"setFeeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ORE_AMOUNT","type":"uint256"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"sortRank","outputs":[{"internalType":"address[10]","name":"ranking","type":"address[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token1155","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"withdrawAward","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80638f32d59b11610125578063d4fd7d22116100ad578063ed272cf11161007c578063ed272cf114610d62578063f23a6e6114610dc4578063f2fde38b14610ec4578063f7746e3614610f08578063fe5d327014610f585761021c565b8063d4fd7d2214610c72578063da20638914610ca0578063db323abb14610cec578063e1c7392a14610d585761021c565b8063a7a38f0b116100f4578063a7a38f0b1461099b578063a9ee491f14610a08578063ac4d0c3614610a7c578063afec48c114610a9a578063bc197c8114610adc5761021c565b80638f32d59b1461087e578063912dde351461089e5780639cebb2bd146109035780639fa0a960146109375761021c565b80633066ad63116101a8578063699de59a11610177578063699de59a146106fe578063715018a61461072c578063863e76db146107365780638bd46d24146107545780638da5cb5b1461084a5761021c565b80633066ad63146105d25780633bfb4aa2146105f057806350a733f01461067a57806354fd4d50146106e05761021c565b806315f4774e116101ef57806315f4774e14610429578063162a9f8d1461046b57806316f0115b146104d5578063216b39d01461050957806321df6fce1461054b5761021c565b806301ffc9a7146102215780630db5c944146102845780630ea70ad3146103855780630f122cd3146103c7575b600080fd5b61026c6004803603602081101561023757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ff1565b60405180821515815260200191505060405180910390f35b6102d06004803603604081101561029a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611053565b6040518084600860200280838360005b838110156102fb5780820151818401526020810190506102e0565b5050505090500183600360200280838360005b8381101561032957808201518184015260208101905061030e565b5050505090500180602001828103825283818151815260200191508051906020019060200280838360005b8381101561036f578082015181840152602081019050610354565b5050505090500194505050505060405180910390f35b6103b16004803603602081101561039b57600080fd5b810190808035906020019092919050505061166e565b6040518082815260200191505060405180910390f35b610413600480360360408110156103dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611689565b6040518082815260200191505060405180910390f35b6104556004803603602081101561043f57600080fd5b8101908080359060200190929190505050611717565b6040518082815260200191505060405180910390f35b6104976004803603602081101561048157600080fd5b810190808035906020019092919050505061172f565b6040518082600a60200280838360005b838110156104c25780820151818401526020810190506104a7565b5050505090500191505060405180910390f35b6104dd611909565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105356004803603602081101561051f57600080fd5b810190808035906020019092919050505061192f565b6040518082815260200191505060405180910390f35b6105776004803603602081101561056157600080fd5b8101908080359060200190929190505050611953565b6040518083600560200280838360005b838110156105a2578082015181840152602081019050610587565b505050509050018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b6105da611c7d565b6040518082815260200191505060405180910390f35b61063c6004803603604081101561060657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c83565b6040518082600260200280838360005b8381101561066757808201518184015260208101905061064c565b5050505090500191505060405180910390f35b610682611d7a565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156106cb5780820151818401526020810190506106b0565b50505050905001935050505060405180910390f35b6106e8611f4a565b6040518082815260200191505060405180910390f35b61072a6004803603602081101561071457600080fd5b8101908080359060200190929190505050611f50565b005b610734612287565b005b61073e6123c2565b6040518082815260200191505060405180910390f35b6107966004803603602081101561076a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c9565b604051808060200180602001868152602001858152602001848152602001838103835288818151815260200191508051906020019060200280838360005b838110156107ef5780820151818401526020810190506107d4565b50505050905001838103825287818151815260200191508051906020019060200280838360005b83811015610831578082015181840152602081019050610816565b5050505090500197505050505050505060405180910390f35b6108526126c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108866126f2565b60405180821515815260200191505060405180910390f35b610901600480360360c08110156108b457600080fd5b810190808035906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612751565b005b61090b612b1b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109996004803603604081101561094d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b41565b005b6109c7600480360360208110156109b157600080fd5b8101908080359060200190929190505050612e00565b604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b610a5460048036036040811015610a1e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e50565b6040518084151581526020018381526020018215158152602001935050505060405180910390f35b610a84612ea1565b6040518082815260200191505060405180910390f35b610ac660048036036020811015610ab057600080fd5b8101908080359060200190929190505050612ea6565b6040518082815260200191505060405180910390f35b610c3d600480360360a0811015610af257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610b4f57600080fd5b820183602082011115610b6157600080fd5b80359060200191846020830284011164010000000083111715610b8357600080fd5b909192939192939080359060200190640100000000811115610ba457600080fd5b820183602082011115610bb657600080fd5b80359060200191846020830284011164010000000083111715610bd857600080fd5b909192939192939080359060200190640100000000811115610bf957600080fd5b820183602082011115610c0b57600080fd5b80359060200191846001830284011164010000000083111715610c2d57600080fd5b9091929391929390505050612ec1565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610c9e60048036036020811015610c8857600080fd5b8101908080359060200190929190505050612f6a565b005b610cea60048036036080811015610cb657600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612fee565b005b610d4260048036036060811015610d0257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613167565b6040518082815260200191505060405180910390f35b610d606131d7565b005b610d9860048036036040811015610d7857600080fd5b810190808035906020019092919080359060200190929190505050613409565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8f600480360360a0811015610dda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610e4b57600080fd5b820183602082011115610e5d57600080fd5b80359060200191846001830284011164010000000083111715610e7f57600080fd5b909192939192939050505061344e565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610f0660048036036020811015610eda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613540565b005b610f3460048036036020811015610f1e57600080fd5b81019080803590602001909291905050506135c6565b60405180848152602001838152602001828152602001935050505060405180910390f35b610f8460048036036020811015610f6e57600080fd5b81019080803590602001909291905050506135f0565b6040518083600a60200280838360005b83811015610faf578082015181840152602081019050610f94565b5050505090500182600a60200280838360005b83811015610fdd578082015181840152602081019050610fc2565b505050509050019250505060405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061104c5750634e2312e060e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b61105b61513e565b611063615161565b606060006012600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a87430ba896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060606040518083038186803b15801561114757600080fd5b505afa15801561115b573d6000803e3d6000fd5b505050506040513d606081101561117157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505092509250925081876000600881106111aa57fe5b6020020181815250508360010154876001600881106111c557fe5b6020020181815250506000601360008b81526020019081526020016000206040518060a00160405290816000820160028060200260405190810160405280929190826002801561122a576020028201915b815481526020019060010190808311611216575b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506011548a1415611393576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060806040518083038186803b15801561133e57600080fd5b505afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561137757600080fd5b8101908091908260400191905050915050808260000181905250505b60006113a08b8b84613662565b9050806001600281106113af57fe5b6020020151896002600881106113c157fe5b602002018181525050806000600281106113d757fe5b6020020151896003600881106113e957fe5b602002018181525050848960046008811061140057fe5b602002018181525050828960056008811061141757fe5b602002018181525050600161142c8b8d611689565b018960066008811061143a57fe5b6020020181815250508560000160009054906101000a900460ff168860006003811061146257fe5b6020020190151590811515815250508560020160009054906101000a900460ff168860016003811061149057fe5b602002019015159081151581525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315497d2c8b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561152857600080fd5b505afa15801561153c573d6000803e3d6000fd5b505050506040513d602081101561155257600080fd5b81019080805190602001909291905050508860026003811061157057fe5b6020020190151590811515815250506115876138ee565b67ffffffffffffffff8111801561159d57600080fd5b506040519080825280602002602001820160405280156115cc5781602001602082028036833780820191505090505b509650600080600090505b6115df6138ee565b81101561164857600061160a8e8e601585815481106115fa57fe5b9060005260206000200154613167565b9050808a838151811061161957fe5b60200260200101818152505061163881846138fb90919063ffffffff16565b92505080806001019150506115d7565b50808a60076008811061165757fe5b602002018181525050505050505050509250925092565b600081600a811061167e57600080fd5b016000915090505481565b6000806116958361172f565b90506000600a905060005b600a8160ff16101561170b57828160ff16600a81106116bb57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156116fe578060ff16915061170b565b80806001019150506116a0565b50809250505092915050565b60146020528060005260406000206000915090505481565b611737615183565b60176000838152602001908152602001600020600a806020026040519081016040528092919082600a80156117b7576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161176d575b50505050509050600080600190505b600a8160ff1610156119025760005b81600a0360ff168160ff1610156118f457611806846001830160ff16600a81106117fb57fe5b602002015186613983565b611823858360ff16600a811061181857fe5b602002015187613983565b10156118e757838160ff16600a811061183857fe5b60200201519250836001820160ff16600a811061185157fe5b6020020151848260ff16600a811061186557fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082846001830160ff16600a81106118af57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b80806001019150506117d5565b5080806001019150506117c6565b5050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015818154811061193f57600080fd5b906000526020600020016000915090505481565b61195b6151a6565b600080601360008581526020019081526020016000206040518060a0016040529081600082016002806020026040519081016040528092919082600280156119b8576020028201915b8154815260200190600101908083116119a4575b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050601154841415611b21576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060806040518083038186803b158015611acc57600080fd5b505afa158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506080811015611b0557600080fd5b8101908091908260400191905050915050808260000181905250505b8060000151600060028110611b3257fe5b602002015183600060058110611b4457fe5b6020020181815250508060000151600160028110611b5e57fe5b602002015183600160058110611b7057fe5b602002018181525050806020015183600260058110611b8b57fe5b602002018181525050806040015183600360058110611ba657fe5b602002018181525050620151806001600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1d57600080fd5b505afa158015611c31573d6000803e3d6000fd5b505050506040513d6020811015611c4757600080fd5b8101908080519060200190929190505050010283600460058110611c6757fe5b6020020181815250508060800151915050915091565b600f5481565b611c8b6151c8565b6000601360008581526020019081526020016000206040518060a001604052908160008201600280602002604051908101604052809291908260028015611ce7576020028201915b815481526020019060010190808311611cd3575b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050611d71848483613662565b91505092915050565b6060600080611d876126c8565b9050611d916138ee565b67ffffffffffffffff81118015611da757600080fd5b50604051908082528060200260200182016040528015611dd65781602001602082028036833780820191505090505b50925060005b611de46138ee565b8160ff161015611f06576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e8460158560ff1681548110611e3e57fe5b90600052602060002001546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015611e9a57600080fd5b505afa158015611eae573d6000803e3d6000fd5b505050506040513d6020811015611ec457600080fd5b8101908080519060200190929190505050905080858360ff1681518110611ee757fe5b6020026020010181815250508084019350508080600101915050611ddc565b5060005b611f126138ee565b8160ff161015611f4457838160ff1681518110611f2b57fe5b6020026020010151830192508080600101915050611f0a565b50509091565b60115481565b6012600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f68617665207769746864726177616c000000000000000000000000000000000081525060200191505060405180910390fd5b601154811061209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4576656e74206e6f74206f76657200000000000000000000000000000000000081525060200191505060405180910390fd5b60006120a78233611c83565b905060016012600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f020d11833836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182600260200280838360005b838110156121ab578082015181840152602081019050612190565b5050505090500192505050602060405180830381600087803b1580156121d057600080fd5b505af11580156121e4573d6000803e3d6000fd5b505050506040513d60208110156121fa57600080fd5b810190808051906020019092919050505050813373ffffffffffffffffffffffffffffffffffffffff167f0e69fafc3e136b0e61c8f4b408261bd91e605212df6b0f2b4c03d40ec77f8503836040518082600260200280838360005b83811015612271578082015181840152602081019050612256565b5050505090500191505060405180910390a35050565b61228f6126f2565b612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6201518081565b606080600080600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a87430ba886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060606040518083038186803b15801561245b57600080fd5b505afa15801561246f573d6000803e3d6000fd5b505050506040513d606081101561248557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050509150506124b6611d7a565b8094508196505050600060146000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561252c57600080fd5b505afa158015612540573d6000803e3d6000fd5b505050506040513d602081101561255657600080fd5b810190808051906020019092919050505081526020019081526020016000205490506000811415612585578390505b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ef57600080fd5b505afa158015612603573d6000803e3d6000fd5b505050506040513d602081101561261957600080fd5b810190808051906020019092919050505090506126518161264384866139e190919063ffffffff16565b613a6790919063ffffffff16565b935060158761265e6138ee565b8787848054806020026020016040519081016040528092919081815260200182805480156126ab57602002820191906000526020600020905b815481526020019060010190808311612697575b505050505094509750975097509750975050505091939590929450565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612735613ab1565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315497d2c336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156127da57600080fd5b505afa1580156127ee573d6000803e3d6000fd5b505050506040513d602081101561280457600080fd5b810190808051906020019092919050505015612888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f48617665206265656e207265636569766564000000000000000000000000000081525060200191505060405180910390fd5b600080600080612897336123c9565b945094509450945050600060146000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561290e57600080fd5b505afa158015612922573d6000803e3d6000fd5b505050506040513d602081101561293857600080fd5b81019080805190602001909291905050508152602001908152602001600020541415612a19578160146000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156129cb57600080fd5b505afa1580156129df573d6000803e3d6000fd5b505050506040513d60208110156129f557600080fd5b81019080805190602001909291905050508152602001908152602001600020819055505b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f28b4933308d8d8d8d8d8d6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200185151581526020018460ff16815260200183815260200182815260200198505050505050505050600060405180830381600087803b158015612af757600080fd5b505af1158015612b0b573d6000803e3d6000fd5b5050505050505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612b496126f2565b612bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823160006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060806040518083038186803b158015612c4757600080fd5b505afa158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506080811015612c8057600080fd5b810190809190826040019190505050905060008273ffffffffffffffffffffffffffffffffffffffff1663e6a4390583600060028110612cbc57fe5b602002015184600160028110612cce57fe5b60200201516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050506040513d6020811015612d6657600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16634b104eff856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015612de257600080fd5b505af1158015612df6573d6000803e3d6000fd5b5050505050505050565b60136020528060005260406000206000915090508060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6012602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900460ff16905083565b600581565b600a8160028110612eb657600080fd5b016000915090505481565b6000612f54338a8a8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508888613ab9565b63bc197c8160e01b905098975050505050505050565b612f726126f2565b612fe4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b612ff66126f2565b613068576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6015805490506001850111156130a65760158390806001815401808255809150506001900390600052602060002001600090919091909150556130c3565b82601585815481106130b457fe5b90600052602060002001819055505b604051806060016040528085815260200183815260200182815250601660008581526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050507f09b0b6997085337b0174d4d379dded7be3b9cd8fb31c3ff91d9a1a1ac3bf0b3e848484846040518085815260200184815260200183815260200182815260200194505050505060405180910390a150505050565b60006012600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008381526020019081526020016000205490509392505050565b6131df6126f2565b613251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000604051806102400160405280600181526020016002815260200160038152602001600481526020016005815260200160068152602001600781526020016008815260200160098152602001600a8152602001600b8152602001600c8152602001600d8152602001600e8152602001600f81526020016010815260200160118152602001601281525090506000604051806102400160405280600181526020016002815260200160058152602001600a8152602001601e815260200160648152602001600181526020016002815260200160058152602001600a8152602001601e815260200160648152602001600a815260200160148152602001603281526020016064815260200161012c81526020016103e881525090506000604051806102400160405280600181526020016002815260200160058152602001600a8152602001601e815260200160648152602001600a815260200160148152602001603281526020016064815260200161012c81526020016103e88152602001600181526020016002815260200160058152602001600a8152602001601e815260200160648152509050613404838383613c25565b505050565b601760205281600052604060002081600a811061342557600080fd5b016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600167ffffffffffffffff8111801561346957600080fd5b506040519080825280602002602001820160405280156134985781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff811180156134b557600080fd5b506040519080825280602002602001820160405280156134e45781602001602082028036833780820191505090505b50905086816000815181106134f557fe5b602002602001018181525050858260008151811061350f57fe5b60200260200101818152505061352a338a8a84868a8a613ab9565b63f23a6e6160e01b925050509695505050505050565b6135486126f2565b6135ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6135c381613c80565b50565b60166020528060005260406000206000915090508060000154908060010154908060020154905083565b6135f8615183565b6136006151ea565b6136098361172f565b915060005b600a8160ff16101561365c57613637838260ff16600a811061362c57fe5b602002015185613983565b828260ff16600a811061364657fe5b602002018181525050808060010191505061360e565b50915091565b61366a6151c8565b60006012600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006136ca8587611689565b905060005b60028160ff1610156138e457600061371b606461370d604689600001518660ff16600281106136fa57fe5b60200201516139e190919063ffffffff16565b613a6790919063ffffffff16565b9050600061375d606461374f601e8a600001518760ff166002811061373c57fe5b60200201516139e190919063ffffffff16565b613a6790919063ffffffff16565b90506137c66137a4600089606001511461377b57886060015161377f565b600f545b6137968860010154866139e190919063ffffffff16565b613a6790919063ffffffff16565b878560ff16600281106137b357fe5b60200201516138fb90919063ffffffff16565b868460ff16600281106137d557fe5b602002018181525050600a8410156138595761384061381e601e613810600088600a81106137ff57fe5b0154856139e190919063ffffffff16565b613a6790919063ffffffff16565b878560ff166002811061382d57fe5b60200201516138fb90919063ffffffff16565b868460ff166002811061384f57fe5b6020020181815250505b8460020160009054906101000a900460ff16156138d5576138bc61389a601e61388c6005856139e190919063ffffffff16565b613a6790919063ffffffff16565b878560ff16600281106138a957fe5b60200201516138fb90919063ffffffff16565b868460ff16600281106138cb57fe5b6020020181815250505b505080806001019150506136cf565b5050509392505050565b6000601580549050905090565b600080828401905083811015613979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006012600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905092915050565b6000808314156139f45760009050613a61565b6000828402905082848281613a0557fe5b0414613a5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153306021913960400191505060405180910390fd5b809150505b92915050565b6000613aa983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613dc6565b905092915050565b600033905090565b8673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b613b8586613e8c565b15613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061530e6022913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613c1c57613c1a858585613ed7565b505b50505050505050565b60005b6012811015613c7a57613c6d81858360128110613c4157fe5b6020020151858460128110613c5257fe5b6020020151858560128110613c6357fe5b6020020151612fee565b8080600101915050613c28565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806152e86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613e72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e37578082015181840152602081019050613e1c565b50505050905090810190601f168015613e645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613e7e57fe5b049050809150509392505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015613ece5750808214155b92505050919050565b600080601360006011548152602001908152602001600020905060008451118015613f03575082518451145b613f75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6572726f7200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600080600060126000601154815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8851811015614136576000601660008b8481518110613ff157fe5b602002602001015181526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905061406e61405f8a848151811061404457fe5b602002602001015183602001516139e190919063ffffffff16565b876138fb90919063ffffffff16565b95506140ac61409d8a848151811061408257fe5b602002602001015183604001516139e190919063ffffffff16565b866138fb90919063ffffffff16565b94506140fc8983815181106140bd57fe5b60200260200101518560030160008d86815181106140d757fe5b60200260200101518152602001908152602001600020546138fb90919063ffffffff16565b8460030160008c858151811061410e57fe5b6020026020010151815260200190815260200160002081905550508080600101915050613fd6565b50828411156141475782905061414b565b8390505b60006141648587600201546138fb90919063ffffffff16565b9050600f546141808388600201546138fb90919063ffffffff16565b11156141a7578560020154600f541161419a5760006141a4565b8560020154600f54035b91505b6141be8284600101546138fb90919063ffffffff16565b83600101819055506141dd8587600201546138fb90919063ffffffff16565b86600201819055506141fc8287600301546138fb90919063ffffffff16565b866003018190555061420d8a61450f565b600f548110614289578973ffffffffffffffffffffffffffffffffffffffff167f15b934b983cb0cdb23fefd8cbdfc5c3ef4435ca0a853682c9e3cbbcff9a0cc656011548787866040518085815260200184815260200183815260200182815260200194505050505060405180910390a26142888a87614677565b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d6306142d06126c8565b8c8c6040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b83811015614364578082015181840152602081019050614349565b50505050905001848103835285818151815260200191508051906020019060200280838360005b838110156143a657808201518184015260208101905061438b565b50505050905001848103825260078152602001807f7375636365737300000000000000000000000000000000000000000000000000815250602001975050505050505050600060405180830381600087803b15801561440457600080fd5b505af1158015614418573d6000803e3d6000fd5b505050506011548a73ffffffffffffffffffffffffffffffffffffffff167f3fbedbb5bdc009e52f382c3fe16d5a77fdd475e47874a7cf63f2e09f8b5ab2f48b8b86604051808060200180602001848152602001838103835286818151815260200191508051906020019060200280838360005b838110156144a757808201518184015260208101905061448c565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156144e95780820151818401526020810190506144ce565b505050509050019550505050505060405180910390a38196505050505050509392505050565b6000601760006011548152602001908152602001600020600a806020026040519081016040528092919082600a8015614593576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614549575b505050505090506000806145a78385614988565b91509150600a8214614671576145bc84614a69565b81101561460857838383600a81106145d057fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b8260176000601154815260200190815260200160002090600a61462c92919061520d565b508373ffffffffffffffffffffffffffffffffffffffff167fa75e450368aff33be855cacd350dc10a172480930245cd2063d2961f865fa4ec60405160405180910390a25b50505050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060806040518083038186803b15801561470357600080fd5b505afa158015614717573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561473c57600080fd5b81019080919082604001919050509150915060005b60028160ff1610156147bd576147b0838260ff166002811061476f57fe5b6020020151600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848460ff16600281106147a657fe5b6020020151614a7e565b8080600101915050614751565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663143ad356826040518263ffffffff1660e01b81526004018082600260200280838360005b8381101561483757808201518184015260208101905061481c565b50505050905001915050602060405180830381600087803b15801561485b57600080fd5b505af115801561486f573d6000803e3d6000fd5b505050506040513d602081101561488557600080fd5b81019080805190602001909291905050505080836000019060026148aa92919061528a565b50838360050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f548360040181905550600160126000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555061497083614c60565b60116000815480929190600101919050555050505050565b6000806149a5846000600a811061499b57fe5b6020020151614a69565b905060005b600a8160ff161015614a60578373ffffffffffffffffffffffffffffffffffffffff16858260ff16600a81106149dc57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415614a0b57600a60009250925050614a62565b81614a28868360ff16600a8110614a1e57fe5b6020020151614a69565b1015614a5357614a4a858260ff16600a8110614a4057fe5b6020020151614a69565b91508060ff1692505b80806001019150506149aa565b505b9250929050565b6000614a7782601154613983565b9050919050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663095ea7b38585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310614b405780518252602082019150602081019050602083039250614b1d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ba2576040519150601f19603f3d011682016040523d82523d6000602084013e614ba7565b606091505b5091509150818015614be75750600081511480614be65750808060200190516020811015614bd457600080fd5b81019080805190602001909291905050505b5b614c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5472616e7366657248656c7065723a20415050524f56455f4641494c4544000081525060200191505060405180910390fd5b5050505050565b614c686151c8565b6000601760006011548152602001908152602001600020600a806020026040519081016040528092919082600a8015614cec576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614ca2575b50505050509050600080600090505b600a811015614d5f57600073ffffffffffffffffffffffffffffffffffffffff168382600a8110614d2857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415614d525781806001019250505b8080600101915050614cfb565b50600080600090505b82811015614d9057600081600a8110614d7d57fe5b0154820191508080600101915050614d68565b5060005b6002811015614eb2576000614e166064614e08600f54614dfa614dc88c600301548d6004015461503490919063ffffffff16565b614dec60468e6000018a60028110614ddc57fe5b01546139e190919063ffffffff16565b6139e190919063ffffffff16565b613a6790919063ffffffff16565b613a6790919063ffffffff16565b90506000614e896064614e7b601e614e6d614e3b89601961503490919063ffffffff16565b614e5f601e8f6000018b60028110614e4f57fe5b01546139e190919063ffffffff16565b6139e190919063ffffffff16565b613a6790919063ffffffff16565b613a6790919063ffffffff16565b9050808201878460028110614e9a57fe5b60200201818152505050508080600101915050614d94565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f020d118601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182600260200280838360005b83811015614f6b578082015181840152602081019050614f50565b5050505090500192505050602060405180830381600087803b158015614f9057600080fd5b505af1158015614fa4573d6000803e3d6000fd5b505050506040513d6020811015614fba57600080fd5b8101908080519060200190929190505050507ff93fcc94135e958bbb9a392bcd0348c8fcecd432ddc7a1ddea6f953b39e8918f84600060028110614ffa57fe5b60200201518560016002811061500c57fe5b6020020151604051808381526020018281526020019250505060405180910390a15050505050565b600061507683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061507e565b905092915050565b600083831115829061512b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150f05780820151818401526020810190506150d5565b50505050905090810190601f16801561511d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b604051806101000160405280600890602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b6040518060a00160405280600590602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b82600a8101928215615279579160200282015b828111156152785782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190615220565b5b50905061528691906152ca565b5090565b82600281019282156152b9579160200282015b828111156152b857825182559160200191906001019061529d565b5b5090506152c691906152ca565b5090565b5b808211156152e35760008160009055506001016152cb565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f6e747261637420696e766f636174696f6e206973206e6f7420616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212201d5f7c5c44ed474bb639533ab73932ace633c8b99ca08901f8d88be5792d464964736f6c63430007060033

Deployed Bytecode Sourcemap

3349:15288:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2671:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10580:1331;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3173:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13745:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4686:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15115:510;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3638:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4786:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9713:565;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3712:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8578:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18076:461;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4382:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8113:450;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;993:137:4;;;:::i;:::-;;3122:40:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17428:638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;688:77:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;890:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7493:610:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3671:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6653:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4619:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4516:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3250:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3307:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2333:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;6946:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5993:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11923:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5564:393;;;:::i;:::-;;4911:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1898:429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1141:107:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4867:33:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10293:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2671:244;2750:4;2789:10;2774:25;;:11;:25;;;;:83;;;;2847:10;2832:25;;:11;:25;;;;2774:83;2766:91;;2671:244;;;:::o;10580:1331::-;10667:23;;:::i;:::-;10691:21;;:::i;:::-;10713:24;10748:21;10772:7;:17;10780:8;10772:17;;;;;;;;;;;:30;10790:11;10772:30;;;;;;;;;;;;;;;10748:54;;10823:10;10834:18;10853;10875:4;;;;;;;;;;;:10;;;10886:11;10875:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10822:76;;;;;;10919:10;10908:5;10914:1;10908:8;;;;;;;;;;:21;;;;;10950:6;:15;;;10939:5;10945:1;10939:8;;;;;;;;;;:26;;;;;10985:16;11004:7;:17;11012:8;11004:17;;;;;;;;;;;10985:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11054:7;;11044:8;:17;11041:144;;;11078:26;11108:4;;;;;;;;;;;:14;;;11131:4;11108:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11076:61;;;11166:8;11151:4;:12;;:23;;;;11041:144;;11204:25;11232:42;11248:8;11257:11;11269:4;11232:15;:42::i;:::-;11204:70;;11305:7;11313:1;11305:10;;;;;;;;;;;11294:5;11300:1;11294:8;;;;;;;;;;:21;;;;;11336:7;11344:1;11336:10;;;;;;;;;;;11325:5;11331:1;11325:8;;;;;;;;;;:21;;;;;11367:2;11356:5;11362:1;11356:8;;;;;;;;;;:13;;;;;11390:10;11379:5;11385:1;11379:8;;;;;;;;;;:21;;;;;11454:1;11421:32;11432:11;11444:8;11421:10;:32::i;:::-;:34;11410:5;11416:1;11410:8;;;;;;;;;;:45;;;;;11487:6;:17;;;;;;;;;;;;11475:6;11482:1;11475:9;;;;;;;;;;:29;;;;;;;;;;;11526:6;:16;;;;;;;;;;;;11514:6;11521:1;11514:9;;;;;;;;;;:28;;;;;;;;;;;11564:4;;;;;;;;;;;:15;;;11580:11;11564:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11552:6;11559:1;11552:9;;;;;;;;;;:40;;;;;;;;;;;11636:7;:5;:7::i;:::-;11622:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11612:32;;11654:13;11681:9;11692:1;11681:12;;11677:192;11696:7;:5;:7::i;:::-;11694:1;:9;11677:192;;;11722:14;11739:47;11753:8;11762:11;11774:8;11783:1;11774:11;;;;;;;;;;;;;;;;11739:13;:47::i;:::-;11722:64;;11813:6;11800:7;11808:1;11800:10;;;;;;;;;;;;;:19;;;;;11841:17;11851:6;11841:5;:9;;:17;;;;:::i;:::-;11833:25;;11677:192;11704:3;;;;;;;11677:192;;;;11889:5;11878;11884:1;11878:8;;;;;;;;;;:16;;;;;10580:1331;;;;;;;;;;;;:::o;3173:66::-;;;;;;;;;;;;;;;;;;;;:::o;13745:381::-;13823:7;13841:30;13874:18;13883:8;13874;:18::i;:::-;13841:51;;13902:15;13920:2;13902:20;;13936:7;13932:164;13949:18;13947:1;:20;;;13932:164;;;14004:11;14016:1;14004:14;;;;;;;;;;;;;13989:29;;:11;:29;;;13986:100;;;14047:1;14037:11;;;;14066:5;;13986:100;13968:3;;;;;;;13932:164;;;;14112:7;14105:14;;;;13745:381;;;;:::o;4686:44::-;;;;;;;;;;;;;;;;;:::o;15115:510::-;15171:26;;:::i;:::-;15218:4;:14;15223:8;15218:14;;;;;;;;;;;15208:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15251:11;15276:7;15286:1;15276:11;;15272:323;15290:2;15288:1;:4;;;15272:323;;;15315:7;15311:274;15332:1;15329:2;:4;15327:6;;:1;:6;;;15311:274;;;15392:34;15404:7;15414:1;15412;:3;15404:12;;;;;;;;;;;;;15417:8;15392:11;:34::i;:::-;15359:32;15371:7;15379:1;15371:10;;;;;;;;;;;;;15382:8;15359:11;:32::i;:::-;:67;15356:215;;;15455:7;15463:1;15455:10;;;;;;;;;;;;;15449:16;;15500:7;15510:1;15508;:3;15500:12;;;;;;;;;;;;;15487:7;15495:1;15487:10;;;;;;;;;;;;:25;;;;;;;;;;;15549:3;15534:7;15544:1;15542;:3;15534:12;;;;;;;;;;;;:18;;;;;;;;;;;15356:215;15334:3;;;;;;;15311:274;;;;15293:3;;;;;;;15272:323;;;;15604:14;15115:510;;;:::o;3638:22::-;;;;;;;;;;;;;:::o;4786:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9713:565::-;9778:23;;:::i;:::-;9802:21;9844:16;9863:7;:17;9871:8;9863:17;;;;;;;;;;;9844:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9903:7;;9893:8;:17;9890:144;;;9927:26;9957:4;;;;;;;;;;;:14;;;9980:4;9957:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9925:61;;;10015:8;10000:4;:12;;:23;;;;9890:144;;10063:4;:12;;;10076:1;10063:15;;;;;;;;;;;10052:5;10058:1;10052:8;;;;;;;;;;:26;;;;;10099:4;:12;;;10112:1;10099:15;;;;;;;;;;;10088:5;10094:1;10088:8;;;;;;;;;;:26;;;;;10135:4;:13;;;10124:5;10130:1;10124:8;;;;;;;;;;:24;;;;;10169:4;:11;;;10158:5;10164:1;10158:8;;;;;;;;;;:22;;;;;3156:6;10218:1;10202:4;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;10201:27;10190:5;10196:1;10190:8;;;;;;;;;;:38;;;;;10254:4;:14;;;10238:30;;9713:565;;;;:::o;3712:37::-;;;;:::o;8578:221::-;8661:25;;:::i;:::-;8697:16;8716:7;:17;8724:8;8716:17;;;;;;;;;;;8697:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8750:42;8766:8;8775:11;8787:4;8750:15;:42::i;:::-;8743:49;;;8578:221;;;;:::o;18076:461::-;18119:23;18143;18177:14;18194:7;:5;:7::i;:::-;18177:24;;18234:7;:5;:7::i;:::-;18220:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18211:31;;18256:7;18252:177;18270:7;:5;:7::i;:::-;18268:1;:9;;;18252:177;;;18296:13;18312:9;;;;;;;;;;;:19;;;18332:6;18339:8;18348:1;18339:11;;;;;;;;;;;;;;;;;;18312:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18296:55;;18377:5;18365:6;18372:1;18365:9;;;;;;;;;;;;;;;:17;;;;;18413:5;18396:22;;;;18252:177;18278:3;;;;;;;18252:177;;;;18445:7;18441:81;18459:7;:5;:7::i;:::-;18457:1;:9;;;18441:81;;;18502:6;18509:1;18502:9;;;;;;;;;;;;;;;;18485:26;;;;18467:3;;;;;;;18441:81;;;;18076:461;;;:::o;4382:22::-;;;;:::o;8113:450::-;8188:7;:17;8196:8;8188:17;;;;;;;;;;;:29;8206:10;8188:29;;;;;;;;;;;;;;;:40;;;;;;;;;;;;8187:41;8179:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8270:7;;8261:8;:16;8253:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8314:25;8344:36;8360:8;8369:10;8344:15;:36::i;:::-;8313:67;;8433:4;8390:7;:17;8398:8;8390:17;;;;;;;;;;;:29;8408:10;8390:29;;;;;;;;;;;;;;;:40;;;:47;;;;;;;;;;;;;;;;;;8454:4;;;;;;;;;;;:10;;;8465;8476:7;8454:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8531:8;8520:10;8506:42;;;8540:7;8506:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8113:450;;:::o;993:137:4:-;815:9;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:1:::1;1054:40;;1075:6;;;;;;;;;;;1054:40;;;;;;;;;;;;1121:1;1104:6;;:19;;;;;;;;;;;;;;;;;;993:137::o:0;3122:40:3:-;3156:6;3122:40;:::o;17428:638::-;17482:16;17499:23;17523:11;17535:23;17559:16;17598:18;17622:4;;;;;;;;;;;:10;;;17633:11;17622:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17595:50;;;;17691:13;:11;:13::i;:::-;17664:40;;;;;;;;17716:24;17743:11;:28;17755:4;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17743:28;;;;;;;;;;;;17716:55;;17802:1;17784:16;:19;17781:82;;;17837:15;17818:34;;17781:82;17872:19;17894:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17872:40;;17933:49;17970:11;17933:32;17948:16;17933:10;:14;;:32;;;;:::i;:::-;:36;;:49;;;;:::i;:::-;17922:60;;18009:8;18018:6;18025:7;:5;:7::i;:::-;18033:15;18049:8;18001:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17428:638;;;;;;;:::o;688:77:4:-;726:7;752:6;;;;;;;;;;;745:13;;688:77;:::o;890:92::-;930:4;969:6;;;;;;;;;;;953:22;;:12;:10;:12::i;:::-;:22;;;946:29;;890:92;:::o;7493:610:3:-;7614:4;;;;;;;;;;;:15;;;7630:10;7614:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7613:28;7605:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7677:23;7701:11;7713:23;7737:16;7757:15;7761:10;7757:3;:15::i;:::-;7675:97;;;;;;;;;7833:1;7803:11;:28;7815:4;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7803:28;;;;;;;;;;;;:31;7800:116;;;7885:15;7854:11;:28;7866:4;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7854:28;;;;;;;;;;;:46;;;;7800:116;7934:4;;;;;;;;;;;:9;;;7944:10;7963:4;7969:5;7975:6;7982:7;7990:1;7992;7994;7934:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7493:610;;;;;;;;;;:::o;3671:25::-;;;;;;;;;;;;;:::o;6653:278::-;815:9:4;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6740:24:3::1;6769:4;;;;;;;;;;;:14;;;6792:1;6769:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;6739:56;;;6805:12;6836:7;6820:32;;;6853:6;6860:1;6853:9;;;;;;;;;;;6863:6;6870:1;6863:9;;;;;;;;;;;6820:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;6805:68;;6896:4;6883:30;;;6914:9;6883:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;871:1:4;;6653:278:3::0;;:::o;4619:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4516:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3250:46::-;3295:1;3250:46;:::o;3307:35::-;;;;;;;;;;;;;;;;;;;;:::o;2333:300::-;2500:6;2518:63;2535:10;2546:9;2556:5;2562:4;;2518:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:7;;2518:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2575:5;;2518:16;:63::i;:::-;1752:10;2598:28;;2591:35;;2333:300;;;;;;;;;;:::o;6946:98::-;815:9:4;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7026:11:3::1;7013:10;:24;;;;6946:98:::0;:::o;5993:372::-;815:9:4;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6103:8:3::1;:15;;;;6101:1;6098:2;:4;:20;6095:158;;;6133:8;6147:2;6133:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6095:158;;;6240:2;6225:8;6234:2;6225:12;;;;;;;;;;;;;;;:17;;;;6095:158;6282:23;;;;;;;;6286:2;6282:23;;;;6289:9;6282:23;;;;6299:5;6282:23;;::::0;6271:4:::1;:8;6276:2;6271:8;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;6320:38;6333:2;6337;6341:9;6352:5;6320:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5993:372:::0;;;;:::o;11923:174::-;12019:7;12044;:17;12052:8;12044:17;;;;;;;;;;;:30;12062:11;12044:30;;;;;;;;;;;;;;;:38;;:46;12083:6;12044:46;;;;;;;;;;;;12037:53;;11923:174;;;;;:::o;5564:393::-;815:9:4;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5607:23:3::1;:81;;;;;;;;5642:1;5607:81;;;;5645:1;5607:81;;;;5647:1;5607:81;;;;5649:1;5607:81;;;;5651:1;5607:81;;;;5653:1;5607:81;;;;5655:1;5607:81;;;;5657:1;5607:81;;;;5659:1;5607:81;;;;5661:2;5607:81;;;;5664:2;5607:81;;;;5667:2;5607:81;;;;5670:2;5607:81;;;;5673:2;5607:81;;;;5676:2;5607:81;;;;5679:2;5607:81;;;;5682:2;5607:81;;;;5685:2;5607:81;;::::0;::::1;;5698:31;:98;;;;;;;;5741:1;5698:98;;;;5744:1;5698:98;;;;5746:1;5698:98;;;;5748:2;5698:98;;;;5751:2;5698:98;;;;5754:3;5698:98;;;;5758:1;5698:98;;;;5760:1;5698:98;;;;5762:1;5698:98;;;;5764:2;5698:98;;;;5767:2;5698:98;;;;5770:3;5698:98;;;;5774:2;5698:98;;;;5777:2;5698:98;;;;5780:2;5698:98;;;;5783:3;5698:98;;;;5787:3;5698:98;;;;5791:4;5698:98;;::::0;::::1;;5806:27;:94;;;;;;;;5845:1;5806:94;;;;5848:1;5806:94;;;;5850:1;5806:94;;;;5852:2;5806:94;;;;5855:2;5806:94;;;;5858:3;5806:94;;;;5862:2;5806:94;;;;5865:2;5806:94;;;;5868:2;5806:94;;;;5871:3;5806:94;;;;5875:3;5806:94;;;;5879:4;5806:94;;;;5884:1;5806:94;;;;5886:1;5806:94;;;;5888:1;5806:94;;;;5890:2;5806:94;;;;5893:2;5806:94;;;;5896:3;5806:94;;::::0;::::1;;5910:40;5923:4;5928:12;5941:8;5910:12;:40::i;:::-;871:1:4;;;5564:393:3:o:0;4911:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1898:429::-;2036:6;2054:24;2095:1;2081:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2054:43;;2107:21;2145:1;2131:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2107:40;;2167:3;2157:4;2162:1;2157:7;;;;;;;;;;;;;:13;;;;;2193:6;2180:7;2188:1;2180:10;;;;;;;;;;;;;:19;;;;;2218:63;2235:10;2246:9;2256:5;2262:4;2267:7;2275:5;;2218:16;:63::i;:::-;1680:10;2298:22;;2291:29;;;;1898:429;;;;;;;;:::o;1141:107:4:-;815:9;:7;:9::i;:::-;807:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1213:28:::1;1232:8;1213:18;:28::i;:::-;1141:107:::0;:::o;4867:33:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10293:272::-;10349:26;;:::i;:::-;10376:27;;:::i;:::-;10424:18;10433:8;10424;:18::i;:::-;10414:28;;10456:7;10452:107;10469:14;10467:1;:16;;;10452:107;;;10516:32;10528:7;10536:1;10528:10;;;;;;;;;;;;;10539:8;10516:11;:32::i;:::-;10502:8;10511:1;10502:11;;;;;;;;;;;;:46;;;;;10484:3;;;;;;;10452:107;;;;10293:272;;;:::o;8809:898::-;8911:25;;:::i;:::-;8947:21;8971:7;:17;8979:8;8971:17;;;;;;;;;;;:30;8989:11;8971:30;;;;;;;;;;;;;;;8947:54;;9020:15;9038:32;9049:11;9061:8;9038:10;:32::i;:::-;9020:50;;9085:7;9081:620;9099:1;9097;:3;;;9081:620;;;9119:18;9140:32;9168:3;9140:23;9160:2;9140:4;:12;;;9153:1;9140:15;;;;;;;;;;;;;:19;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;9119:53;;9186:19;9208:32;9236:3;9208:23;9228:2;9208:4;:12;;;9221:1;9208:15;;;;;;;;;;;;;:19;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;9186:54;;9280:102;9295:86;9350:1;9331:4;:17;;;:20;:49;;9363:4;:17;;;9331:49;;;9352:10;;9331:49;9295:31;9310:6;:15;;;9295:10;:14;;:31;;;;:::i;:::-;:35;;:86;;;;:::i;:::-;9280:7;9288:1;9280:10;;;;;;;;;;;;;:14;;:102;;;;:::i;:::-;9267:7;9275:1;9267:10;;;;;;;;;;;;:115;;;;;9420:2;9412:7;:10;9409:131;;;9454:71;9469:55;9521:2;9469:47;9485:21;9507:7;9485:30;;;;;;;;;9469:11;:15;;:47;;;;:::i;:::-;:51;;:55;;;;:::i;:::-;9454:7;9462:1;9454:10;;;;;;;;;;;;;:14;;:71;;;;:::i;:::-;9441:7;9449:1;9441:10;;;;;;;;;;;;:84;;;;;9409:131;9569:6;:16;;;;;;;;;;;;9566:125;;;9617:59;9632:43;9672:2;9632:35;3295:1;9632:11;:15;;:35;;;;:::i;:::-;:39;;:43;;;;:::i;:::-;9617:7;9625:1;9617:10;;;;;;;;;;;;;:14;;:59;;;;:::i;:::-;9604:7;9612:1;9604:10;;;;;;;;;;;;:72;;;;;9566:125;9081:620;;9101:3;;;;;;;9081:620;;;;8809:898;;;;;;;:::o;18547:88::-;18587:7;18613:8;:15;;;;18606:22;;18547:88;:::o;95:176:5:-;153:7;172:9;188:1;184;:5;172:17;;212:1;207;:6;;199:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;263:1;256:8;;;95:176;;;;:::o;15773:152:3:-;15854:7;15879;:17;15887:8;15879:17;;;;;;;;;;;:30;15897:11;15879:30;;;;;;;;;;;;;;;:39;;;15872:46;;15773:152;;;;:::o;625:268:5:-;683:7;738:1;733;:6;729:45;;;762:1;755:8;;;;729:45;784:9;800:1;796;:5;784:17;;828:1;823;819;:5;;;;;;:10;811:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:1;878:8;;;625:268;;;;;:::o;904:130::-;962:7;988:39;992:1;995;988:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;981:46;;904:130;;;;:::o;154:96:4:-;199:15;233:10;226:17;;154:96;:::o;7059:423:3:-;7274:9;7254:29;;7262:9;;;;;;;;;;;7254:29;;;7246:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7317:29;7336:9;7317:18;:29::i;:::-;7316:30;7308:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7420:3;7405:19;;:5;:19;;;7402:74;;7439:26;7446:5;7452:4;7457:7;7439:6;:26::i;:::-;;7402:74;7059:423;;;;;;;:::o;6410:233::-;6536:9;6532:105;6550:10;6548:1;:12;6532:105;;;6579:47;6591:1;6593:3;6597:1;6593:6;;;;;;;;;;;6600:11;6612:1;6600:14;;;;;;;;;;;6615:7;6623:1;6615:10;;;;;;;;;;;6579:11;:47::i;:::-;6561:3;;;;;;;6532:105;;;;6410:233;;;:::o;1259:225:4:-;1352:1;1332:22;;:8;:22;;;;1324:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:8;1412:38;;1433:6;;;;;;;;;;;1412:38;;;;;;;;;;;;1469:8;1460:6;;:17;;;;;;;;;;;;;;;;;;1259:225;:::o;1045:204:5:-;1131:7;1171:1;1167;:5;1174:12;1159:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1197:9;1213:1;1209;:5;;;;;;1197:17;;1241:1;1234:8;;;1045:204;;;;;:::o;529:797:0:-;589:4;1034:16;1060:19;1082:66;1060:88;;;;1249:7;1237:20;1225:32;;1288:3;1276:15;;:8;:15;;:42;;;;;1307:11;1295:8;:23;;1276:42;1268:51;;;;529:797;;;:::o;12117:1618:3:-;12217:7;12235:17;12255:7;:16;12263:7;;12255:16;;;;;;;;;;;12235:36;;12300:1;12289:3;:10;:12;:42;;;;;12317:7;:14;12303:3;:10;:28;12289:42;12281:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12359:20;12389:16;12415:21;12439:7;:16;12447:7;;12439:16;;;;;;;;;;;:29;12456:11;12439:29;;;;;;;;;;;;;;;12415:53;;12478:14;12506:9;12518:1;12506:13;;12502:306;12522:3;:10;12520:1;:12;12502:306;;;12551:14;12568:4;:12;12573:3;12577:1;12573:6;;;;;;;;;;;;;;12568:12;;;;;;;;;;;12551:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12609:47;12626:29;12644:7;12652:1;12644:10;;;;;;;;;;;;;;12626:3;:13;;;:17;;:29;;;;:::i;:::-;12609:12;:16;;:47;;;;:::i;:::-;12594:62;;12681:39;12694:25;12708:7;12716:1;12708:10;;;;;;;;;;;;;;12694:3;:9;;;:13;;:25;;;;:::i;:::-;12681:8;:12;;:39;;;;:::i;:::-;12670:50;;12759:38;12786:7;12794:1;12786:10;;;;;;;;;;;;;;12759:6;:14;;:22;12774:3;12778:1;12774:6;;;;;;;;;;;;;;12759:22;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;12734:6;:14;;:22;12749:3;12753:1;12749:6;;;;;;;;;;;;;;12734:22;;;;;;;;;;;:63;;;;12502:306;12533:3;;;;;;;12502:306;;;;12842:8;12829:12;:21;12826:117;;;12874:8;12865:17;;12826:117;;;12920:12;12911:21;;12826:117;12961:22;12986:31;13004:12;12986:4;:13;;;:17;;:31;;;;:::i;:::-;12961:56;;13065:10;;13039:25;13057:6;13039:4;:13;;;:17;;:25;;;;:::i;:::-;:36;13036:125;;;13110:4;:13;;;13099:10;;:24;:51;;13149:1;13099:51;;;13135:4;:13;;;13124:10;;:24;13099:51;13090:60;;13036:125;13197:27;13217:6;13197;:15;;;:19;;:27;;;;:::i;:::-;13179:6;:15;;:45;;;;13250:31;13268:12;13250:4;:13;;;:17;;:31;;;;:::i;:::-;13234:4;:13;;:47;;;;13305:23;13321:6;13305:4;:11;;;:15;;:23;;;;:::i;:::-;13291:4;:11;;:37;;;;13338:23;13349:11;13338:10;:23::i;:::-;13399:10;;13383:14;:26;13380:161;;13440:11;13430:59;;;13452:7;;13460:12;13473:8;13482:6;13430:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13503:27;13513:11;13525:4;13503:9;:27::i;:::-;13380:161;13559:9;;;;;;;;;;;:31;;;13599:4;13605:7;:5;:7::i;:::-;13613:3;13617:7;13559:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13678:7;;13666:11;13659:46;;;13686:3;13690:7;13698:6;13659:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13722:6;13715:13;;;;;;;;12117:1618;;;;;:::o;14672:433::-;14732:30;14765:4;:13;14770:7;;14765:13;;;;;;;;;;;14732:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14798:10;14809:14;14827:31;14834:11;14846;14827:6;:31::i;:::-;14797:61;;;;14875:18;14871:2;:22;14868:231;;14919:24;14931:11;14919;:24::i;:::-;14911:6;:32;14908:98;;;14980:11;14962;14974:2;14962:15;;;;;;;;;;:29;;;;;;;;;;;14908:98;15035:11;15019:4;:13;15024:7;;15019:13;;;;;;;;;;;:27;;;;;;;:::i;:::-;;15076:11;15065:23;;;;;;;;;;;;14868:231;14672:433;;;;:::o;15935:583::-;16021:24;16046:25;16075:4;;;;;;;;;;;:14;;;16098:4;16075:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16020:84;;;;16127:7;16123:120;16137:14;16135:1;:16;;;16123:120;;;16170:62;16197:6;16204:1;16197:9;;;;;;;;;;;;;16215:4;;;;;;;;;;;16221:7;16229:1;16221:10;;;;;;;;;;;;;16170:26;:62::i;:::-;16152:3;;;;;;;16123:120;;;;16252:4;;;;;;;;;;;:12;;;16265:7;16252:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16298:7;16283:4;:12;;:22;;;;;;;:::i;:::-;;16333:11;16316:4;:14;;;:28;;;;;;;;;;;;;;;;;;16374:10;;16354:4;:17;;:30;;;;16436:4;16394:7;:16;16402:7;;16394:16;;;;;;;;;;;:29;16411:11;16394:29;;;;;;;;;;;;;;;:39;;;:46;;;;;;;;;;;;;;;;;;16463:18;16476:4;16463:12;:18::i;:::-;16491:7;;:9;;;;;;;;;;;;;15935:583;;;;:::o;14136:526::-;14227:10;14238:14;14281:27;14293:11;14305:1;14293:14;;;;;;;;;;;14281:11;:27::i;:::-;14272:36;;14322:7;14318:301;14335:18;14333:1;:20;;;14318:301;;;14391:11;14375:27;;:11;14387:1;14375:14;;;;;;;;;;;;;:27;;;14372:93;;;14429:18;14448:1;14421:29;;;;;;;14372:93;14509:6;14481:27;14493:11;14505:1;14493:14;;;;;;;;;;;;;14481:11;:27::i;:::-;:34;14478:131;;;14543:27;14555:11;14567:1;14555:14;;;;;;;;;;;;;14543:11;:27::i;:::-;14534:36;;14593:1;14588:6;;;;14478:131;14354:3;;;;;;;14318:301;;;;14136:526;;;;;;:::o;15635:128::-;15699:7;15724:32;15736:11;15748:7;;15724:11;:32::i;:::-;15717:39;;15635:128;;;:::o;18780:354::-;18925:12;18939:17;18960:5;:10;;18994;19006:2;19010:5;18971:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18960:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18924:93;;;;19035:7;:57;;;;;19062:1;19047:4;:11;:16;:44;;;;19078:4;19067:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19047:44;19035:57;19027:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18780:354;;;;;:::o;16551:857::-;16616:25;;:::i;:::-;16651:30;16684:4;:13;16689:7;;16684:13;;;;;;;;;;;16651:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16707:10;16731:6;16740:1;16731:10;;16727:136;16744:18;16742:1;:20;16727:136;;;16809:1;16785:26;;:11;16797:1;16785:14;;;;;;;;;;;:26;;;16782:71;;;16831:7;;;;;;;16782:71;16763:3;;;;;;;16727:136;;;;16881:9;16904:6;16913:1;16904:10;;16900:82;16917:5;16915:1;:7;16900:82;;;16947:21;16969:1;16947:24;;;;;;;;;16941:30;;;;16923:3;;;;;;;16900:82;;;;17004:9;17000:295;17020:14;17018:1;:16;17000:295;;;17053:10;17066:88;17150:3;17066:79;17134:10;;17066:63;17094:34;17116:4;:11;;;17094:4;:17;;;:21;;:34;;;;:::i;:::-;17066:23;17086:2;17066:4;:12;;17079:1;17066:15;;;;;;;;;:19;;:23;;;;:::i;:::-;:27;;:63;;;;:::i;:::-;:67;;:79;;;;:::i;:::-;:83;;:88;;;;:::i;:::-;17053:101;;17168:9;17180:67;17243:3;17180:58;17235:2;17180:50;17208:21;17224:4;17216:2;17208:15;;:21;;;;:::i;:::-;17180:23;17200:2;17180:4;:12;;17193:1;17180:15;;;;;;;;;:19;;:23;;;;:::i;:::-;:27;;:50;;;;:::i;:::-;:54;;:58;;;;:::i;:::-;:62;;:67;;;;:::i;:::-;17168:79;;17280:4;17274:5;:10;17261:7;17269:1;17261:10;;;;;;;;;;:23;;;;;17000:295;;17035:3;;;;;;;17000:295;;;;17313:4;;;;;;;;;;;:10;;;17324:9;;;;;;;;;;;17334:7;17313:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17366:35;17379:7;17387:1;17379:10;;;;;;;;;;;17390:7;17398:1;17390:10;;;;;;;;;;;17366:35;;;;;;;;;;;;;;;;;;;;;;;;16551:857;;;;;:::o;282:134:5:-;340:7;366:43;370:1;373;366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;359:50;;282:134;;;;:::o;427:187::-;513:7;545:1;540;:6;;548:12;532:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;571:9;587:1;583;:5;571:17;;606:1;599:8;;;427:187;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://1d5f7c5c44ed474bb639533ab73932ace633c8b99ca08901f8d88be5792d4649

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.