ETH Price: $2,339.14 (-4.62%)

Contract

0xE7d9747404532A1AEFd1Bf9D878aF1E859a51544
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Staking Enab...158523852022-10-29 8:00:23705 days ago1667030423IN
0xE7d97474...859a51544
0 ETH0.0005366610.35406268
Reset Staking158523792022-10-29 7:59:11705 days ago1667030351IN
0xE7d97474...859a51544
0 ETH0.000397659.97874814
Force Payout158523772022-10-29 7:58:47705 days ago1667030327IN
0xE7d97474...859a51544
0 ETH0.0008502710.29543206
Force Payout158523662022-10-29 7:56:35705 days ago1667030195IN
0xE7d97474...859a51544
0 ETH0.0008543510.65690976
Claim Prize158522982022-10-29 7:42:47705 days ago1667029367IN
0xE7d97474...859a51544
0 ETH0.001031158.65717294
Set Winning Pool158522932022-10-29 7:41:47705 days ago1667029307IN
0xE7d97474...859a51544
0 ETH0.000917338.87336541
Set Staking Enab...158519502022-10-29 6:32:47705 days ago1667025167IN
0xE7d97474...859a51544
0 ETH0.00028559.54791973
Stake158518952022-10-29 6:21:35705 days ago1667024495IN
0xE7d97474...859a51544
0 ETH0.0016294210
Stake158518212022-10-29 6:06:47705 days ago1667023607IN
0xE7d97474...859a51544
0 ETH0.001337037.4291861
Stake158513852022-10-29 4:38:47705 days ago1667018327IN
0xE7d97474...859a51544
0 ETH0.001525228.47603632
Stake158498642022-10-28 23:32:47705 days ago1666999967IN
0xE7d97474...859a51544
0 ETH0.0020290910.29632754
Stake158498632022-10-28 23:32:35705 days ago1666999955IN
0xE7d97474...859a51544
0 ETH0.0023310310.62794737
Set Staking Enab...158467202022-10-28 13:00:47705 days ago1666962047IN
0xE7d97474...859a51544
0 ETH0.000641412.3748452
Reset Staking158467102022-10-28 12:58:47705 days ago1666961927IN
0xE7d97474...859a51544
0 ETH0.000526499.83552919
Claim Prize158466982022-10-28 12:56:23705 days ago1666961783IN
0xE7d97474...859a51544
0 ETH0.00146112
Set Winning Pool158466932022-10-28 12:55:23705 days ago1666961723IN
0xE7d97474...859a51544
0 ETH0.0012602712.7897698
Set Staking Enab...158466922022-10-28 12:55:11705 days ago1666961711IN
0xE7d97474...859a51544
0 ETH0.000381112.74520292
Set Deposit Fee158463472022-10-28 11:45:59705 days ago1666957559IN
0xE7d97474...859a51544
0 ETH0.000263429.0514521
Stake158463182022-10-28 11:39:59705 days ago1666957199IN
0xE7d97474...859a51544
0 ETH0.001629310
Stake158459802022-10-28 10:32:23705 days ago1666953143IN
0xE7d97474...859a51544
0 ETH0.0016285810
Stake158459122022-10-28 10:18:47705 days ago1666952327IN
0xE7d97474...859a51544
0 ETH0.0019542912
Stake158459042022-10-28 10:17:11705 days ago1666952231IN
0xE7d97474...859a51544
0 ETH0.0019542912
Stake158458662022-10-28 10:09:35705 days ago1666951775IN
0xE7d97474...859a51544
0 ETH0.0021180913
Stake158458572022-10-28 10:07:47705 days ago1666951667IN
0xE7d97474...859a51544
0 ETH0.0024428715
Stake158455102022-10-28 8:58:11706 days ago1666947491IN
0xE7d97474...859a51544
0 ETH0.0016285810
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:
AegisStaking

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-23
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * Multiple authorisation system.
 */
