ETH Price: $3,120.61 (+1.09%)

Contract

0x3850a7BfCa83Bd565326990cc8c096DEc504140d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Staking203786502024-07-24 20:00:47117 days ago1721851247IN
0x3850a7Bf...Ec504140d
0 ETH0.001699039.06184051
Withdraw Staking124510502021-05-17 9:23:531282 days ago1621243433IN
0x3850a7Bf...Ec504140d
0 ETH0.0128593764.012
Withdraw Staking124488872021-05-17 1:04:461282 days ago1621213486IN
0x3850a7Bf...Ec504140d
0 ETH0.0101594758.3
Withdraw Staking124459902021-05-16 14:22:521282 days ago1621174972IN
0x3850a7Bf...Ec504140d
0 ETH0.010848754
Withdraw Staking124416122021-05-15 22:02:511283 days ago1621116171IN
0x3850a7Bf...Ec504140d
0 ETH0.0132595366
Withdraw Staking124411542021-05-15 20:22:331283 days ago1621110153IN
0x3850a7Bf...Ec504140d
0 ETH0.0089197570
Withdraw Staking124396022021-05-15 14:52:101283 days ago1621090330IN
0x3850a7Bf...Ec504140d
0 ETH0.0194473196.8
Withdraw Staking124219622021-05-12 21:26:091286 days ago1620854769IN
0x3850a7Bf...Ec504140d
0 ETH0.02437992183.7
Withdraw Staking124121612021-05-11 8:47:401288 days ago1620722860IN
0x3850a7Bf...Ec504140d
0 ETH0.00583965244.00000145
Withdraw Staking124121512021-05-11 8:45:191288 days ago1620722719IN
0x3850a7Bf...Ec504140d
0 ETH0.03655217244.00000145
Withdraw Staking123805562021-05-06 11:46:461293 days ago1620301606IN
0x3850a7Bf...Ec504140d
0 ETH0.0057482437
Withdraw Staking123804652021-05-06 11:28:091293 days ago1620300489IN
0x3850a7Bf...Ec504140d
0 ETH0.0026774641
Withdraw Staking123781362021-05-06 2:45:461293 days ago1620269146IN
0x3850a7Bf...Ec504140d
0 ETH0.0066803943
Withdraw Staking123767582021-05-05 21:48:131293 days ago1620251293IN
0x3850a7Bf...Ec504140d
0 ETH0.0054049366
Withdraw Staking123766752021-05-05 21:29:291293 days ago1620250169IN
0x3850a7Bf...Ec504140d
0 ETH0.0121188678
Withdraw Staking123692322021-05-04 17:52:311294 days ago1620150751IN
0x3850a7Bf...Ec504140d
0 ETH0.0097875563
Withdraw Staking123677282021-05-04 12:26:481295 days ago1620131208IN
0x3850a7Bf...Ec504140d
0 ETH0.0077606145
Withdraw Staking123634862021-05-03 20:46:561295 days ago1620074816IN
0x3850a7Bf...Ec504140d
0 ETH0.0124169772
Withdraw Staking123632682021-05-03 19:57:091295 days ago1620071829IN
0x3850a7Bf...Ec504140d
0 ETH0.0132163776.63
Withdraw Staking123628482021-05-03 18:25:361295 days ago1620066336IN
0x3850a7Bf...Ec504140d
0 ETH0.01759071102
Withdraw Staking123604732021-05-03 9:45:251296 days ago1620035125IN
0x3850a7Bf...Ec504140d
0 ETH0.0045125431
Withdraw Staking123601232021-05-03 8:32:431296 days ago1620030763IN
0x3850a7Bf...Ec504140d
0 ETH0.0087263750.6
Withdraw Staking123596682021-05-03 6:45:081296 days ago1620024308IN
0x3850a7Bf...Ec504140d
0 ETH0.004138724
Withdraw Staking123586252021-05-03 2:46:551296 days ago1620010015IN
0x3850a7Bf...Ec504140d
0 ETH0.0022790827.83
Withdraw Staking123582182021-05-03 1:20:451296 days ago1620004845IN
0x3850a7Bf...Ec504140d
0 ETH0.001920226
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingPool

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *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(0xe047705117Eb07e712C3d684f5B18E74577e83aC);
        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"}]

