ETH Price: $3,577.33 (-2.91%)

Contract

0xDa719fE5443a2EFD5a61Ceb11fcb2a02FCeb8923
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Age:180D
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingPool

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-04-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-03-30
*/

pragma solidity 0.4.25;

/**
 * token contract functions
*/
contract Ierc20 {
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function approveAndCall(address spender, uint tokens, bytes data) external returns (bool success);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    require(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a / b;
    return c;
  }

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

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

  function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
    uint256 c = add(a,m);
    uint256 d = sub(c,1);
    return mul(div(d,m),m);
  }
}

contract Owned {
        address public owner;
        event OwnerChanges(address newOwner);
        
        constructor() public {
            owner = msg.sender;
        }

        modifier onlyOwner {
            require(msg.sender == owner);
            _;
        }

        function transferOwnership(address newOwner) onlyOwner external {
            require(newOwner != address(0), "New owner is the zero address");
            owner = newOwner;
            emit OwnerChanges(newOwner);
        }
}

contract StakingPool is Owned {
    using SafeMath for uint256;
    
    Ierc20 public tswap;
    Ierc20 public rewardToken;
    uint256 poolDuration;
    uint256 totalRewards;
    uint256 rewardsWithdrawn;
    uint256 poolStartTime;
    uint256 poolEndTime;
    uint256 totalStaked;
    // Represents a single stake for a user. A user may have multiple.
    struct Stake {
        uint256 amount;
        uint256 stakingTime;
        uint256 lastWithdrawTime;
    }
    mapping (address => Stake[]) public userStaking;
    
    // Represents total staking of an user
    struct UserTotals {
        uint256 totalStaking;
        uint256 totalStakingTIme;
    }
    mapping (address => UserTotals) public userTotalStaking;
    
    struct Ris3Rewards {
        uint256 totalWithdrawn;
        uint256 lastWithdrawTime;
    }
    mapping(address => Ris3Rewards) public userRewardInfo;
    
    event OwnerSetReward(uint256 amount);
    event Staked(address userAddress, uint256 amount);
    event StakingWithdrawal(address userAddress, uint256 amount);
    event RewardWithdrawal(address userAddress, uint256 amount);
    event PoolDurationChange(uint256 poolDuration);
    
    /**
     * Constrctor function
    */
    constructor() public {
        tswap = Ierc20(0xCC4304A31d09258b0029eA7FE63d032f52e44EFe);
        rewardToken = Ierc20(0x8D717AB5eaC1016b64C2A7fD04720Fd2D27D1B86);
        poolDuration = 720 hours;
    }
    
    //Set pool rewards
    function ownerSetPoolRewards(uint256 _rewardAmount) external onlyOwner {
        require(poolStartTime == 0, "Pool rewards already set");
        require(_rewardAmount > 0, "Cannot create pool with zero amount");
        
        //set total rewards value
        totalRewards = _rewardAmount;
        
        poolStartTime = now;
        poolEndTime = now + poolDuration;
        
        //transfer tokens to contract
        rewardToken.transferFrom(msg.sender, this, _rewardAmount);
        emit OwnerSetReward(_rewardAmount);
    }
    
    //Stake function for users to stake SWAP token
    function stake(uint256 amount) external {
        require(amount > 0, "Cannot stake 0");
        require(now < poolEndTime, "Staking pool is closed"); //staking pool is closed for staking
        
        //add value in staking
        userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.add(amount);
        
        //add new stake
        Stake memory newStake = Stake(amount, now, 0);
        userStaking[msg.sender].push(newStake);
        
        //add to total staked
        totalStaked = totalStaked.add(amount);
        
        tswap.transferFrom(msg.sender, this, amount);
        emit Staked(msg.sender, amount);
    }
    
    //compute rewards
    function computeNewReward(uint256 _rewardAmount, uint256 _stakedAmount, uint256 _stakeTimeSec) private view returns (uint256 _reward) {
        uint256 rewardPerSecond = totalRewards.mul(1 ether);
        if (rewardPerSecond != 0 ) {
            rewardPerSecond = rewardPerSecond.div(poolDuration);
        }
        
        if (rewardPerSecond > 0) {
            uint256 rewardPerSecForEachTokenStaked = rewardPerSecond.div(totalStaked);
            uint256 userRewards = rewardPerSecForEachTokenStaked.mul(_stakedAmount).mul(_stakeTimeSec);
                    userRewards = userRewards.div(1 ether);
            
            return _rewardAmount.add(userRewards);
        } else {
            return 0;
        }
    }
    
    //calculate your rewards
    function calculateReward(address _userAddress) public view returns (uint256 _reward) {
        // all user stakes
        Stake[] storage accountStakes = userStaking[_userAddress];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 rewardAmount = 0;
        uint256 i = accountStakes.length;
        while (i > 0) {
            Stake storage userStake = accountStakes[i - 1];
            uint256 stakeTimeSec;
            
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(userStake.lastWithdrawTime);
                }
            }
            
            // fully redeem a past stake
            rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec);
            i--;
        }
        
        return rewardAmount;
    }
    
    //Withdraw staking and rewards
    function withdrawStaking(uint256 amount) external {
        require(amount > 0, "Amount can not be zero");
        require(userTotalStaking[msg.sender].totalStaking >= amount, "You are trying to withdaw more than your stake");
        
        // 1. User Accounting
        Stake[] storage accountStakes = userStaking[msg.sender];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 sharesLeftToBurn = amount;
        uint256 rewardAmount = 0;
        while (sharesLeftToBurn > 0) {
            Stake storage lastStake = accountStakes[accountStakes.length - 1];
            uint256 stakeTimeSec;
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(lastStake.stakingTime);
                if(lastStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(lastStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(lastStake.stakingTime);
                if(lastStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(lastStake.lastWithdrawTime);
                }
            }
            
            if (lastStake.amount <= sharesLeftToBurn) {
                // fully redeem a past stake
                rewardAmount = computeNewReward(rewardAmount, lastStake.amount, stakeTimeSec);
                sharesLeftToBurn = sharesLeftToBurn.sub(lastStake.amount);
                accountStakes.length--;
            } else {
                // partially redeem a past stake
                rewardAmount = computeNewReward(rewardAmount, sharesLeftToBurn, stakeTimeSec);
                lastStake.amount = lastStake.amount.sub(sharesLeftToBurn);
                lastStake.lastWithdrawTime = now;
                sharesLeftToBurn = 0;
            }
        }
        
        //substract value in staking
        userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.sub(amount);
        
        //substract from total staked
        totalStaked = totalStaked.sub(amount);
        
        //update user rewards info
        userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount);
        userRewardInfo[msg.sender].lastWithdrawTime = now;
        
        //update total rewards withdrawn
        rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount);
        
        //transfer rewards and tokens
        rewardToken.transfer(msg.sender, rewardAmount);
        tswap.transfer(msg.sender, amount);
        
        emit RewardWithdrawal(msg.sender, rewardAmount);
        emit StakingWithdrawal(msg.sender, amount);
    }
    
    //Withdraw rewards
    function withdrawRewardsOnly() external {
        uint256 _rwdAmount = calculateReward(msg.sender);
        require(_rwdAmount > 0, "You do not have enough rewards");
        
        // 1. User Accounting
        Stake[] storage accountStakes = userStaking[msg.sender];
        
        // Redeem from most recent stake and go backwards in time.
        uint256 rewardAmount = 0;
        uint256 i = accountStakes.length;
        while (i > 0) {
            Stake storage userStake = accountStakes[i - 1];
            uint256 stakeTimeSec;
            
            //check if current time is more than pool ending time
            if (now > poolEndTime) {
                stakeTimeSec = poolEndTime.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime);
                }
            } else {
                stakeTimeSec = now.sub(userStake.stakingTime);
                if(userStake.lastWithdrawTime != 0){
                    stakeTimeSec = now.sub(userStake.lastWithdrawTime);
                }
            }
            
            // fully redeem a past stake
            rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec);
            userStake.lastWithdrawTime = now;
            i--;
        }
        
        //update user rewards info
        userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount);
        userRewardInfo[msg.sender].lastWithdrawTime = now;
        
        //update total rewards withdrawn
        rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount);
        
        //transfer rewards
        rewardToken.transfer(msg.sender, rewardAmount);
        emit RewardWithdrawal(msg.sender, rewardAmount);
    }
    
    //get staking details by user address
    function getStakingAmount(address _userAddress) external constant returns (uint256 _stakedAmount) {
        return userTotalStaking[_userAddress].totalStaking;
    }
    
    //get total rewards collected by user
    function getTotalRewardCollectedByUser(address userAddress) view external returns (uint256 _totalRewardCollected) 
    {
        return userRewardInfo[userAddress].totalWithdrawn;
    }
    
    //get total SWAP token staked in the contract
    function getTotalStaked() external constant returns ( uint256 _totalStaked) {
        return totalStaked;
    }
    
    //get total rewards in the contract
    function getTotalRewards() external constant returns ( uint256 _totalRewards) {
        return totalRewards;
    }
    
    //get pool details
    function getPoolDetails() external view returns (address _baseToken, address _pairedToken, uint256 _totalRewards, uint256 _rewardsWithdrawn, uint256 _poolStartTime, uint256 _poolEndTime) {
        return (address(tswap),address(rewardToken),totalRewards,rewardsWithdrawn,poolStartTime,poolEndTime);
    }
    
    //get duration of pools
    function getPoolDuration() external constant returns (uint256 _poolDuration) {
        return poolDuration;
    }

    //set duration of pools by owner in seconds
    function setPoolDuration(uint256 _poolDuration) external onlyOwner {
        poolDuration = _poolDuration;
        poolEndTime = poolStartTime + _poolDuration;
        emit PoolDurationChange(_poolDuration);
    }
    
    //get SWAP token address
    function getSwapAddress() external constant returns (address _swapAddress) {
        return address(tswap);
    }
    
    //set tswap address
    function setTswapAddress(address _address) external onlyOwner {
        tswap = Ierc20(_address);
    }
    
    //set reward token address
    function setRewardTokenAddress(address _address) external onlyOwner {
        rewardToken = Ierc20(_address);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_poolDuration","type":"uint256"}],"name":"setPoolDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalStaked","outputs":[{"name":"_totalStaked","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawRewardsOnly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawStaking","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userRewardInfo","outputs":[{"name":"totalWithdrawn","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getStakingAmount","outputs":[{"name":"_stakedAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSwapAddress","outputs":[{"name":"_swapAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userTotalStaking","outputs":[{"name":"totalStaking","type":"uint256"},{"name":"totalStakingTIme","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userStaking","outputs":[{"name":"amount","type":"uint256"},{"name":"stakingTime","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setRewardTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setTswapAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddress","type":"address"}],"name":"getTotalRewardCollectedByUser","outputs":[{"name":"_totalRewardCollected","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDetails","outputs":[{"name":"_baseToken","type":"address"},{"name":"_pairedToken","type":"address"},{"name":"_totalRewards","type":"uint256"},{"name":"_rewardsWithdrawn","type":"uint256"},{"name":"_poolStartTime","type":"uint256"},{"name":"_poolEndTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tswap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"calculateReward","outputs":[{"name":"_reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalRewards","outputs":[{"name":"_totalRewards","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDuration","outputs":[{"name":"_poolDuration","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rewardAmount","type":"uint256"}],"name":"ownerSetPoolRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"OwnerSetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"StakingWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"RewardWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"poolDuration","type":"uint256"}],"name":"PoolDurationChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanges","type":"event"}]

608060405234801561001057600080fd5b5060008054600160a060020a0319908116331790915560018054821673cc4304a31d09258b0029ea7fe63d032f52e44efe17905560028054909116738d717ab5eac1016b64c2a7fd04720fd2d27d1b8617905562278d006003556114db806100796000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029

Deployed Bytecode

0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029

Deployed Bytecode Sourcemap

1950:11672:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12936:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12936:217:0;;;;;;;12099:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12099:113:0;;;;;;;;;;;;;;;;;;;;9707:1864;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9707:1864:0;;;;6888:2783;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6888:2783:0;;;;;2809:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2809:53:0;-1:-1:-1;;;;;2809:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11626:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11626:167:0;-1:-1:-1;;;;;11626:167:0;;;;;13195:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13195:115:0;;;;;;;;-1:-1:-1;;;;;13195:115:0;;;;;;;;;;;;;;1447:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1447:20:0;;;;2640:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2640:55:0;-1:-1:-1;;;;;2640:55:0;;;;;2438:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2438:47:0;-1:-1:-1;;;;;2438:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13496:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13496:117:0;-1:-1:-1;;;;;13496:117:0;;;;;13347:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13347:105:0;-1:-1:-1;;;;;13347:105:0;;;;;4069:682;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4069:682:0;;;;;11848:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11848:188:0;-1:-1:-1;;;;;11848:188:0;;;;;12417:306;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12417:306:0;;;;;;;;-1:-1:-1;;;;;12417:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2026:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2026:19:0;;;;5565:1275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5565:1275:0;-1:-1:-1;;;;;5565:1275:0;;;;;12265:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12265:116:0;;;;1715:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1715:228:0;-1:-1:-1;;;;;1715:228:0;;;;;2052:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2052:25:0;;;;12764:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12764:115:0;;;;3455:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3455:550:0;;;;;12936:217;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13014:12;:28;;;13067:13;;:29;;13053:11;:43;13112:33;;;;;;;;;;;;;;;;;12936:217;:::o;12099:113::-;12193:11;;12099:113;;:::o;9707:1864::-;9758:18;9926:29;10070:20;10105:9;10177:23;10238:20;9779:27;9795:10;9779:15;:27::i;:::-;9758:48;-1:-1:-1;9838:1:0;9825:14;;9817:57;;;;;-1:-1:-1;;;;;9817:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9970:10;9958:23;;;;:11;:23;;;;;10117:20;;9958:23;;-1:-1:-1;9958:23:0;;-1:-1:-1;10117:20:0;-1:-1:-1;10148:927:0;10159:1;10155;:5;10148:927;;;10203:13;10221:1;10217;:5;10203:20;;;;;;;;;;;;;;;;;;;;10177:46;;10364:11;;10358:3;:17;10354:497;;;10427:21;;;;10411:11;;:38;;;:15;:38;:::i;:::-;10471:26;;;;10396:53;;-1:-1:-1;10471:31:0;10468:136;;10557:26;;;;10541:11;;:43;;;:15;:43;:::i;:::-;10526:58;;10468:136;10354:497;;;10667:21;;;;10659:30;;:3;;:30;:7;:30;:::i;:::-;10711:26;;;;10644:45;;-1:-1:-1;10711:31:0;10708:128;;10789:26;;;;10781:35;;:3;;:35;:7;:35;:::i;:::-;10766:50;;10708:128;10936:62;10953:12;10967:9;:16;;;10985:12;10936:16;:62::i;:::-;11042:3;11013:26;;;:32;10921:77;-1:-1:-1;;;11060:3:0;;;;10148:927;;;11190:10;11175:26;;;;:14;:26;;;;;:41;:59;;11221:12;11175:59;:45;:59;:::i;:::-;11146:10;11131:26;;;;:14;:26;;;;;:103;;;11291:3;11245:43;;;;:49;11376:16;;:34;;11397:12;11376:34;:20;:34;:::i;:::-;11357:16;:53;11459:11;;:46;;;;;;11480:10;11459:46;;;;;;;;;;;;-1:-1:-1;;;;;11459:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;11459:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11459:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11521:42:0;;;11538:10;11521:42;;11459:46;11521:42;;;;;;;;;;;;;;;;;;9707:1864;;;;;;:::o;6888:2783::-;7167:29;;;;;6957:10;;;6949:45;;;;;-1:-1:-1;;;;;6949:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7030:10;7013:28;;;;:16;:28;;;;;:41;:51;-1:-1:-1;7013:51:0;7005:110;;;;;-1:-1:-1;;;;;7005:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7211:10;7199:23;;;;:11;:23;;;;;;-1:-1:-1;7338:6:0;;-1:-1:-1;7199:23:0;-1:-1:-1;7390:1413:0;7416:1;7397:16;:20;7390:1413;;;7474:20;;7460:13;;-1:-1:-1;;7474:24:0;;;7460:39;;;;;;;;;;;;;;;;7434:65;;7626:11;;7620:3;:17;7616:497;;;7689:21;;;;7673:11;;:38;;;:15;:38;:::i;:::-;7733:26;;;;7658:53;;-1:-1:-1;7733:31:0;7730:136;;7819:26;;;;7803:11;;:43;;;:15;:43;:::i;:::-;7788:58;;7730:136;7616:497;;;7929:21;;;;7921:30;;:3;;:30;:7;:30;:::i;:::-;7973:26;;;;7906:45;;-1:-1:-1;7973:31:0;7970:128;;8051:26;;;;8043:35;;:3;;:35;:7;:35;:::i;:::-;8028:50;;7970:128;8145:16;;:36;-1:-1:-1;8141:651:0;;8263:62;8280:12;8294:9;:16;;;8312:12;8263:16;:62::i;:::-;8384:16;;8248:77;;-1:-1:-1;8363:38:0;;:16;;:38;:20;:38;:::i;:::-;8420:22;;8344:57;;-1:-1:-1;8420:22:0;:13;-1:-1:-1;;8420:22:0;;;:::i;:::-;;8141:651;;;8548:62;8565:12;8579:16;8597:12;8548:16;:62::i;:::-;8648:16;;8533:77;;-1:-1:-1;8648:38:0;;8669:16;8648:38;:20;:38;:::i;:::-;8629:57;;8734:3;8705:26;;;:32;8629:16;;-1:-1:-1;8141:651:0;7390:1413;;;8922:10;8905:28;;;;:16;:28;;;;;:41;:53;;8951:6;8905:53;:45;:53;:::i;:::-;8878:10;8861:28;;;;:16;:28;;;;;:97;9032:11;;:23;;9048:6;9032:23;:15;:23;:::i;:::-;9018:11;:37;9171:10;9156:26;;;;:14;:26;;;;;:41;:59;;9202:12;9156:59;:45;:59;:::i;:::-;9127:10;9112:26;;;;:14;:26;;;;;:103;;;9272:3;9226:43;;;;:49;9357:16;;:34;;9378:12;9357:34;:20;:34;:::i;:::-;9338:16;:53;9451:11;;:46;;;;;;9472:10;9451:46;;;;;;;;;;;;-1:-1:-1;;;;;9451:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;9451:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9451:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9508:5:0;;:34;;;;;;9523:10;9508:34;;;;;;;;;;;;-1:-1:-1;;;;;9508:5:0;;;;:14;;:34;;;;;9451:46;;9508:34;;;;;;;;:5;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;9508:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9508:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9568:42:0;;;9585:10;9568:42;;9508:34;9568:42;;;;;;;;;;;;;;;;;;9626:37;;;9644:10;9626:37;;;;;;;;;;;;;;;;;;;;;6888:2783;;;;;;:::o;2809:53::-;;;;;;;;;;;;;;;;;;;:::o;11626:167::-;-1:-1:-1;;;;;11742:30:0;11701:21;11742:30;;;:16;:30;;;;;:43;;11626:167::o;13195:115::-;13296:5;;-1:-1:-1;;;;;13296:5:0;13195:115;:::o;1447:20::-;;;-1:-1:-1;;;;;1447:20:0;;:::o;2640:55::-;;;;;;;;;;;;;;;;;;;:::o;2438:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2438:47:0;;-1:-1:-1;2438:47:0;:::o;13496:117::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13575:11;:30;;-1:-1:-1;;13575:30:0;-1:-1:-1;;;;;13575:30:0;;;;;;;;;;13496:117::o;13347:105::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13420:5;:24;;-1:-1:-1;;13420:24:0;-1:-1:-1;;;;;13420:24:0;;;;;;;;;;13347:105::o;4069:682::-;4453:21;;:::i;:::-;4137:1;4128:10;;4120:37;;;;;-1:-1:-1;;;;;4120:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4182:11;;4176:3;:17;4168:52;;;;;-1:-1:-1;;;;;4168:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4371:10;4354:28;;;;:16;:28;;;;;:41;:53;;4400:6;4354:53;:45;:53;:::i;:::-;4327:10;4310:28;;;;:16;:28;;;;;;;;:97;;;;4477:21;;;;;;;;;;4491:3;4477:21;;;;;;;;;;;;4509:23;;;:11;:23;;;;;27:10:-1;;39:1;23:18;;;45:23;;4509:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4613:11;;4477:21;;-1:-1:-1;4613:23:0;;4483:6;4613:23;:15;:23;:::i;:::-;4599:11;:37;4657:5;;:44;;;;;;4676:10;4657:44;;;;4688:4;4657:44;;;;;;;;;;;;-1:-1:-1;;;;;4657:5:0;;;;:18;;:44;;;;;;;;;;;;;;;:5;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;4657:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4657:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;4717:26:0;;;4724:10;4717:26;;4657:44;4717:26;;;;;;;;;;;;;;;;;;4069:682;;:::o;11848:188::-;-1:-1:-1;;;;;11986:27:0;11931:29;11986:27;;;:14;:27;;;;;:42;;11848:188::o;12417:306::-;12631:5;;12646:11;;12659:12;;12672:16;;12689:13;;12703:11;;-1:-1:-1;;;;;12631:5:0;;;;12646:11;;;;;12417:306;;;;;;:::o;2026:19::-;;;-1:-1:-1;;;;;2026:19:0;;:::o;5565:1275::-;-1:-1:-1;;;;;5721:25:0;;5633:15;5721:25;;;:11;:25;;;;;5882:20;;5633:15;;;;5913:880;5924:1;5920;:5;5913:880;;;5968:13;5986:1;5982;:5;5968:20;;;;;;;;;;;;;;;;;;;;5942:46;;6129:11;;6123:3;:17;6119:497;;;6192:21;;;;6176:11;;:38;;;:15;:38;:::i;:::-;6236:26;;;;6161:53;;-1:-1:-1;6236:31:0;6233:136;;6322:26;;;;6306:11;;:43;;;:15;:43;:::i;:::-;6291:58;;6233:136;6119:497;;;6432:21;;;;6424:30;;:3;;:30;:7;:30;:::i;:::-;6476:26;;;;6409:45;;-1:-1:-1;6476:31:0;6473:128;;6554:26;;;;6546:35;;:3;;:35;:7;:35;:::i;:::-;6531:50;;6473:128;6701:62;6718:12;6732:9;:16;;;6750:12;6701:16;:62::i;:::-;6686:77;-1:-1:-1;;;6778:3:0;;;;5913:880;;;-1:-1:-1;6820:12:0;;5565:1275;-1:-1:-1;;;;;5565:1275:0:o;12265:116::-;12361:12;;12265:116;:::o;1715:228::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;-1:-1:-1;;;;;1802:22:0;;;;1794:64;;;;;-1:-1:-1;;;;;1794:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1873:5;:16;;-1:-1:-1;;;;;1873:16:0;;-1:-1:-1;;1873:16:0;;;;;;;;1909:22;;;;;;;;;;;;;;;;1715:228;:::o;2052:25::-;;;-1:-1:-1;;;;;2052:25:0;;:::o;12764:115::-;12859:12;;12764:115;:::o;3455:550::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;3545:13;;:18;3537:55;;;;;-1:-1:-1;;;;;3537:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3627:1;3611:17;;3603:65;;;;;-1:-1:-1;;;;;3603:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:12;:28;;;3789:3;3773:13;:19;;;3823:12;;3817:18;3803:11;:32;3895:11;;:57;;;;;;3920:10;3895:57;;;;;;;3932:4;3895:57;;;;;;;;;;;-1:-1:-1;;;;;3895:11:0;;;;:24;;:57;;;;;;;;;;;;;;-1:-1:-1;3895:11:0;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;3895:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3895:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3968:29:0;;;;;;;;;;;;;3895:57;3968:29;;;3455:550;:::o;997:114::-;1055:7;1079:6;;;;1071:15;;;;;;-1:-1:-1;1100:5:0;;;997:114::o;4786:737::-;4903:15;4931:23;5158:38;5246:19;4957:25;4974:7;4957:12;;:16;;:25;;;;:::i;:::-;4931:51;-1:-1:-1;4997:20:0;;4993:105;;5073:12;;5053:33;;:15;;:33;:19;:33;:::i;:::-;5035:51;;4993:105;5140:1;5122:15;:19;5118:398;;;5219:11;;5199:32;;:15;;:32;:19;:32;:::i;:::-;5158:73;-1:-1:-1;5268:68:0;5322:13;5268:49;5158:73;5303:13;5268:49;:34;:49;:::i;:::-;:53;:68;:53;:68;:::i;:::-;5246:90;-1:-1:-1;5373:24:0;5246:90;5389:7;5373:24;:15;:24;:::i;:::-;5359:38;-1:-1:-1;5433:30:0;:13;5359:38;5433:30;:17;:30;:::i;:::-;5426:37;;;;5118:398;5503:1;5496:8;;5118:398;4786:737;;;;;;;;:::o;1117:134::-;1175:7;1203:5;;;1223:6;;;;1215:15;;;;;;1244:1;1237:8;;1117:134;;;;;;:::o;692:181::-;750:7;;770:6;;766:37;;;794:1;787:8;;;;766:37;-1:-1:-1;821:5:0;;;825:1;821;:5;841;;;;;;;;:10;833:19;;;;;879:112;937:7;953:9;969:1;965;:5;;;;;;;;;879:112;-1:-1:-1;;;;879:112:0:o;1950:11672::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://6df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d

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

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.