abstract contract Auth {

    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

/**
 * @dev Representation of a fraction
 */
struct Fraction {
	uint16 numerator;
	uint16 denominator;
}

/**
 * @dev Describes each possible pool status: Inactive it did not begin yet, active people can stake and unstake,
 * finished means the staking is over but the prize has not yet been entirely given, cleared means this match is entirely over and stakes done.
 */
enum Status {
	INACTIVE,
	ACTIVE,
	FINISHED,
	CLEARED
}

/**
 * @dev There are two pools to bet on when staking, pool A and pool B.
 * pool A is the ID 0 and pool B is the id 1.
 */
struct Match {
	bool stakingEnabled;
	int8 winningPool;
	mapping (uint256 => uint256) poolStakedTokens;
	mapping (uint256 => mapping (address => uint256)) poolStakes;
	Status matchStatus;
	uint256 totalPrize;
	uint256 winningPoolTokens;
	uint256 iteration;
}

contract AegisStaking is Auth {
	address public stakingToken;
	Fraction internal depositFee = Fraction(1, 4);
	address internal feeReceiver;
	Match internal stakingMatch;
	uint256 internal reentrancyStatus;

	event Stake(address indexed staker, uint256 indexed poolId, uint256 amount);
	event Unstake(address indexed staker, uint256 indexed poolId, uint256 amount);
	event WinningPool(uint256 indexed poolId);
	event NewStakingPools();
	event StakingOpen();
	event StakingClosed();

	constructor(address t, address fr) Auth(msg.sender) {
		stakingToken = t;
		feeReceiver = fr;
		stakingMatch.winningPool = -1;
		stakingMatch.matchStatus = Status.ACTIVE;
		stakingMatch.stakingEnabled = true;
		stakingMatch.iteration = 1;
	}

	modifier validPool(uint256 poolId) {
		require(poolId == 0 || poolId == 1, "Only valid pool IDs are 0 and 1.");
		_;
	}

	modifier validTokenAmount(uint256 amount) {
		require(amount > 0, "Amount needs to be bigger than 0");
		_;
	}

	modifier stakingIsEnabled {
		require(stakingMatch.stakingEnabled, "Staking is not currently enabled.");
		_;
	}

	modifier nonReentrant() {
        require(reentrancyStatus == 0, "Reentrant call");
		reentrancyStatus = 1;
        _;
        reentrancyStatus = 0;
    }

	/**
	 * @dev Add your betting stake to a pool.
	 */
	function stake(uint256 externalPoolId, uint256 amount) external validPool(externalPoolId) validTokenAmount(amount) stakingIsEnabled nonReentrant {
		// Transfer tokens from the owner to the staking contract.
		IERC20(stakingToken).transferFrom(msg.sender, address(this), amount);

		// If appliable, get the deposit fee and send to the set receiver.
		uint256 toStake = amount;
		Fraction memory df = depositFee;
		if (df.numerator > 0 && df.denominator > 0) {
			uint256 fee = amount * df.numerator / df.denominator;
			toStake = amount - fee;
			IERC20(stakingToken).transfer(feeReceiver, fee);
		}

		uint256 realPoolId = getRealPoolID(externalPoolId);

		// Add stake to corresponding pool.
		stakeFor(msg.sender, realPoolId, toStake);

		emit Stake(msg.sender, externalPoolId, toStake);
	}

	function stakeFor(address staker, uint256 realPoolId, uint256 amount) internal {
		stakingMatch.poolStakes[realPoolId][staker] += amount;
		stakingMatch.poolStakedTokens[realPoolId] += amount;
	}

	function getRealPoolID(uint256 externalPoolId) internal view returns (uint256) {
		uint256 realPoolId;
		if (externalPoolId == 0) {
			realPoolId = getPoolAID();
		} else {
			realPoolId = getPoolBID();
		}

		return realPoolId;
	}

	/**
	 * @dev Unstake to remove part or the entirety of a stake.
	 */
	function unstake(uint256 externalPoolId, uint256 amount) external validPool(externalPoolId) validTokenAmount(amount) stakingIsEnabled nonReentrant {
		uint256 realPoolId = getRealPoolID(externalPoolId);
		uint256 toUnstake = unstakeFor(msg.sender, realPoolId, amount);
		if (toUnstake > 0) {
			IERC20(stakingToken).transfer(msg.sender, toUnstake);

			emit Unstake(msg.sender, externalPoolId, toUnstake);
		}
	}

	function unstakeFor(address staker, uint256 realPoolId, uint256 amount) internal returns (uint256) {
		// Check staked tokens status and update the amount.
		uint256 toUnstake = amount;

		if (stakingMatch.poolStakes[realPoolId][staker] == 0) {
			return 0;
		}
		// If attempting to unstake more than staked simply unstake all at once.
		if (amount > stakingMatch.poolStakes[realPoolId][staker]) {
			toUnstake = stakingMatch.poolStakes[realPoolId][staker];
		}
		stakingMatch.poolStakes[realPoolId][staker] -= toUnstake;
		stakingMatch.poolStakedTokens[realPoolId] -= toUnstake;

		return toUnstake;
	}

	function setWinningPool(uint256 externalPoolId) external validPool(externalPoolId) authorized {
		require(stakingMatch.matchStatus == Status.INACTIVE, "The staking must have been closed before picking a winning pool.");
		stakingMatch.matchStatus = Status.FINISHED;
		stakingMatch.winningPool = int8(uint8(externalPoolId));
		uint256 realAID = getPoolAID();
		uint256 realBID = getPoolBID();
		uint256 poolAStake = stakingMatch.poolStakedTokens[realAID];
		uint256 poolBStake = stakingMatch.poolStakedTokens[realBID];

		stakingMatch.totalPrize = externalPoolId == 0 ? poolBStake : poolAStake;
		stakingMatch.winningPoolTokens = externalPoolId == 0 ? poolAStake : poolBStake;

		emit WinningPool(externalPoolId);
	}

	/**
	 * @dev Sets which address receives the deposit fee.
	 */
	function setFeeReceiver(address newFeeReceier) external authorized {
		feeReceiver = newFeeReceier;
	}

	function setDepositFee(uint16 numerator, uint16 denominator) external authorized {
		depositFee.numerator = numerator;
		depositFee.denominator = denominator;
	}

	function getTotalStakedTokens() public view returns (uint256) {
		uint256 realAID = getPoolAID();
		uint256 realBID = getPoolBID();
		uint256 poolAStake = stakingMatch.poolStakedTokens[realAID];
		uint256 poolBStake = stakingMatch.poolStakedTokens[realBID];
		return poolAStake + poolBStake;
	}

	function getPoolAStakedTokens() external view returns (uint256) {
		uint256 poolAID = getPoolAID();
		return stakingMatch.poolStakedTokens[poolAID];
	}

	function getPoolBStakedTokens() external view returns (uint256) {
		uint256 poolBID = getPoolBID();
		return stakingMatch.poolStakedTokens[poolBID];
	}

	function getUserStakedTokens(address user, uint256 externalPoolId) public view returns (uint256) {
		uint256 realPoolId = getRealPoolID(externalPoolId);
		return stakingMatch.poolStakes[realPoolId][user];
	}

	function isStakingEnabled() external view returns (bool) {
		return stakingMatch.stakingEnabled;
	}

	function getCurrentStakingStatus() public view returns (Status) {
		return stakingMatch.matchStatus;
	}

	function getTotalPrize() external view returns (uint256) {
		return stakingMatch.totalPrize;
	}

	function getWinningPoolTokens() external view returns (uint256) {
		return stakingMatch.winningPoolTokens;
	}

	function getWinningPool() external view returns (int8) {
		return stakingMatch.winningPool;
	}

	function setStakingEnabled(bool enabled) external authorized {
		if (enabled) {
			// Enable staking from either uninitialised state or restarting the stake before a winner is picked.
			require(stakingMatch.matchStatus == Status.INACTIVE, "Staking must be inactive.");
			stakingMatch.stakingEnabled = true;
			stakingMatch.matchStatus = Status.ACTIVE;

			emit StakingOpen();
		} else {
			// Turn staking off in order to decide a winning pool or to temporarily pause the stake process.
			require(stakingMatch.matchStatus == Status.ACTIVE, "Staking must be active.");
			stakingMatch.stakingEnabled = false;
			stakingMatch.matchStatus = Status.INACTIVE;

			emit StakingClosed();
		}
	}

	function forcePayout(address staker) external authorized {
		processPayout(staker);
	}

	function claimPrize() external {
		processPayout(msg.sender);
	}

	/**
	 * @dev Claim the stake and prize from a winning pool stake.
	 */
	function processPayout(address staker) internal nonReentrant {
		require(stakingMatch.matchStatus == Status.FINISHED, "Winning bets can only be claimed when a winning pool has been decided.");
		uint256 win = uint256(uint8(stakingMatch.winningPool));
		require(win == 0 || win == 1, "Winning pool is not correctly set!");
		uint256 stakedTokens = getUserStakedTokens(staker, win);
		require(stakedTokens > 0, "No stake on winning pool.");
		uint256 prize = getUserPrize(staker);
		require(prize > 0, "No prize to claim.");
		uint256 toGive = prize + stakedTokens;

		// Reset staking for user.
		uint256 realPoolId = getRealPoolID(win);
		stakingMatch.poolStakes[realPoolId][staker] = 0;
		stakingMatch.poolStakedTokens[realPoolId] -= stakedTokens;
		if (stakingMatch.poolStakedTokens[realPoolId] == 0) {
			stakingMatch.matchStatus = Status.CLEARED;
		}

		IERC20(stakingToken).transfer(staker, toGive);
	}

	function resetStaking() external authorized {
		require(
			stakingMatch.matchStatus == Status.CLEARED || getTotalStakedTokens() == 0,
			"New staking can only be started when previous one is cleared."
		);
		stakingMatch.winningPool = -1;
		stakingMatch.matchStatus = Status.INACTIVE;
		stakingMatch.iteration += 1;
		stakingMatch.stakingEnabled = false;
		stakingMatch.totalPrize = 0;
		stakingMatch.winningPoolTokens = 0;

		emit NewStakingPools();
	}

	/**
	 * @dev Gets the price for a specific staker.
	 */
	function getUserPrize(address staker) public view returns (uint256) {
		uint256 stakedTokens;
		uint256 realPoolID;
		int8 win = stakingMatch.winningPool;

		// Wrongly set winning pool.
		if (win < 0 || win > 1) {
			return 0;
		}

		// Winner is pool A.
		if (win == 0) {
			realPoolID = getPoolAID();
		} else {
			// Winner is pool B.
			realPoolID = getPoolBID();
		}
		stakedTokens = stakingMatch.poolStakes[realPoolID][staker];
		if (stakedTokens > 0) {
			return calculatePrize(stakedTokens, stakingMatch.winningPoolTokens, stakingMatch.totalPrize);
		}

		return 0;
	}

	/**
	 * @dev Calculates a price from the total prize and stake in a pool.
	 */
	function calculatePrize(uint256 stakedTokens, uint256 totalPoolStake, uint256 prize) public pure returns (uint256) {
		if (stakedTokens == 0 || totalPoolStake == 0 || prize == 0) {
			return 0;
		}
		// Factor used to avoid losing digits to rounding.
		uint256 factor = 10000;
		uint256 part = stakedTokens * factor / totalPoolStake;
		return part * prize / factor;
	}

	function recoverDust() external authorized {
		require(stakingMatch.matchStatus == Status.CLEARED, "Requires all prizes to have been given out.");
		IERC20 st = IERC20(stakingToken);
		st.transfer(feeReceiver, st.balanceOf(address(this)));
	}

	/**
	 * @dev Internal pool IDs. Public IDs are always 0 for A and 1 for B.
	 */
	function getPoolAID() public view returns (uint256) {
		return stakingMatch.iteration * 2 - 1;
	}

	function getPoolBID() public view returns (uint256) {
		return stakingMatch.iteration * 2;
	}

	function getCurrentIteration() external view returns (uint256) {
		return stakingMatch.iteration;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"t","type":"address"},{"internalType":"address","name":"fr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"NewStakingPools","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[],"name":"StakingClosed","type":"event"},{"anonymous":false,"inputs":[],"name":"StakingOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"WinningPool","type":"event"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakedTokens","type":"uint256"},{"internalType":"uint256","name":"totalPoolStake","type":"uint256"},{"internalType":"uint256","name":"prize","type":"uint256"}],"name":"calculatePrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"claimPrize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"forcePayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentIteration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentStakingStatus","outputs":[{"internalType":"enum Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolAID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolAStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolBID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolBStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUserPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"externalPoolId","type":"uint256"}],"name":"getUserStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinningPool","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWinningPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"numerator","type":"uint16"},{"internalType":"uint16","name":"denominator","type":"uint16"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeReceier","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStakingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"externalPoolId","type":"uint256"}],"name":"setWinningPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"externalPoolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"externalPoolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001608052600460a0526003805463ffffffff1916620400011790553480156200002d57600080fd5b5060405162001f8838038062001f888339810160408190526200005091620000ea565b60008054336001600160a01b0319918216811783558252600160208190526040909220805460ff1990811684179091556002805483166001600160a01b039687161790556004805490921693909416929092179091556005805460088054909416831790935561ffff1990921661ff0117909155600b5562000122565b80516001600160a01b0381168114620000e557600080fd5b919050565b60008060408385031215620000fe57600080fd5b6200010983620000cd565b91506200011960208401620000cd565b90509250929050565b611e5680620001326000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80639e2c8a5b11610104578063efdcd974116100a2578063f589e38211610071578063f589e382146103a9578063f5fa0113146103b1578063f93b03bc146103c4578063fe9fbb80146103d757600080fd5b8063efdcd9741461035d578063f0b37c0414610370578063f2fde38b14610383578063f3409fa31461039657600080fd5b8063bce8567e116100de578063bce8567e1461032f578063db2793de14610342578063e29a93701461034a578063e35bed261461035557600080fd5b80639e2c8a5b14610301578063adeaa85114610314578063b6a5d7de1461031c57600080fd5b80635af098d91161017c57806372f702f31161014b57806372f702f3146102a257806375f47da5146102cd5780637a02a973146102e65780637b0472f0146102ee57600080fd5b80635af098d91461027757806360ea98591461028a5780636faabf5f1461029257806370740ac91461029a57600080fd5b806326e90775116101b857806326e90775146102225780632f54bf6e1461023557806348e37cc51461026757806351d185981461026f57600080fd5b8063028da340146101df5780630bcdec0014610205578063218a69851461020d575b600080fd5b6101f26101ed366004611bae565b610403565b6040519081526020015b60405180910390f35b600a546101f2565b61022061021b366004611bae565b6104aa565b005b6101f2610230366004611bcb565b61051a565b610257610243366004611bae565b6000546001600160a01b0391821691161490565b60405190151581526020016101fc565b6101f261057a565b6101f261059a565b60085460ff166040516101fc9190611c26565b6101f26105de565b600b546101f2565b6102206105f4565b6002546102b5906001600160a01b031681565b6040516001600160a01b0390911681526020016101fc565b60055460405161010090910460000b81526020016101fc565b6102206105ff565b6102206102fc366004611c67565b61078a565b61022061030f366004611c67565b610b05565b6009546101f2565b61022061032a366004611bae565b610d73565b61022061033d366004611c97565b610df4565b610220610fb0565b60055460ff16610257565b6101f26111c0565b61022061036b366004611bae565b6111cb565b61022061037e366004611bae565b611264565b610220610391366004611bae565b6112df565b6102206103a4366004611ccb565b6113bd565b6101f261145f565b6102206103bf366004611cfe565b61147d565b6101f26103d2366004611d17565b611689565b6102576103e5366004611bae565b6001600160a01b031660009081526001602052604090205460ff1690565b600554600090819081906101009004810b81811280610425575060018160000b135b1561043557506000949350505050565b8060000b60000361044f5761044861145f565b915061045a565b6104576105de565b91505b60008281526007602090815260408083206001600160a01b03891684529091529020549250821561049f57600a5460095461049691859161051a565b95945050505050565b506000949350505050565b3360009081526001602052604090205460ff1661050e5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a454400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b610517816116c2565b50565b6000831580610527575082155b80610530575081155b1561053d57506000610573565b61271060008461054d8388611d72565b6105579190611d89565b9050816105648583611d72565b61056e9190611d89565b925050505b9392505050565b6000806105856105de565b60009081526006602052604090205492915050565b6000806105a561145f565b905060006105b16105de565b60008381526006602052604080822054838352912054919250906105d58183611dc4565b94505050505090565b600b546000906105ef906002611d72565b905090565b6105fd336116c2565b565b3360009081526001602052604090205460ff1661065e5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600360085460ff16600381111561067757610677611bf7565b1480610688575061068661059a565b155b6106fa5760405162461bcd60e51b815260206004820152603d60248201527f4e6577207374616b696e672063616e206f6e6c7920626520737461727465642060448201527f7768656e2070726576696f7573206f6e6520697320636c65617265642e0000006064820152608401610505565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661ff001790556008805460ff19169055600b805460019190600090610746908490611dc4565b90915550506005805460ff1916905560006009819055600a8190556040517f86309a62863391b778982dbd53cd7130bb1998117eb485fbe4c1c83d2797858d9190a1565b818015806107985750806001145b6107e45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b81600081116108355760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206e6565647320746f20626520626967676572207468616e20306044820152606401610505565b60055460ff166108ad5760405162461bcd60e51b815260206004820152602160248201527f5374616b696e67206973206e6f742063757272656e746c7920656e61626c656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600c54156108fd5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c556002546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109969190611dd7565b506040805180820190915260035461ffff80821680845262010000909204166020830152849190158015906109d357506000816020015161ffff16115b15610aa8576000816020015161ffff16826000015161ffff16876109f79190611d72565b610a019190611d89565b9050610a0d8187611df4565b600254600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216928101929092526024820185905292955091169063a9059cbb906044016020604051808303816000875af1158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa59190611dd7565b50505b6000610ab387611a31565b9050610ac0338285611a53565b604051838152879033907f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b69060200160405180910390a350506000600c555050505050565b81801580610b135750806001145b610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b8160008111610bb05760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206e6565647320746f20626520626967676572207468616e20306044820152606401610505565b60055460ff16610c285760405162461bcd60e51b815260206004820152602160248201527f5374616b696e67206973206e6f742063757272656e746c7920656e61626c656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600c5415610c785760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c556000610c8885611a31565b90506000610c97338387611ab2565b90508015610d66576002546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190611dd7565b50604051818152869033907ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb2809060200160405180910390a35b50506000600c5550505050565b6000546001600160a01b03163314610dcd5760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16610e535760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b8015610f0857600060085460ff166003811115610e7257610e72611bf7565b14610ebf5760405162461bcd60e51b815260206004820152601960248201527f5374616b696e67206d75737420626520696e6163746976652e000000000000006044820152606401610505565b60058054600160ff1991821681179092556008805490911690911790556040517f498c93799a3655388526fc8a7d51b9a969053b6f047380f4f16a8e311b313a3790600090a150565b600160085460ff166003811115610f2157610f21611bf7565b14610f6e5760405162461bcd60e51b815260206004820152601760248201527f5374616b696e67206d757374206265206163746976652e0000000000000000006044820152606401610505565b6005805460ff199081169091556008805490911690556040517f5e0ff495077a830a1f92088545bae65274cc65d979385b39703c9fc05f2dc42090600090a150565b3360009081526001602052604090205460ff1661100f5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600360085460ff16600381111561102857611028611bf7565b1461109b5760405162461bcd60e51b815260206004820152602b60248201527f526571756972657320616c6c207072697a657320746f2068617665206265656e60448201527f20676976656e206f75742e0000000000000000000000000000000000000000006064820152608401610505565b600254600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0392831692839263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111359190611e07565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611dd7565b5050565b60008061058561145f565b3360009081526001602052604090205460ff1661122a5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146113395760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b3360009081526001602052604090205460ff1661141c5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b6003805461ffff92831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091169290931691909117919091179055565b600b54600090600190611473906002611d72565b6105ef9190611df4565b8080158061148b5750806001145b6114d75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b3360009081526001602052604090205460ff166115365760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600060085460ff16600381111561154f5761154f611bf7565b146115c4576040805162461bcd60e51b81526020600482015260248101919091527f546865207374616b696e67206d7573742068617665206265656e20636c6f736560448201527f64206265666f7265207069636b696e6720612077696e6e696e6720706f6f6c2e6064820152608401610505565b6008805460ff191660021790556005805460ff8416610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055600061160e61145f565b9050600061161a6105de565b600083815260066020526040808220548383529120549192509085156116405781611642565b805b60095585156116515780611653565b815b600a5560405186907fe2d4f35ba735bbd93e2a0771ab147b23e8e4adad5031fe0511546252d9b4e6e490600090a2505050505050565b60008061169583611a31565b60009081526007602090815260408083206001600160a01b03881684529091529020549150505b92915050565b600c54156117125760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c55600260085460ff16600381111561173057611730611bf7565b146117c95760405162461bcd60e51b815260206004820152604660248201527f57696e6e696e6720626574732063616e206f6e6c7920626520636c61696d656460448201527f207768656e20612077696e6e696e6720706f6f6c20686173206265656e20646560648201527f63696465642e0000000000000000000000000000000000000000000000000000608482015260a401610505565b600554610100900460ff168015806117e15750806001145b6118535760405162461bcd60e51b815260206004820152602260248201527f57696e6e696e6720706f6f6c206973206e6f7420636f72726563746c7920736560448201527f74210000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600061185f8383611689565b9050600081116118b15760405162461bcd60e51b815260206004820152601960248201527f4e6f207374616b65206f6e2077696e6e696e6720706f6f6c2e000000000000006044820152606401610505565b60006118bc84610403565b90506000811161190e5760405162461bcd60e51b815260206004820152601260248201527f4e6f207072697a6520746f20636c61696d2e00000000000000000000000000006044820152606401610505565b600061191a8383611dc4565b9050600061192785611a31565b60008181526007602090815260408083206001600160a01b038b1684528252808320839055838352600690915281208054929350869290919061196b908490611df4565b90915550506000818152600660205260408120549003611993576008805460ff191660031790555b6002546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af11580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a239190611dd7565b50506000600c555050505050565b60008082600003611a4b57611a4461145f565b90506116bc565b6105736105de565b60008281526007602090815260408083206001600160a01b038716845290915281208054839290611a85908490611dc4565b909155505060008281526006602052604081208054839290611aa8908490611dc4565b9091555050505050565b60008281526007602090815260408083206001600160a01b038716845290915281205482908203611ae7576000915050610573565b60008481526007602090815260408083206001600160a01b0389168452909152902054831115611b36575060008381526007602090815260408083206001600160a01b03881684529091529020545b60008481526007602090815260408083206001600160a01b038916845290915281208054839290611b68908490611df4565b909155505060008481526006602052604081208054839290611b8b908490611df4565b909155509095945050505050565b6001600160a01b038116811461051757600080fd5b600060208284031215611bc057600080fd5b813561057381611b99565b600080600060608486031215611be057600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160048310611c61577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611c7a57600080fd5b50508035926020909101359150565b801515811461051757600080fd5b600060208284031215611ca957600080fd5b813561057381611c89565b803561ffff81168114611cc657600080fd5b919050565b60008060408385031215611cde57600080fd5b611ce783611cb4565b9150611cf560208401611cb4565b90509250929050565b600060208284031215611d1057600080fd5b5035919050565b60008060408385031215611d2a57600080fd5b8235611d3581611b99565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176116bc576116bc611d43565b600082611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808201808211156116bc576116bc611d43565b600060208284031215611de957600080fd5b815161057381611c89565b818103818111156116bc576116bc611d43565b600060208284031215611e1957600080fd5b505191905056fea26469706673582212208ea5765c814fa1b507e82eb26c870fe1b9d963d1f34e455b2edb9c7c10c89de864736f6c634300081100330000000000000000000000003e4c87bf57d48935d1643a7b8a3383b928b040de00000000000000000000000010b665a34088e489dffce90a520dcc44d2a7d537

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80639e2c8a5b11610104578063efdcd974116100a2578063f589e38211610071578063f589e382146103a9578063f5fa0113146103b1578063f93b03bc146103c4578063fe9fbb80146103d757600080fd5b8063efdcd9741461035d578063f0b37c0414610370578063f2fde38b14610383578063f3409fa31461039657600080fd5b8063bce8567e116100de578063bce8567e1461032f578063db2793de14610342578063e29a93701461034a578063e35bed261461035557600080fd5b80639e2c8a5b14610301578063adeaa85114610314578063b6a5d7de1461031c57600080fd5b80635af098d91161017c57806372f702f31161014b57806372f702f3146102a257806375f47da5146102cd5780637a02a973146102e65780637b0472f0146102ee57600080fd5b80635af098d91461027757806360ea98591461028a5780636faabf5f1461029257806370740ac91461029a57600080fd5b806326e90775116101b857806326e90775146102225780632f54bf6e1461023557806348e37cc51461026757806351d185981461026f57600080fd5b8063028da340146101df5780630bcdec0014610205578063218a69851461020d575b600080fd5b6101f26101ed366004611bae565b610403565b6040519081526020015b60405180910390f35b600a546101f2565b61022061021b366004611bae565b6104aa565b005b6101f2610230366004611bcb565b61051a565b610257610243366004611bae565b6000546001600160a01b0391821691161490565b60405190151581526020016101fc565b6101f261057a565b6101f261059a565b60085460ff166040516101fc9190611c26565b6101f26105de565b600b546101f2565b6102206105f4565b6002546102b5906001600160a01b031681565b6040516001600160a01b0390911681526020016101fc565b60055460405161010090910460000b81526020016101fc565b6102206105ff565b6102206102fc366004611c67565b61078a565b61022061030f366004611c67565b610b05565b6009546101f2565b61022061032a366004611bae565b610d73565b61022061033d366004611c97565b610df4565b610220610fb0565b60055460ff16610257565b6101f26111c0565b61022061036b366004611bae565b6111cb565b61022061037e366004611bae565b611264565b610220610391366004611bae565b6112df565b6102206103a4366004611ccb565b6113bd565b6101f261145f565b6102206103bf366004611cfe565b61147d565b6101f26103d2366004611d17565b611689565b6102576103e5366004611bae565b6001600160a01b031660009081526001602052604090205460ff1690565b600554600090819081906101009004810b81811280610425575060018160000b135b1561043557506000949350505050565b8060000b60000361044f5761044861145f565b915061045a565b6104576105de565b91505b60008281526007602090815260408083206001600160a01b03891684529091529020549250821561049f57600a5460095461049691859161051a565b95945050505050565b506000949350505050565b3360009081526001602052604090205460ff1661050e5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a454400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b610517816116c2565b50565b6000831580610527575082155b80610530575081155b1561053d57506000610573565b61271060008461054d8388611d72565b6105579190611d89565b9050816105648583611d72565b61056e9190611d89565b925050505b9392505050565b6000806105856105de565b60009081526006602052604090205492915050565b6000806105a561145f565b905060006105b16105de565b60008381526006602052604080822054838352912054919250906105d58183611dc4565b94505050505090565b600b546000906105ef906002611d72565b905090565b6105fd336116c2565b565b3360009081526001602052604090205460ff1661065e5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600360085460ff16600381111561067757610677611bf7565b1480610688575061068661059a565b155b6106fa5760405162461bcd60e51b815260206004820152603d60248201527f4e6577207374616b696e672063616e206f6e6c7920626520737461727465642060448201527f7768656e2070726576696f7573206f6e6520697320636c65617265642e0000006064820152608401610505565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661ff001790556008805460ff19169055600b805460019190600090610746908490611dc4565b90915550506005805460ff1916905560006009819055600a8190556040517f86309a62863391b778982dbd53cd7130bb1998117eb485fbe4c1c83d2797858d9190a1565b818015806107985750806001145b6107e45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b81600081116108355760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206e6565647320746f20626520626967676572207468616e20306044820152606401610505565b60055460ff166108ad5760405162461bcd60e51b815260206004820152602160248201527f5374616b696e67206973206e6f742063757272656e746c7920656e61626c656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600c54156108fd5760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c556002546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109969190611dd7565b506040805180820190915260035461ffff80821680845262010000909204166020830152849190158015906109d357506000816020015161ffff16115b15610aa8576000816020015161ffff16826000015161ffff16876109f79190611d72565b610a019190611d89565b9050610a0d8187611df4565b600254600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216928101929092526024820185905292955091169063a9059cbb906044016020604051808303816000875af1158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa59190611dd7565b50505b6000610ab387611a31565b9050610ac0338285611a53565b604051838152879033907f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b69060200160405180910390a350506000600c555050505050565b81801580610b135750806001145b610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b8160008111610bb05760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206e6565647320746f20626520626967676572207468616e20306044820152606401610505565b60055460ff16610c285760405162461bcd60e51b815260206004820152602160248201527f5374616b696e67206973206e6f742063757272656e746c7920656e61626c656460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600c5415610c785760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c556000610c8885611a31565b90506000610c97338387611ab2565b90508015610d66576002546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190611dd7565b50604051818152869033907ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb2809060200160405180910390a35b50506000600c5550505050565b6000546001600160a01b03163314610dcd5760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16610e535760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b8015610f0857600060085460ff166003811115610e7257610e72611bf7565b14610ebf5760405162461bcd60e51b815260206004820152601960248201527f5374616b696e67206d75737420626520696e6163746976652e000000000000006044820152606401610505565b60058054600160ff1991821681179092556008805490911690911790556040517f498c93799a3655388526fc8a7d51b9a969053b6f047380f4f16a8e311b313a3790600090a150565b600160085460ff166003811115610f2157610f21611bf7565b14610f6e5760405162461bcd60e51b815260206004820152601760248201527f5374616b696e67206d757374206265206163746976652e0000000000000000006044820152606401610505565b6005805460ff199081169091556008805490911690556040517f5e0ff495077a830a1f92088545bae65274cc65d979385b39703c9fc05f2dc42090600090a150565b3360009081526001602052604090205460ff1661100f5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600360085460ff16600381111561102857611028611bf7565b1461109b5760405162461bcd60e51b815260206004820152602b60248201527f526571756972657320616c6c207072697a657320746f2068617665206265656e60448201527f20676976656e206f75742e0000000000000000000000000000000000000000006064820152608401610505565b600254600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0392831692839263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111359190611e07565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611dd7565b5050565b60008061058561145f565b3360009081526001602052604090205460ff1661122a5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146113395760405162461bcd60e51b815260206004820152600660248201527f214f574e455200000000000000000000000000000000000000000000000000006044820152606401610505565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b3360009081526001602052604090205460ff1661141c5760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b6003805461ffff92831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091169290931691909117919091179055565b600b54600090600190611473906002611d72565b6105ef9190611df4565b8080158061148b5750806001145b6114d75760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792076616c696420706f6f6c2049447320617265203020616e6420312e6044820152606401610505565b3360009081526001602052604090205460ff166115365760405162461bcd60e51b815260206004820152600b60248201527f21415554484f52495a45440000000000000000000000000000000000000000006044820152606401610505565b600060085460ff16600381111561154f5761154f611bf7565b146115c4576040805162461bcd60e51b81526020600482015260248101919091527f546865207374616b696e67206d7573742068617665206265656e20636c6f736560448201527f64206265666f7265207069636b696e6720612077696e6e696e6720706f6f6c2e6064820152608401610505565b6008805460ff191660021790556005805460ff8416610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116179055600061160e61145f565b9050600061161a6105de565b600083815260066020526040808220548383529120549192509085156116405781611642565b805b60095585156116515780611653565b815b600a5560405186907fe2d4f35ba735bbd93e2a0771ab147b23e8e4adad5031fe0511546252d9b4e6e490600090a2505050505050565b60008061169583611a31565b60009081526007602090815260408083206001600160a01b03881684529091529020549150505b92915050565b600c54156117125760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610505565b6001600c55600260085460ff16600381111561173057611730611bf7565b146117c95760405162461bcd60e51b815260206004820152604660248201527f57696e6e696e6720626574732063616e206f6e6c7920626520636c61696d656460448201527f207768656e20612077696e6e696e6720706f6f6c20686173206265656e20646560648201527f63696465642e0000000000000000000000000000000000000000000000000000608482015260a401610505565b600554610100900460ff168015806117e15750806001145b6118535760405162461bcd60e51b815260206004820152602260248201527f57696e6e696e6720706f6f6c206973206e6f7420636f72726563746c7920736560448201527f74210000000000000000000000000000000000000000000000000000000000006064820152608401610505565b600061185f8383611689565b9050600081116118b15760405162461bcd60e51b815260206004820152601960248201527f4e6f207374616b65206f6e2077696e6e696e6720706f6f6c2e000000000000006044820152606401610505565b60006118bc84610403565b90506000811161190e5760405162461bcd60e51b815260206004820152601260248201527f4e6f207072697a6520746f20636c61696d2e00000000000000000000000000006044820152606401610505565b600061191a8383611dc4565b9050600061192785611a31565b60008181526007602090815260408083206001600160a01b038b1684528252808320839055838352600690915281208054929350869290919061196b908490611df4565b90915550506000818152600660205260408120549003611993576008805460ff191660031790555b6002546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af11580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a239190611dd7565b50506000600c555050505050565b60008082600003611a4b57611a4461145f565b90506116bc565b6105736105de565b60008281526007602090815260408083206001600160a01b038716845290915281208054839290611a85908490611dc4565b909155505060008281526006602052604081208054839290611aa8908490611dc4565b9091555050505050565b60008281526007602090815260408083206001600160a01b038716845290915281205482908203611ae7576000915050610573565b60008481526007602090815260408083206001600160a01b0389168452909152902054831115611b36575060008381526007602090815260408083206001600160a01b03881684529091529020545b60008481526007602090815260408083206001600160a01b038916845290915281208054839290611b68908490611df4565b909155505060008481526006602052604081208054839290611b8b908490611df4565b909155509095945050505050565b6001600160a01b038116811461051757600080fd5b600060208284031215611bc057600080fd5b813561057381611b99565b600080600060608486031215611be057600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160048310611c61577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611c7a57600080fd5b50508035926020909101359150565b801515811461051757600080fd5b600060208284031215611ca957600080fd5b813561057381611c89565b803561ffff81168114611cc657600080fd5b919050565b60008060408385031215611cde57600080fd5b611ce783611cb4565b9150611cf560208401611cb4565b90509250929050565b600060208284031215611d1057600080fd5b5035919050565b60008060408385031215611d2a57600080fd5b8235611d3581611b99565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176116bc576116bc611d43565b600082611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808201808211156116bc576116bc611d43565b600060208284031215611de957600080fd5b815161057381611c89565b818103818111156116bc576116bc611d43565b600060208284031215611e1957600080fd5b505191905056fea26469706673582212208ea5765c814fa1b507e82eb26c870fe1b9d963d1f34e455b2edb9c7c10c89de864736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003e4c87bf57d48935d1643a7b8a3383b928b040de00000000000000000000000010b665a34088e489dffce90a520dcc44d2a7d537

-----Decoded View---------------
Arg [0] : t (address): 0x3e4c87bf57d48935d1643A7b8a3383B928B040de
Arg [1] : fr (address): 0x10b665a34088e489DffCe90A520DCC44D2A7d537

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e4c87bf57d48935d1643a7b8a3383b928b040de
Arg [1] : 00000000000000000000000010b665a34088e489dffce90a520dcc44d2a7d537


Deployed Bytecode Sourcemap

2735:10301:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11323:600;;;;;;:::i;:::-;;:::i;:::-;;;571:25:1;;;559:2;544:18;11323:600:0;;;;;;;;8693:111;8769:30;;8693:111;;9621:88;;;;;;:::i;:::-;;:::i;:::-;;12011:376;;;;;;:::i;:::-;;:::i;1432:103::-;;;;;;:::i;:::-;1487:4;1522:5;-1:-1:-1;;;;;1511:16:0;;;1522:5;;1511:16;;1432:103;;;;1093:14:1;;1086:22;1068:41;;1056:2;1041:18;1432:103:0;928:187:1;8001:154:0;;;:::i;7537:300::-;;;:::i;8481:105::-;8557:24;;;;8481:105;;;;;;:::i;12831:95::-;;;:::i;12931:102::-;13006:22;;12931:102;;9714:66;;;:::i;2769:27::-;;;;;-1:-1:-1;;;;;2769:27:0;;;;;;-1:-1:-1;;;;;1873:55:1;;;1855:74;;1843:2;1828:18;2769:27:0;1709:226:1;8809:96:0;8876:12;:24;8809:96;;8876:24;;;;8858:4;8876:24;2080:40:1;;2068:2;2053:18;8809:96:0;1940:186:1;10791:467:0;;;:::i;4071:813::-;;;;;;:::i;:::-;;:::i;5410:420::-;;;;;;:::i;:::-;;:::i;8591:97::-;8660:23;;8591:97;;1225:94;;;;;;:::i;:::-;;:::i;8910:706::-;;;;;;:::i;:::-;;:::i;12392:246::-;;;:::i;8375:101::-;8444:12;:27;;;8375:101;;7842:154;;;:::i;7259:104::-;;;;;;:::i;:::-;;:::i;1327:97::-;;;;;;:::i;:::-;;:::i;1658:173::-;;;;;;:::i;:::-;;:::i;7368:164::-;;;;;;:::i;:::-;;:::i;12727:99::-;;;:::i;6459:728::-;;;;;;:::i;:::-;;:::i;8160:210::-;;;;;;:::i;:::-;;:::i;1543:107::-;;;;;;:::i;:::-;-1:-1:-1;;;;;1623:19:0;1599:4;1623:19;;;:14;:19;;;;;;;;;1543:107;11323:600;11455:12;:24;11382:7;;;;;;11455:24;;;;;11522:7;;;;:18;;;11539:1;11533:3;:7;;;11522:18;11518:44;;;-1:-1:-1;11555:1:0;;11323:600;-1:-1:-1;;;;11323:600:0:o;11518:44::-;11596:3;:8;;11603:1;11596:8;11592:119;;11625:12;:10;:12::i;:::-;11612:25;;11592:119;;;11693:12;:10;:12::i;:::-;11680:25;;11592:119;11730:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;11730:43:0;;;;;;;;;;;-1:-1:-1;11782:16:0;;11778:126;;11842:30;;11874:23;;11813:85;;11828:12;;11813:14;:85::i;:::-;11806:92;11323:600;-1:-1:-1;;;;;11323:600:0:o;11778:126::-;-1:-1:-1;11917:1:0;;11323:600;-1:-1:-1;;;;11323:600:0:o;9621:88::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;;;;;;;;;9683:21:::1;9697:6;9683:13;:21::i;:::-;9621:88:::0;:::o;12011:376::-;12117:7;12135:17;;;:40;;-1:-1:-1;12156:19:0;;12135:40;:54;;;-1:-1:-1;12179:10:0;;12135:54;12131:80;;;-1:-1:-1;12204:1:0;12197:8;;12131:80;12286:5;12269:14;12335;12311:21;12286:5;12311:12;:21;:::i;:::-;:38;;;;:::i;:::-;12296:53;-1:-1:-1;12376:6:0;12361:12;12368:5;12296:53;12361:12;:::i;:::-;:21;;;;:::i;:::-;12354:28;;;;12011:376;;;;;;:::o;8001:154::-;8056:7;8070:15;8088:12;:10;:12::i;:::-;8112:38;;;;:29;:38;;;;;;;8001:154;-1:-1:-1;;8001:154:0:o;7537:300::-;7590:7;7604:15;7622:12;:10;:12::i;:::-;7604:30;;7639:15;7657:12;:10;:12::i;:::-;7674:18;7695:38;;;:29;:38;;;;;;;7759;;;;;;7639:30;;-1:-1:-1;7695:38:0;7809:23;7759:38;7695;7809:23;:::i;:::-;7802:30;;;;;;7537:300;:::o;12831:95::-;12895:22;;12874:7;;12895:26;;12920:1;12895:26;:::i;:::-;12888:33;;12831:95;:::o;9714:66::-;9750:25;9764:10;9750:13;:25::i;:::-;9714:66::o;10791:467::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;3943:335:1;1158:48:0;10881:14:::1;10853:24:::0;;::::1;;;:42:::0;::::1;;;;;;:::i;:::-;;:73;;;;10899:22;:20;:22::i;:::-;:27:::0;10853:73:::1;10840:160;;;::::0;-1:-1:-1;;;10840:160:0;;5256:2:1;10840:160:0::1;::::0;::::1;5238:21:1::0;5295:2;5275:18;;;5268:30;5334:34;5314:18;;;5307:62;5405:31;5385:18;;;5378:59;5454:19;;10840:160:0::1;5054:425:1::0;10840:160:0::1;11005:12;:29:::0;;;::::1;::::0;::::1;::::0;;11039:24;:42;;-1:-1:-1;;11039:42:0::1;::::0;;11086:22;:27;;-1:-1:-1;;11086:22:0;-1:-1:-1;;11086:27:0::1;::::0;-1:-1:-1;;11086:27:0::1;:::i;:::-;::::0;;;-1:-1:-1;;11118:12:0::1;:35:::0;;-1:-1:-1;;11118:35:0::1;::::0;;11148:5:::1;11158:23:::0;:27;;;11190:30;:34;;;11236:17:::1;::::0;::::1;::::0;11148:5;11236:17:::1;10791:467::o:0;4071:813::-;4145:14;3534:11;;;:26;;;3549:6;3559:1;3549:11;3534:26;3526:71;;;;-1:-1:-1;;;3526:71:0;;5686:2:1;3526:71:0;;;5668:21:1;;;5705:18;;;5698:30;5764:34;5744:18;;;5737:62;5816:18;;3526:71:0;5484:356:1;3526:71:0;4178:6:::1;3677:1;3668:6;:10;3660:55;;;::::0;-1:-1:-1;;;3660:55:0;;6047:2:1;3660:55:0::1;::::0;::::1;6029:21:1::0;;;6066:18;;;6059:30;6125:34;6105:18;;;6098:62;6177:18;;3660:55:0::1;5845:356:1::0;3660:55:0::1;3770:12:::2;:27:::0;::::2;;3762:73;;;::::0;-1:-1:-1;;;3762:73:0;;6408:2:1;3762:73:0::2;::::0;::::2;6390:21:1::0;6447:2;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;6557:3;6537:18;;;6530:31;6578:19;;3762:73:0::2;6206:397:1::0;3762:73:0::2;3894:16:::3;::::0;:21;3886:48:::3;;;::::0;-1:-1:-1;;;3886:48:0;;6810:2:1;3886:48:0::3;::::0;::::3;6792:21:1::0;6849:2;6829:18;;;6822:30;6888:16;6868:18;;;6861:44;6922:18;;3886:48:0::3;6608:338:1::0;3886:48:0::3;3958:1;3939:16;:20:::0;4290:12:::4;::::0;4283:68:::4;::::0;;;;4317:10:::4;4283:68;::::0;::::4;7214:34:1::0;4337:4:0::4;7264:18:1::0;;;7257:43;7316:18;;;7309:34;;;-1:-1:-1;;;;;4290:12:0;;::::4;::::0;4283:33:::4;::::0;7126:18:1;;4283:68:0::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;4457:31:0::4;::::0;;;;::::4;::::0;;;4478:10:::4;4457:31:::0;::::4;::::0;;::::4;::::0;;;;;;::::4;;;::::0;::::4;::::0;4446:6;;4457:31;4497:16;;;;:38:::4;;;4534:1;4517:2;:14;;;:18;;;4497:38;4493:189;;;4543:11;4581:2;:14;;;4557:38;;4566:2;:12;;;4557:21;;:6;:21;;;;:::i;:::-;:38;;;;:::i;:::-;4543:52:::0;-1:-1:-1;4611:12:0::4;4543:52:::0;4611:6;:12:::4;:::i;:::-;4636;::::0;4659:11:::4;::::0;;4629:47:::4;::::0;;;;-1:-1:-1;;;;;4659:11:0;;::::4;4629:47:::0;;::::4;7911:74:1::0;;;;8001:18;;;7994:34;;;4601:22:0;;-1:-1:-1;4636:12:0;::::4;::::0;4629:29:::4;::::0;7884:18:1;;4629:47:0::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4537:145;4493:189;4688:18;4709:29;4723:14;4709:13;:29::i;:::-;4688:50;;4784:41;4793:10;4805;4817:7;4784:8;:41::i;:::-;4837:42;::::0;571:25:1;;;4855:14:0;;4843:10:::4;::::0;4837:42:::4;::::0;559:2:1;544:18;4837:42:0::4;;;;;;;-1:-1:-1::0;;4001:1:0::3;3982:16;:20:::0;-1:-1:-1;;;;;4071:813:0:o;5410:420::-;5486:14;3534:11;;;:26;;;3549:6;3559:1;3549:11;3534:26;3526:71;;;;-1:-1:-1;;;3526:71:0;;5686:2:1;3526:71:0;;;5668:21:1;;;5705:18;;;5698:30;5764:34;5744:18;;;5737:62;5816:18;;3526:71:0;5484:356:1;3526:71:0;5519:6:::1;3677:1;3668:6;:10;3660:55;;;::::0;-1:-1:-1;;;3660:55:0;;6047:2:1;3660:55:0::1;::::0;::::1;6029:21:1::0;;;6066:18;;;6059:30;6125:34;6105:18;;;6098:62;6177:18;;3660:55:0::1;5845:356:1::0;3660:55:0::1;3770:12:::2;:27:::0;::::2;;3762:73;;;::::0;-1:-1:-1;;;3762:73:0;;6408:2:1;3762:73:0::2;::::0;::::2;6390:21:1::0;6447:2;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;6557:3;6537:18;;;6530:31;6578:19;;3762:73:0::2;6206:397:1::0;3762:73:0::2;3894:16:::3;::::0;:21;3886:48:::3;;;::::0;-1:-1:-1;;;3886:48:0;;6810:2:1;3886:48:0::3;::::0;::::3;6792:21:1::0;6849:2;6829:18;;;6822:30;6888:16;6868:18;;;6861:44;6922:18;;3886:48:0::3;6608:338:1::0;3886:48:0::3;3958:1;3939:16;:20:::0;5562:18:::4;5583:29;5597:14:::0;5583:13:::4;:29::i;:::-;5562:50;;5617:17;5637:42;5648:10;5660;5672:6;5637:10;:42::i;:::-;5617:62:::0;-1:-1:-1;5688:13:0;;5684:142:::4;;5716:12;::::0;5709:52:::4;::::0;;;;5739:10:::4;5709:52;::::0;::::4;7911:74:1::0;8001:18;;;7994:34;;;-1:-1:-1;;;;;5716:12:0;;::::4;::::0;5709:29:::4;::::0;7884:18:1;;5709:52:0::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;5774:46:0::4;::::0;571:25:1;;;5794:14:0;;5782:10:::4;::::0;5774:46:::4;::::0;559:2:1;544:18;5774:46:0::4;;;;;;;5684:142;-1:-1:-1::0;;4001:1:0::3;3982:16;:20:::0;-1:-1:-1;;;;5410:420:0:o;1225:94::-;1487:4;1522:5;-1:-1:-1;;;;;1522:5:0;1084:10;1511:16;1068:38;;;;-1:-1:-1;;;1068:38:0;;8241:2:1;1068:38:0;;;8223:21:1;8280:1;8260:18;;;8253:29;8318:8;8298:18;;;8291:36;8344:18;;1068:38:0;8039:329:1;1068:38:0;-1:-1:-1;;;;;1285:19:0::1;;::::0;;;1307:4:::1;1285:19;::::0;;;;;;;:26;;-1:-1:-1;;1285:26:0::1;::::0;;::::1;::::0;;1225:94::o;8910:706::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;3943:335:1;1158:48:0;8980:7:::1;8976:636;;;9136:15;9108:24:::0;;::::1;;;:43:::0;::::1;;;;;;:::i;:::-;;9100:81;;;::::0;-1:-1:-1;;;9100:81:0;;8575:2:1;9100:81:0::1;::::0;::::1;8557:21:1::0;8614:2;8594:18;;;8587:30;8653:27;8633:18;;;8626:55;8698:18;;9100:81:0::1;8373:349:1::0;9100:81:0::1;9187:12;:34:::0;;9217:4:::1;-1:-1:-1::0;;9187:34:0;;::::1;::::0;::::1;::::0;;;9227:24;:40;;;;::::1;::::0;;::::1;::::0;;9280:13:::1;::::0;::::1;::::0;-1:-1:-1;;9280:13:0::1;9621:88:::0;:::o;8976:636::-:1;9448:13;9420:24:::0;;::::1;;;:41:::0;::::1;;;;;;:::i;:::-;;9412:77;;;::::0;-1:-1:-1;;;9412:77:0;;8929:2:1;9412:77:0::1;::::0;::::1;8911:21:1::0;8968:2;8948:18;;;8941:30;9007:25;8987:18;;;8980:53;9050:18;;9412:77:0::1;8727:347:1::0;9412:77:0::1;9495:12;:35:::0;;-1:-1:-1;;9495:35:0;;::::1;::::0;;;9536:24;:42;;;;::::1;::::0;;9591:15:::1;::::0;::::1;::::0;-1:-1:-1;;9591:15:0::1;8910:706:::0;:::o;12392:246::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;3943:335:1;1158:48:0;12476:14:::1;12448:24:::0;;::::1;;;:42:::0;::::1;;;;;;:::i;:::-;;12440:98;;;::::0;-1:-1:-1;;;12440:98:0;;9281:2:1;12440:98:0::1;::::0;::::1;9263:21:1::0;9320:2;9300:18;;;9293:30;9359:34;9339:18;;;9332:62;9430:13;9410:18;;;9403:41;9461:19;;12440:98:0::1;9079:407:1::0;12440:98:0::1;12562:12;::::0;12592:11:::1;::::0;;12605:27:::1;::::0;;;;12626:4:::1;12605:27:::0;;::::1;1855:74:1::0;;;;-1:-1:-1;;;;;12562:12:0;;::::1;::::0;;;12580:11:::1;::::0;12592;;;::::1;::::0;12562:12;;12605::::1;::::0;1828:18:1;;12605:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12580:53;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;7929:55:1;;;12580:53:0::1;::::0;::::1;7911:74:1::0;8001:18;;;7994:34;7884:18;;12580:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12435:203;12392:246::o:0;7842:154::-;7897:7;7911:15;7929:12;:10;:12::i;7259:104::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;3943:335:1;1158:48:0;7331:11:::1;:27:::0;;;::::1;-1:-1:-1::0;;;;;7331:27:0;;;::::1;::::0;;;::::1;::::0;;7259:104::o;1327:97::-;1487:4;1522:5;-1:-1:-1;;;;;1522:5:0;1084:10;1511:16;1068:38;;;;-1:-1:-1;;;1068:38:0;;8241:2:1;1068:38:0;;;8223:21:1;8280:1;8260:18;;;8253:29;8318:8;8298:18;;;8291:36;8344:18;;1068:38:0;8039:329:1;1068:38:0;-1:-1:-1;;;;;1389:19:0::1;1411:5;1389:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;1389:27:0::1;::::0;;1327:97::o;1658:173::-;1487:4;1522:5;-1:-1:-1;;;;;1522:5:0;1084:10;1511:16;1068:38;;;;-1:-1:-1;;;1068:38:0;;8241:2:1;1068:38:0;;;8223:21:1;8280:1;8260:18;;;8253:29;8318:8;8298:18;;;8291:36;8344:18;;1068:38:0;8039:329:1;1068:38:0;1734:5:::1;:11:::0;;;::::1;-1:-1:-1::0;;;;;1734:11:0;::::1;::::0;;::::1;::::0;;1756:19;;;-1:-1:-1;1756:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;1756:26:0::1;::::0;;::::1;::::0;;;1798:25;;1855:74:1;;;1798:25:0::1;::::0;1828:18:1;1798:25:0::1;;;;;;;1658:173:::0;:::o;7368:164::-;1179:10;1599:4;1623:19;;;:14;:19;;;;;;;;1158:48;;;;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0;;;4127:21:1;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0;3943:335:1;1158:48:0;7454:10:::1;:32:::0;;::::1;7491:36:::0;;::::1;::::0;::::1;::::0;;;;7454:32;;;::::1;7491:36:::0;;;;;;;::::1;::::0;;7368:164::o;12727:99::-;12791:22;;12770:7;;12820:1;;12791:26;;12816:1;12791:26;:::i;:::-;:30;;;;:::i;6459:728::-;6526:14;3534:11;;;:26;;;3549:6;3559:1;3549:11;3534:26;3526:71;;;;-1:-1:-1;;;3526:71:0;;5686:2:1;3526:71:0;;;5668:21:1;;;5705:18;;;5698:30;5764:34;5744:18;;;5737:62;5816:18;;3526:71:0;5484:356:1;3526:71:0;1179:10:::1;1599:4:::0;1623:19;;;:14;:19;;;;;;;;1158:48:::1;;;::::0;-1:-1:-1;;;1158:48:0;;4145:2:1;1158:48:0::1;::::0;::::1;4127:21:1::0;4184:2;4164:18;;;4157:30;4223:13;4203:18;;;4196:41;4254:18;;1158:48:0::1;3943:335:1::0;1158:48:0::1;6594:15:::2;6566:24:::0;;::::2;;;:43:::0;::::2;;;;;;:::i;:::-;;6558:120;;;::::0;;-1:-1:-1;;;6558:120:0;;10121:2:1;6558:120:0::2;::::0;::::2;10103:21:1::0;10140:18;;;10133:30;;;;10199:34;10179:18;;;10172:62;10270:34;10250:18;;;10243:62;10322:19;;6558:120:0::2;9919:428:1::0;6558:120:0::2;6683:24:::0;:42;;-1:-1:-1;;6683:42:0::2;6710:15;6683:42;::::0;;6730:12:::2;:54:::0;;::::2;::::0;;::::2;;::::0;;;::::2;;::::0;;-1:-1:-1;6807:12:0::2;:10;:12::i;:::-;6789:30;;6824:15;6842:12;:10;:12::i;:::-;6859:18;6880:38:::0;;;:29;:38:::2;::::0;;;;;;6944;;;;;;6824:30;;-1:-1:-1;6880:38:0;7015:19;;:45:::2;;7050:10;7015:45;;;7037:10;7015:45;6989:23:::0;:71;7098:19;;:45:::2;;7133:10;7098:45;;;7120:10;7098:45;7065:30:::0;:78;7155:27:::2;::::0;7167:14;;7155:27:::2;::::0;;;::::2;6553:634;;;;6459:728:::0;;:::o;8160:210::-;8248:7;8262:18;8283:29;8297:14;8283:13;:29::i;:::-;8324:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;8324:41:0;;;;;;;;;;;-1:-1:-1;;8160:210:0;;;;;:::o;9860:926::-;3894:16;;:21;3886:48;;;;-1:-1:-1;;;3886:48:0;;6810:2:1;3886:48:0;;;6792:21:1;6849:2;6829:18;;;6822:30;6888:16;6868:18;;;6861:44;6922:18;;3886:48:0;6608:338:1;3886:48:0;3958:1;3939:16;:20;9962:15:::1;9934:24:::0;;::::1;;;:43:::0;::::1;;;;;;:::i;:::-;;9926:126;;;::::0;-1:-1:-1;;;9926:126:0;;10554:2:1;9926:126:0::1;::::0;::::1;10536:21:1::0;10593:2;10573:18;;;10566:30;10632:34;10612:18;;;10605:62;10703:34;10683:18;;;10676:62;10775:8;10754:19;;;10747:37;10801:19;;9926:126:0::1;10352:474:1::0;9926:126:0::1;10085:12;:24:::0;::::1;::::0;::::1;10071:40;::::0;10124:8;;;:20:::1;;;10136:3;10143:1;10136:8;10124:20;10116:67;;;::::0;-1:-1:-1;;;10116:67:0;;11033:2:1;10116:67:0::1;::::0;::::1;11015:21:1::0;11072:2;11052:18;;;11045:30;11111:34;11091:18;;;11084:62;11182:4;11162:18;;;11155:32;11204:19;;10116:67:0::1;10831:398:1::0;10116:67:0::1;10188:20;10211:32;10231:6;10239:3;10211:19;:32::i;:::-;10188:55;;10271:1;10256:12;:16;10248:54;;;::::0;-1:-1:-1;;;10248:54:0;;11436:2:1;10248:54:0::1;::::0;::::1;11418:21:1::0;11475:2;11455:18;;;11448:30;11514:27;11494:18;;;11487:55;11559:18;;10248:54:0::1;11234:349:1::0;10248:54:0::1;10307:13;10323:20;10336:6;10323:12;:20::i;:::-;10307:36;;10364:1;10356:5;:9;10348:40;;;::::0;-1:-1:-1;;;10348:40:0;;11790:2:1;10348:40:0::1;::::0;::::1;11772:21:1::0;11829:2;11809:18;;;11802:30;11868:20;11848:18;;;11841:48;11906:18;;10348:40:0::1;11588:342:1::0;10348:40:0::1;10393:14;10410:20;10418:12:::0;10410:5;:20:::1;:::i;:::-;10393:37;;10467:18;10488;10502:3;10488:13;:18::i;:::-;10557:1;10511:35:::0;;;:23;:35:::1;::::0;;;;;;;-1:-1:-1;;;;;10511:43:0;::::1;::::0;;;;;;;:47;;;10563:41;;;:29;:41;;;;;:57;;10467:39;;-1:-1:-1;10608:12:0;;10563:41;;10557:1;10563:57:::1;::::0;10608:12;;10563:57:::1;:::i;:::-;::::0;;;-1:-1:-1;;10629:41:0::1;::::0;;;:29;:41:::1;::::0;;;;;:46;;10625:105:::1;;10683:24:::0;:41;;-1:-1:-1;;10683:41:0::1;10710:14;10683:41;::::0;;10625:105:::1;10743:12;::::0;10736:45:::1;::::0;;;;-1:-1:-1;;;;;7929:55:1;;;10736:45:0::1;::::0;::::1;7911:74:1::0;8001:18;;;7994:34;;;10743:12:0;;::::1;::::0;10736:29:::1;::::0;7884:18:1;;10736:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;4001:1:0;3982:16;:20;-1:-1:-1;;;;;9860:926:0:o;5092:240::-;5162:7;5176:18;5203:14;5221:1;5203:19;5199:105;;5243:12;:10;:12::i;:::-;5230:25;;5199:105;;;5286:12;:10;:12::i;4889:198::-;4973:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;4973:43:0;;;;;;;;;:53;;5020:6;;4973:35;:53;;5020:6;;4973:53;:::i;:::-;;;;-1:-1:-1;;5031:41:0;;;;:29;:41;;;;;:51;;5076:6;;5031:41;:51;;5076:6;;5031:51;:::i;:::-;;;;-1:-1:-1;;;;;4889:198:0:o;5835:619::-;5925:7;6032:35;;;:23;:35;;;;;;;;-1:-1:-1;;;;;6032:43:0;;;;;;;;;;6015:6;;6032:48;;6028:74;;6095:1;6088:8;;;;;6028:74;6195:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;6195:43:0;;;;;;;;;;6186:52;;6182:125;;;-1:-1:-1;6258:35:0;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;6258:43:0;;;;;;;;;;6182:125;6311:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;6311:43:0;;;;;;;;;:56;;6358:9;;6311:35;:56;;6358:9;;6311:56;:::i;:::-;;;;-1:-1:-1;;6372:41:0;;;;:29;:41;;;;;:54;;6417:9;;6372:41;:54;;6417:9;;6372:54;:::i;:::-;;;;-1:-1:-1;6440:9:0;;5835:619;-1:-1:-1;;;;;5835:619:0:o;14:154:1:-;-1:-1:-1;;;;;93:5:1;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:247;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;607:316::-;684:6;692;700;753:2;741:9;732:7;728:23;724:32;721:52;;;769:1;766;759:12;721:52;-1:-1:-1;;792:23:1;;;862:2;847:18;;834:32;;-1:-1:-1;913:2:1;898:18;;;885:32;;607:316;-1:-1:-1;607:316:1:o;1120:184::-;1172:77;1169:1;1162:88;1269:4;1266:1;1259:15;1293:4;1290:1;1283:15;1309:395;1451:2;1436:18;;1484:1;1473:13;;1463:201;;1520:77;1517:1;1510:88;1621:4;1618:1;1611:15;1649:4;1646:1;1639:15;1463:201;1673:25;;;1309:395;:::o;2131:248::-;2199:6;2207;2260:2;2248:9;2239:7;2235:23;2231:32;2228:52;;;2276:1;2273;2266:12;2228:52;-1:-1:-1;;2299:23:1;;;2369:2;2354:18;;;2341:32;;-1:-1:-1;2131:248:1:o;2384:118::-;2470:5;2463:13;2456:21;2449:5;2446:32;2436:60;;2492:1;2489;2482:12;2507:241;2563:6;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2671:9;2658:23;2690:28;2712:5;2690:28;:::i;3013:159::-;3080:20;;3140:6;3129:18;;3119:29;;3109:57;;3162:1;3159;3152:12;3109:57;3013:159;;;:::o;3177:256::-;3243:6;3251;3304:2;3292:9;3283:7;3279:23;3275:32;3272:52;;;3320:1;3317;3310:12;3272:52;3343:28;3361:9;3343:28;:::i;:::-;3333:38;;3390:37;3423:2;3412:9;3408:18;3390:37;:::i;:::-;3380:47;;3177:256;;;;;:::o;3438:180::-;3497:6;3550:2;3538:9;3529:7;3525:23;3521:32;3518:52;;;3566:1;3563;3556:12;3518:52;-1:-1:-1;3589:23:1;;3438:180;-1:-1:-1;3438:180:1:o;3623:315::-;3691:6;3699;3752:2;3740:9;3731:7;3727:23;3723:32;3720:52;;;3768:1;3765;3758:12;3720:52;3807:9;3794:23;3826:31;3851:5;3826:31;:::i;:::-;3876:5;3928:2;3913:18;;;;3900:32;;-1:-1:-1;;;3623:315:1:o;4283:184::-;4335:77;4332:1;4325:88;4432:4;4429:1;4422:15;4456:4;4453:1;4446:15;4472:168;4545:9;;;4576;;4593:15;;;4587:22;;4573:37;4563:71;;4614:18;;:::i;4645:274::-;4685:1;4711;4701:189;;4746:77;4743:1;4736:88;4847:4;4844:1;4837:15;4875:4;4872:1;4865:15;4701:189;-1:-1:-1;4904:9:1;;4645:274::o;4924:125::-;4989:9;;;5010:10;;;5007:36;;;5023:18;;:::i;7354:245::-;7421:6;7474:2;7462:9;7453:7;7449:23;7445:32;7442:52;;;7490:1;7487;7480:12;7442:52;7522:9;7516:16;7541:28;7563:5;7541:28;:::i;7604:128::-;7671:9;;;7692:11;;;7689:37;;;7706:18;;:::i;9491:184::-;9561:6;9614:2;9602:9;9593:7;9589:23;9585:32;9582:52;;;9630:1;9627;9620:12;9582:52;-1:-1:-1;9653:16:1;;9491:184;-1:-1:-1;9491:184:1:o

Swarm Source

ipfs://8ea5765c814fa1b507e82eb26c870fe1b9d963d1f34e455b2edb9c7c10c89de8

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.