608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cc4304a31d09258b0029ea7fe63d032f52e44efe600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e047705117eb07e712c3d684f5b18e74577e83ac600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062278d0060038190555061236a806101146000396000f300608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302a01dc21461012d5780630917e7761461015a57806317608969146101855780632e0b78f61461019c578063360b8ed9146101c957806374363daa1461022757806385811fbf1461027e5780638da5cb5b146102d55780638db6c1191461032c578063908163021461038a5780639a6acf20146103f95780639ebde7811461043c578063a694fc3a1461047f578063a6b240fe146104ac578063aca34c1114610503578063c9e48653146105a9578063d82e396214610600578063e627f2db14610657578063f2fde38b14610682578063f7c618c1146106c5578063f7d57b811461071c578063fbc14bfb14610747575b600080fd5b34801561013957600080fd5b5061015860048036038101908080359060200190929190505050610774565b005b34801561016657600080fd5b5061016f61081b565b6040518082815260200191505060405180910390f35b34801561019157600080fd5b5061019a610825565b005b3480156101a857600080fd5b506101c760048036038101908080359060200190929190505050610c57565b005b3480156101d557600080fd5b5061020a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e6565b604051808381526020018281526020019250505060405180910390f35b34801561023357600080fd5b50610268600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140a565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b50610293611456565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b506102ea611480565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033857600080fd5b5061036d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b604051808381526020018281526020019250505060405180910390f35b34801561039657600080fd5b506103d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c9565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561040557600080fd5b5061043a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150f565b005b34801561044857600080fd5b5061047d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ae565b005b34801561048b57600080fd5b506104aa6004803603810190808035906020019092919050505061164d565b005b3480156104b857600080fd5b506104ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4b565b6040518082815260200191505060405180910390f35b34801561050f57600080fd5b50610518611a97565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b3480156105b557600080fd5b506105be611b06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060c57600080fd5b50610641600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b2c565b6040518082815260200191505060405180910390f35b34801561066357600080fd5b5061066c611c6e565b6040518082815260200191505060405180910390f35b34801561068e57600080fd5b506106c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c78565b005b3480156106d157600080fd5b506106da611e1e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072857600080fd5b50610731611e44565b6040518082815260200191505060405180910390f35b34801561075357600080fd5b5061077260048036038101908080359060200190929190505050611e4e565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b8060038190555080600654016007819055507f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f2270816040518082815260200191505060405180910390a150565b6000600854905090565b60008060008060008061083733611b2c565b95506000861115156108b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f596f7520646f206e6f74206861766520656e6f7567682072657761726473000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020945060009350848054905092505b60008311156109e657846001840381548110151561091857fe5b9060005260206000209060030201915060075442111561097c5761094b826001015460075461214990919063ffffffff16565b90506000826002015414151561097757610974826002015460075461214990919063ffffffff16565b90505b6109be565b61099382600101544261214990919063ffffffff16565b9050600082600201541415156109bd576109ba82600201544261214990919063ffffffff16565b90505b5b6109cd84836000015483612165565b93504282600201819055508280600190039350506108fe565b610a3b84600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550610add8460055461223990919063ffffffff16565b600581905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ba857600080fd5b505af1158015610bbc573d6000803e3d6000fd5b505050506040513d6020811015610bd257600080fd5b8101908080519060200190929190505050507f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050505050565b60008060008060008086111515610cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416d6f756e742063616e206e6f74206265207a65726f0000000000000000000081525060200191505060405180910390fd5b85600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410151515610db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f596f752061726520747279696e6720746f2077697468646177206d6f7265207481526020017f68616e20796f7572207374616b6500000000000000000000000000000000000081525060400191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209450859350600092505b6000841115610f5357846001868054905003815481101515610e1d57fe5b90600052602060002090600302019150600754421115610e8157610e50826001015460075461214990919063ffffffff16565b905060008260020154141515610e7c57610e79826002015460075461214990919063ffffffff16565b90505b610ec3565b610e9882600101544261214990919063ffffffff16565b905060008260020154141515610ec257610ebf82600201544261214990919063ffffffff16565b90505b5b838260000154111515610f1457610edf83836000015483612165565b9250610ef882600001548561214990919063ffffffff16565b935084805480919060019003610f0e91906122b3565b50610f4e565b610f1f838583612165565b9250610f3884836000015461214990919063ffffffff16565b8260000181905550428260020181905550600093505b610dff565b610fa886600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461214990919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506110038660085461214990919063ffffffff16565b60088190555061105e83600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111008360055461223990919063ffffffff16565b600581905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112cc57600080fd5b505af11580156112e0573d6000803e3d6000fd5b505050506040513d60208110156112f657600080fd5b8101908080519060200190929190505050507f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe3384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a17f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a3387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050505050565b600b6020528060005260406000206000915090508060000154908060010154905082565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090508060000154908060010154905082565b6009602052816000526040600020818154811015156114e457fe5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561156a57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160957600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116556122e5565b6000821115156116cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b60075442101515611746576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5374616b696e6720706f6f6c20697320636c6f7365640000000000000000000081525060200191505060405180910390fd5b61179b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060606040519081016040528083815260200142815260200160008152509050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050506118a18260085461223990919063ffffffff16565b600881905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a057600080fd5b505af11580156119b4573d6000803e3d6000fd5b505050506040513d60208110156119ca57600080fd5b8101908080519060200190929190505050507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600454600554600654600754955095509550955095509550909192939495565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020945060009350848054905092505b6000831115611c61578460018403815481101515611b9c57fe5b90600052602060002090600302019150600754421115611c0057611bcf826001015460075461214990919063ffffffff16565b905060008260020154141515611bfb57611bf8826002015460075461214990919063ffffffff16565b90505b611c42565b611c1782600101544261214990919063ffffffff16565b905060008260020154141515611c4157611c3e82600201544261214990919063ffffffff16565b90505b5b611c5184836000015483612165565b9350828060019003935050611b82565b8395505050505050919050565b6000600454905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cd357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d45481604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ea957600080fd5b6000600654141515611f23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f506f6f6c207265776172647320616c726561647920736574000000000000000081525060200191505060405180910390fd5b600081111515611fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600481905550426006819055506003544201600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156120d357600080fd5b505af11580156120e7573d6000803e3d6000fd5b505050506040513d60208110156120fd57600080fd5b8101908080519060200190929190505050507f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf816040518082815260200191505060405180910390a150565b600082821115151561215a57600080fd5b818303905092915050565b600080600080612188670de0b6b3a764000060045461225a90919063ffffffff16565b92506000831415156121ac576121a96003548461229890919063ffffffff16565b92505b600083111561222a576121ca6008548461229890919063ffffffff16565b91506121f1856121e3888561225a90919063ffffffff16565b61225a90919063ffffffff16565b905061220e670de0b6b3a76400008261229890919063ffffffff16565b9050612223818861223990919063ffffffff16565b935061222f565b600093505b5050509392505050565b600080828401905083811015151561225057600080fd5b8091505092915050565b600080600084141561226f5760009150612291565b828402905082848281151561228057fe5b0414151561228d57600080fd5b8091505b5092915050565b60008082848115156122a657fe5b0490508091505092915050565b8154818355818111156122e0576003028160030283600052602060002091820191016122df9190612307565b5b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61233b91905b8082111561233757600080820160009055600182016000905560028201600090555060030161230d565b5090565b905600a165627a7a7230582042c612137bcdd3559d589b8541147494c483a1f828d7c5d971ef38ad6e88d36d0029

Deployed Bytecode

0x608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302a01dc21461012d5780630917e7761461015a57806317608969146101855780632e0b78f61461019c578063360b8ed9146101c957806374363daa1461022757806385811fbf1461027e5780638da5cb5b146102d55780638db6c1191461032c578063908163021461038a5780639a6acf20146103f95780639ebde7811461043c578063a694fc3a1461047f578063a6b240fe146104ac578063aca34c1114610503578063c9e48653146105a9578063d82e396214610600578063e627f2db14610657578063f2fde38b14610682578063f7c618c1146106c5578063f7d57b811461071c578063fbc14bfb14610747575b600080fd5b34801561013957600080fd5b5061015860048036038101908080359060200190929190505050610774565b005b34801561016657600080fd5b5061016f61081b565b6040518082815260200191505060405180910390f35b34801561019157600080fd5b5061019a610825565b005b3480156101a857600080fd5b506101c760048036038101908080359060200190929190505050610c57565b005b3480156101d557600080fd5b5061020a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113e6565b604051808381526020018281526020019250505060405180910390f35b34801561023357600080fd5b50610268600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140a565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b50610293611456565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e157600080fd5b506102ea611480565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033857600080fd5b5061036d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b604051808381526020018281526020019250505060405180910390f35b34801561039657600080fd5b506103d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c9565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561040557600080fd5b5061043a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150f565b005b34801561044857600080fd5b5061047d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ae565b005b34801561048b57600080fd5b506104aa6004803603810190808035906020019092919050505061164d565b005b3480156104b857600080fd5b506104ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4b565b6040518082815260200191505060405180910390f35b34801561050f57600080fd5b50610518611a97565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b3480156105b557600080fd5b506105be611b06565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060c57600080fd5b50610641600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b2c565b6040518082815260200191505060405180910390f35b34801561066357600080fd5b5061066c611c6e565b6040518082815260200191505060405180910390f35b34801561068e57600080fd5b506106c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c78565b005b3480156106d157600080fd5b506106da611e1e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072857600080fd5b50610731611e44565b6040518082815260200191505060405180910390f35b34801561075357600080fd5b5061077260048036038101908080359060200190929190505050611e4e565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b8060038190555080600654016007819055507f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f2270816040518082815260200191505060405180910390a150565b6000600854905090565b60008060008060008061083733611b2c565b95506000861115156108b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f596f7520646f206e6f74206861766520656e6f7567682072657761726473000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020945060009350848054905092505b60008311156109e657846001840381548110151561091857fe5b9060005260206000209060030201915060075442111561097c5761094b826001015460075461214990919063ffffffff16565b90506000826002015414151561097757610974826002015460075461214990919063ffffffff16565b90505b6109be565b61099382600101544261214990919063ffffffff16565b9050600082600201541415156109bd576109ba82600201544261214990919063ffffffff16565b90505b5b6109cd84836000015483612165565b93504282600201819055508280600190039350506108fe565b610a3b84600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550610add8460055461223990919063ffffffff16565b600581905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ba857600080fd5b505af1158015610bbc573d6000803e3d6000fd5b505050506040513d6020811015610bd257600080fd5b8101908080519060200190929190505050507f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe3385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050505050565b60008060008060008086111515610cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416d6f756e742063616e206e6f74206265207a65726f0000000000000000000081525060200191505060405180910390fd5b85600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410151515610db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f596f752061726520747279696e6720746f2077697468646177206d6f7265207481526020017f68616e20796f7572207374616b6500000000000000000000000000000000000081525060400191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209450859350600092505b6000841115610f5357846001868054905003815481101515610e1d57fe5b90600052602060002090600302019150600754421115610e8157610e50826001015460075461214990919063ffffffff16565b905060008260020154141515610e7c57610e79826002015460075461214990919063ffffffff16565b90505b610ec3565b610e9882600101544261214990919063ffffffff16565b905060008260020154141515610ec257610ebf82600201544261214990919063ffffffff16565b90505b5b838260000154111515610f1457610edf83836000015483612165565b9250610ef882600001548561214990919063ffffffff16565b935084805480919060019003610f0e91906122b3565b50610f4e565b610f1f838583612165565b9250610f3884836000015461214990919063ffffffff16565b8260000181905550428260020181905550600093505b610dff565b610fa886600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461214990919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506110038660085461214990919063ffffffff16565b60088190555061105e83600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111008360055461223990919063ffffffff16565b600581905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112cc57600080fd5b505af11580156112e0573d6000803e3d6000fd5b505050506040513d60208110156112f657600080fd5b8101908080519060200190929190505050507f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe3384604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a17f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a3387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050505050565b600b6020528060005260406000206000915090508060000154908060010154905082565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090508060000154908060010154905082565b6009602052816000526040600020818154811015156114e457fe5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561156a57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160957600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116556122e5565b6000821115156116cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b60075442101515611746576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5374616b696e6720706f6f6c20697320636c6f7365640000000000000000000081525060200191505060405180910390fd5b61179b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461223990919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060606040519081016040528083815260200142815260200160008152509050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010155604082015181600201555050506118a18260085461223990919063ffffffff16565b600881905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a057600080fd5b505af11580156119b4573d6000803e3d6000fd5b505050506040513d60208110156119ca57600080fd5b8101908080519060200190929190505050507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d3383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600454600554600654600754955095509550955095509550909192939495565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020945060009350848054905092505b6000831115611c61578460018403815481101515611b9c57fe5b90600052602060002090600302019150600754421115611c0057611bcf826001015460075461214990919063ffffffff16565b905060008260020154141515611bfb57611bf8826002015460075461214990919063ffffffff16565b90505b611c42565b611c1782600101544261214990919063ffffffff16565b905060008260020154141515611c4157611c3e82600201544261214990919063ffffffff16565b90505b5b611c5184836000015483612165565b9350828060019003935050611b82565b8395505050505050919050565b6000600454905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cd357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6577206f776e657220697320746865207a65726f206164647265737300000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d45481604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ea957600080fd5b6000600654141515611f23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f506f6f6c207265776172647320616c726561647920736574000000000000000081525060200191505060405180910390fd5b600081111515611fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600481905550426006819055506003544201600781905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156120d357600080fd5b505af11580156120e7573d6000803e3d6000fd5b505050506040513d60208110156120fd57600080fd5b8101908080519060200190929190505050507f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf816040518082815260200191505060405180910390a150565b600082821115151561215a57600080fd5b818303905092915050565b600080600080612188670de0b6b3a764000060045461225a90919063ffffffff16565b92506000831415156121ac576121a96003548461229890919063ffffffff16565b92505b600083111561222a576121ca6008548461229890919063ffffffff16565b91506121f1856121e3888561225a90919063ffffffff16565b61225a90919063ffffffff16565b905061220e670de0b6b3a76400008261229890919063ffffffff16565b9050612223818861223990919063ffffffff16565b935061222f565b600093505b5050509392505050565b600080828401905083811015151561225057600080fd5b8091505092915050565b600080600084141561226f5760009150612291565b828402905082848281151561228057fe5b0414151561228d57600080fd5b8091505b5092915050565b60008082848115156122a657fe5b0490508091505092915050565b8154818355818111156122e0576003028160030283600052602060002091820191016122df9190612307565b5b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61233b91905b8082111561233757600080820160009055600182016000905560028201600090555060030161230d565b5090565b905600a165627a7a7230582042c612137bcdd3559d589b8541147494c483a1f828d7c5d971ef38ad6e88d36d0029

Deployed Bytecode Sourcemap

1879:11672:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12865:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12865:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;12028:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12028:113:0;;;;;;;;;;;;;;;;;;;;;;;9636:1864;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9636:1864:0;;;;;;6817:2783;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6817:2783:0;;;;;;;;;;;;;;;;;;;;;;;;;;2738:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2738:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11555:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11555:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13124:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13124:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1376:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1376:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2569:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2569:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2367:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2367:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13425:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13425:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13276:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13276:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3998:682;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3998:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;11777:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11777:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12346:306;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12346:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1955:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5494:1275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5494:1275:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12194:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12194:116:0;;;;;;;;;;;;;;;;;;;;;;;1644:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1644:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1981:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12693:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12693:115:0;;;;;;;;;;;;;;;;;;;;;;;3384:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3384:550:0;;;;;;;;;;;;;;;;;;;;;;;;;;12865:217;1598:5;;;;;;;;;;;1584:19;;:10;:19;;;1576:28;;;;;;;;12958:13;12943:12;:28;;;;13012:13;12996;;:29;12982:11;:43;;;;13041:33;13060:13;13041:33;;;;;;;;;;;;;;;;;;12865:217;:::o;12028:113::-;12082:20;12122:11;;12115:18;;12028:113;:::o;9636:1864::-;9687:18;9855:29;9999:20;10034:9;10106:23;10167:20;9708:27;9724:10;9708:15;:27::i;:::-;9687:48;;9767:1;9754:10;:14;9746:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9887:11;:23;9899:10;9887:23;;;;;;;;;;;;;;;9855:55;;10022:1;9999:24;;10046:13;:20;;;;10034:32;;10077:927;10088:1;10084;:5;10077:927;;;10132:13;10150:1;10146;:5;10132:20;;;;;;;;;;;;;;;;;;;;10106:46;;10293:11;;10287:3;:17;10283:497;;;10340:38;10356:9;:21;;;10340:11;;:15;;:38;;;;:::i;:::-;10325:53;;10430:1;10400:9;:26;;;:31;;10397:136;;;10470:43;10486:9;:26;;;10470:11;;:15;;:43;;;;:::i;:::-;10455:58;;10397:136;10283:497;;;10588:30;10596:9;:21;;;10588:3;:7;;:30;;;;:::i;:::-;10573:45;;10670:1;10640:9;:26;;;:31;;10637:128;;;10710:35;10718:9;:26;;;10710:3;:7;;:35;;;;:::i;:::-;10695:50;;10637:128;10283:497;10865:62;10882:12;10896:9;:16;;;10914:12;10865:16;:62::i;:::-;10850:77;;10971:3;10942:9;:26;;:32;;;;10989:3;;;;;;;;10077:927;;;11104:59;11150:12;11104:14;:26;11119:10;11104:26;;;;;;;;;;;;;;;:41;;;:45;;:59;;;;:::i;:::-;11060:14;:26;11075:10;11060:26;;;;;;;;;;;;;;;:41;;:103;;;;11220:3;11174:14;:26;11189:10;11174:26;;;;;;;;;;;;;;;:43;;:49;;;;11305:34;11326:12;11305:16;;:20;;:34;;;;:::i;:::-;11286:16;:53;;;;11388:11;;;;;;;;;;;:20;;;11409:10;11421:12;11388:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11388:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11388:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11388:46:0;;;;;;;;;;;;;;;;;11450:42;11467:10;11479:12;11450:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;9636:1864;;;;;;:::o;6817:2783::-;7096:29;7240:24;7284:20;7363:23;7443:20;6895:1;6886:6;:10;6878:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:6;6942:16;:28;6959:10;6942:28;;;;;;;;;;;;;;;:41;;;:51;;6934:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7128:11;:23;7140:10;7128:23;;;;;;;;;;;;;;;7096:55;;7267:6;7240:33;;7307:1;7284:24;;7319:1413;7345:1;7326:16;:20;7319:1413;;;7389:13;7426:1;7403:13;:20;;;;:24;7389:39;;;;;;;;;;;;;;;;;;;;7363:65;;7555:11;;7549:3;:17;7545:497;;;7602:38;7618:9;:21;;;7602:11;;:15;;:38;;;;:::i;:::-;7587:53;;7692:1;7662:9;:26;;;:31;;7659:136;;;7732:43;7748:9;:26;;;7732:11;;:15;;:43;;;;:::i;:::-;7717:58;;7659:136;7545:497;;;7850:30;7858:9;:21;;;7850:3;:7;;:30;;;;:::i;:::-;7835:45;;7932:1;7902:9;:26;;;:31;;7899:128;;;7972:35;7980:9;:26;;;7972:3;:7;;:35;;;;:::i;:::-;7957:50;;7899:128;7545:497;8094:16;8074:9;:16;;;:36;;8070:651;;;8192:62;8209:12;8223:9;:16;;;8241:12;8192:16;:62::i;:::-;8177:77;;8292:38;8313:9;:16;;;8292;:20;;:38;;;;:::i;:::-;8273:57;;8349:13;:22;;;;;;;;;;;;:::i;:::-;;8070:651;;;8477:62;8494:12;8508:16;8526:12;8477:16;:62::i;:::-;8462:77;;8577:38;8598:16;8577:9;:16;;;:20;;:38;;;;:::i;:::-;8558:9;:16;;:57;;;;8663:3;8634:9;:26;;:32;;;;8704:1;8685:20;;8070:651;7319:1413;;;8834:53;8880:6;8834:16;:28;8851:10;8834:28;;;;;;;;;;;;;;;:41;;;:45;;:53;;;;:::i;:::-;8790:16;:28;8807:10;8790:28;;;;;;;;;;;;;;;:41;;:97;;;;8961:23;8977:6;8961:11;;:15;;:23;;;;:::i;:::-;8947:11;:37;;;;9085:59;9131:12;9085:14;:26;9100:10;9085:26;;;;;;;;;;;;;;;:41;;;:45;;:59;;;;:::i;:::-;9041:14;:26;9056:10;9041:26;;;;;;;;;;;;;;;:41;;:103;;;;9201:3;9155:14;:26;9170:10;9155:26;;;;;;;;;;;;;;;:43;;:49;;;;9286:34;9307:12;9286:16;;:20;;:34;;;;:::i;:::-;9267:16;:53;;;;9380:11;;;;;;;;;;;:20;;;9401:10;9413:12;9380:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9380:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9380:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9380:46:0;;;;;;;;;;;;;;;;;9437:5;;;;;;;;;;;:14;;;9452:10;9464:6;9437:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9437:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9437:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9437:34:0;;;;;;;;;;;;;;;;;9497:42;9514:10;9526:12;9497:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;9555:37;9573:10;9585:6;9555:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;6817:2783;;;;;;:::o;2738:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11555:167::-;11630:21;11671:16;:30;11688:12;11671:30;;;;;;;;;;;;;;;:43;;;11664:50;;11555:167;;;:::o;13124:115::-;13177:20;13225:5;;;;;;;;;;;13210:21;;13124:115;:::o;1376:20::-;;;;;;;;;;;;;:::o;2569:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2367:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13425:117::-;1598:5;;;;;;;;;;;1584:19;;:10;:19;;;1576:28;;;;;;;;13525:8;13504:11;;:30;;;;;;;;;;;;;;;;;;13425:117;:::o;13276:105::-;1598:5;;;;;;;;;;;1584:19;;:10;:19;;;1576:28;;;;;;;;13364:8;13349:5;;:24;;;;;;;;;;;;;;;;;;13276:105;:::o;3998:682::-;4382:21;;:::i;:::-;4066:1;4057:6;:10;4049:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:11;;4105:3;:17;4097:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4283:53;4329:6;4283:16;:28;4300:10;4283:28;;;;;;;;;;;;;;;:41;;;:45;;:53;;;;:::i;:::-;4239:16;:28;4256:10;4239:28;;;;;;;;;;;;;;;:41;;:97;;;;4406:21;;;;;;;;;4412:6;4406:21;;;;4420:3;4406:21;;;;4425:1;4406:21;;;4382:45;;4438:11;:23;4450:10;4438:23;;;;;;;;;;;;;;;4467:8;4438:38;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4438:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:23;4558:6;4542:11;;:15;;:23;;;;:::i;:::-;4528:11;:37;;;;4586:5;;;;;;;;;;;:18;;;4605:10;4617:4;4623:6;4586:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4586:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4586:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4586:44:0;;;;;;;;;;;;;;;;;4646:26;4653:10;4665:6;4646:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3998:682;;:::o;11777:188::-;11860:29;11915:14;:27;11930:11;11915:27;;;;;;;;;;;;;;;:42;;;11908:49;;11777:188;;;:::o;12346:306::-;12395:18;12415:20;12437:21;12460:25;12487:22;12511:20;12560:5;;;;;;;;;;;12575:11;;;;;;;;;;;12588:12;;12601:16;;12618:13;;12632:11;;12544:100;;;;;;;;;;;;12346:306;;;;;;:::o;1955:19::-;;;;;;;;;;;;;:::o;5494:1275::-;5562:15;5618:29;5764:20;5799:9;5871:23;5932:20;5650:11;:25;5662:12;5650:25;;;;;;;;;;;;;;;5618:57;;5787:1;5764:24;;5811:13;:20;;;;5799:32;;5842:880;5853:1;5849;:5;5842:880;;;5897:13;5915:1;5911;:5;5897:20;;;;;;;;;;;;;;;;;;;;5871:46;;6058:11;;6052:3;:17;6048:497;;;6105:38;6121:9;:21;;;6105:11;;:15;;:38;;;;:::i;:::-;6090:53;;6195:1;6165:9;:26;;;:31;;6162:136;;;6235:43;6251:9;:26;;;6235:11;;:15;;:43;;;;:::i;:::-;6220:58;;6162:136;6048:497;;;6353:30;6361:9;:21;;;6353:3;:7;;:30;;;;:::i;:::-;6338:45;;6435:1;6405:9;:26;;;:31;;6402:128;;;6475:35;6483:9;:26;;;6475:3;:7;;:35;;;;:::i;:::-;6460:50;;6402:128;6048:497;6630:62;6647:12;6661:9;:16;;;6679:12;6630:16;:62::i;:::-;6615:77;;6707:3;;;;;;;;5842:880;;;6749:12;6742:19;;5494:1275;;;;;;;;:::o;12194:116::-;12249:21;12290:12;;12283:19;;12194:116;:::o;1644:228::-;1598:5;;;;;;;;;;;1584:19;;:10;:19;;;1576:28;;;;;;;;1751:1;1731:22;;:8;:22;;;;1723:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:8;1802:5;;:16;;;;;;;;;;;;;;;;;;1838:22;1851:8;1838:22;;;;;;;;;;;;;;;;;;;;;;1644:228;:::o;1981:25::-;;;;;;;;;;;;;:::o;12693:115::-;12747:21;12788:12;;12781:19;;12693:115;:::o;3384:550::-;1598:5;;;;;;;;;;;1584:19;;:10;:19;;;1576:28;;;;;;;;3491:1;3474:13;;:18;3466:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3556:1;3540:13;:17;3532:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3668:13;3653:12;:28;;;;3718:3;3702:13;:19;;;;3752:12;;3746:3;:18;3732:11;:32;;;;3824:11;;;;;;;;;;;:24;;;3849:10;3861:4;3867:13;3824:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3824:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3824:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3824:57:0;;;;;;;;;;;;;;;;;3897:29;3912:13;3897:29;;;;;;;;;;;;;;;;;;3384:550;:::o;926:114::-;984:7;1013:1;1008;:6;;1000:15;;;;;;;;1033:1;1029;:5;1022:12;;926:114;;;;:::o;4715:737::-;4832:15;4860:23;5087:38;5175:19;4886:25;4903:7;4886:12;;:16;;:25;;;;:::i;:::-;4860:51;;4945:1;4926:15;:20;;4922:105;;;4982:33;5002:12;;4982:15;:19;;:33;;;;:::i;:::-;4964:51;;4922:105;5069:1;5051:15;:19;5047:398;;;5128:32;5148:11;;5128:15;:19;;:32;;;;:::i;:::-;5087:73;;5197:68;5251:13;5197:49;5232:13;5197:30;:34;;:49;;;;:::i;:::-;:53;;:68;;;;:::i;:::-;5175:90;;5302:24;5318:7;5302:11;:15;;:24;;;;:::i;:::-;5288:38;;5362:30;5380:11;5362:13;:17;;:30;;;;:::i;:::-;5355:37;;;;5047:398;5432:1;5425:8;;4715:737;;;;;;;;;:::o;1046:134::-;1104:7;1120:9;1136:1;1132;:5;1120:17;;1157:1;1152;:6;;1144:15;;;;;;;;1173:1;1166:8;;1046:134;;;;;:::o;621:181::-;679:7;738:9;704:1;699;:6;695:37;;;723:1;716:8;;;;695:37;754:1;750;:5;738:17;;779:1;774;770;:5;;;;;;;;:10;762:19;;;;;;;;795:1;788:8;;621:181;;;;;;:::o;808:112::-;866:7;882:9;898:1;894;:5;;;;;;;;882:17;;913:1;906:8;;808:112;;;;;:::o;1879:11672::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://42c612137bcdd3559d589b8541147494c483a1f828d7c5d971ef38ad6e88d36d

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.