Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 481 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mass Harvest | 23490879 | 143 days ago | IN | 0 ETH | 0.00088585 | ||||
| Mass Harvest | 22324346 | 306 days ago | IN | 0 ETH | 0.00026747 | ||||
| Mass Harvest | 22324341 | 306 days ago | IN | 0 ETH | 0.00024714 | ||||
| Mass Harvest | 22324337 | 306 days ago | IN | 0 ETH | 0.0005065 | ||||
| Mass Harvest | 22324332 | 306 days ago | IN | 0 ETH | 0.00104394 | ||||
| Mass Harvest | 22324328 | 306 days ago | IN | 0 ETH | 0.0002477 | ||||
| Mass Harvest | 22324325 | 306 days ago | IN | 0 ETH | 0.001037 | ||||
| Mass Harvest | 22324321 | 306 days ago | IN | 0 ETH | 0.00103565 | ||||
| Mass Harvest | 22324313 | 306 days ago | IN | 0 ETH | 0.0009986 | ||||
| Mass Harvest | 22324306 | 306 days ago | IN | 0 ETH | 0.00098883 | ||||
| Mass Harvest | 22324298 | 306 days ago | IN | 0 ETH | 0.00101083 | ||||
| Mass Harvest | 22324288 | 306 days ago | IN | 0 ETH | 0.00100295 | ||||
| Mass Harvest | 22324260 | 306 days ago | IN | 0 ETH | 0.00099197 | ||||
| Mass Harvest | 22324255 | 306 days ago | IN | 0 ETH | 0.00025749 | ||||
| Mass Harvest | 22324250 | 306 days ago | IN | 0 ETH | 0.00024366 | ||||
| Mass Harvest | 22324240 | 306 days ago | IN | 0 ETH | 0.00024447 | ||||
| Mass Harvest | 22324235 | 306 days ago | IN | 0 ETH | 0.00024424 | ||||
| Mass Harvest | 22324229 | 306 days ago | IN | 0 ETH | 0.00032328 | ||||
| Harvest | 22324227 | 306 days ago | IN | 0 ETH | 0.0001776 | ||||
| Mass Harvest | 21465228 | 426 days ago | IN | 0 ETH | 0.00692871 | ||||
| Mass Harvest | 21464995 | 426 days ago | IN | 0 ETH | 0.00729772 | ||||
| Mass Harvest | 21464978 | 426 days ago | IN | 0 ETH | 0.00703911 | ||||
| Mass Harvest | 21451504 | 428 days ago | IN | 0 ETH | 0.01071401 | ||||
| Set Epoch Amount | 21451263 | 428 days ago | IN | 0 ETH | 0.00034961 | ||||
| Mass Harvest | 21451054 | 428 days ago | IN | 0 ETH | 0.00986233 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SwappYieldFarm
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-20
*/
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
pragma solidity 0.8.0;
interface IStaking {
function getEpochId(uint timestamp) external view returns (uint); // get epoch id
function getEpochUserBalance(address user, address token, uint128 epoch) external view returns(uint);
function getEpochPoolSize(address token, uint128 epoch) external view returns (uint);
function epoch1Start() external view returns (uint);
function epochDuration() external view returns (uint);
function hasReferrer(address addr) external view returns(bool);
function referrals(address addr) external view returns(address);
function firstReferrerRewardPercentage() external view returns(uint256);
function secondReferrerRewardPercentage() external view returns(uint256);
function isStakeFinished(address staker) external view returns (bool);
function stakeData(address staker) external view returns (uint256 startEpoch, uint256 endEpoch, bool active);
function stakeEndEpoch(address staker) external view returns (uint128);
function calcDurationBonusMultiplier(uint128 epochId, address staker) external view returns (uint256);
}
interface Minter {
function mint(address to, uint256 amount) external;
}
contract SwappYieldFarm {
// lib
using SafeMath for uint;
using SafeMath for uint128;
// constants
uint public constant NR_OF_EPOCHS = 60;
uint256 constant private CALC_MULTIPLIER = 1000000;
// addreses
address private _swappAddress = 0x8CB924583681cbFE487A62140a994A49F833c244;
address private _owner;
bool private _paused = false;
// contracts
IStaking private _staking;
Minter private _minter;
uint[] private epochs = new uint[](NR_OF_EPOCHS + 1);
uint128 public lastInitializedEpoch;
mapping(address => uint128) public lastEpochIdHarvested;
uint public epochDuration; // init from staking contract
uint public epochStart; // init from staking contract
mapping(uint128 => uint256) public epochAmounts;
mapping(uint128 => uint256) public epochDurationBonus;
mapping(address => uint256) public collectedDurationBonus;
modifier onlyStaking() {
require(msg.sender == address(_staking), "Only staking contract can perfrom this action");
_;
}
modifier onlyOwner() {
require(msg.sender == _owner, "Only owner can perfrom this action");
_;
}
modifier whenNotPaused() {
require(!paused(), "Contract is paused");
_;
}
// events
event MassHarvest(address indexed user, uint256 epochsHarvested, uint256 totalValue);
event Harvest(address indexed user, uint128 indexed epochId, uint256 amount);
event ReferrerRewardCollected(address indexed staker, address indexed referrer, uint256 rewardAmount);
event Referrer2RewardCollected(address indexed staker, address indexed referrer, address indexed referrer2, uint256 rewardAmount);
event DurationBonusCollected(address indexed staker, uint128 indexed epochId, uint256 bonusAmount);
event DurationBonusDistributed(address indexed staker, uint128 indexed epochId, uint256 bonusAmount);
event DurationBonusLost(address indexed staker, uint128 indexed epochId, uint256 bonusAmount);
// constructor
constructor() {
_staking = IStaking(0x60F4D3e409Ad2Bb6BF5edFBCC85691eE1977cf35);
_minter = Minter(0xBC1f9993ea5eE2C77909bf43d7a960bB8dA8C9B9);
epochDuration = _staking.epochDuration();
epochStart = _staking.epoch1Start();
_owner = msg.sender;
_initEpochReward();
_initDurationBonus();
}
function setEpochAmount(uint128 epochId, uint256 amount) external onlyOwner {
require(epochId > 0 && epochId <= NR_OF_EPOCHS, "Minimum epoch number is 1 and Maximum number of epochs is 60");
require(epochId > _getEpochId(), "Only future epoch can be updated");
epochAmounts[epochId] = amount;
}
function setEpochDurationBonus(uint128 epochId, uint256 amount) external onlyOwner {
require(epochId > 0 && epochId <= NR_OF_EPOCHS, "Minimum epoch number is 1 and Maximum number of epochs is 60");
require(epochId > _getEpochId(), "Only future epoch can be updated");
epochDurationBonus[epochId] = amount;
}
function getTotalAmountPerEpoch(uint128 epoch) public view returns (uint) {
return epochAmounts[epoch].mul(10**18);
}
function getDurationBonusPerEpoch(uint128 epoch) public view returns (uint) {
return epochDurationBonus[epoch].mul(10**18);
}
function getCurrentEpochAmount() public view returns (uint) {
uint128 currentEpoch = _getEpochId();
if (currentEpoch <= 0 || currentEpoch > NR_OF_EPOCHS) {
return 0;
}
return epochAmounts[currentEpoch];
}
function getCurrentEpochDurationBonus() public view returns (uint) {
uint128 currentEpoch = _getEpochId();
if (currentEpoch <= 0 || currentEpoch > NR_OF_EPOCHS) {
return 0;
}
return epochDurationBonus[currentEpoch];
}
function getTotalDistributedAmount() external view returns(uint256) {
uint256 totalDistributed;
for (uint128 i = 1; i <= NR_OF_EPOCHS; i++) {
totalDistributed += epochAmounts[i];
}
return totalDistributed;
}
function getTotalDurationBonus() external view returns(uint256) {
uint256 totalBonus;
for (uint128 i = 1; i <= NR_OF_EPOCHS; i++) {
totalBonus += epochDurationBonus[i];
}
return totalBonus;
}
// public methods
// public method to harvest all the unharvested epochs until current epoch - 1
function massHarvest() external whenNotPaused returns (uint){
uint totalDistributedValue;
uint epochId = _getEpochId().sub(1); // fails in epoch 0
// force max number of epochs
if (epochId > NR_OF_EPOCHS) {
epochId = NR_OF_EPOCHS;
}
for (uint128 i = lastEpochIdHarvested[msg.sender] + 1; i <= epochId; i++) {
// i = epochId
// compute distributed Value and do one single transfer at the end
totalDistributedValue += _harvest(i);
uint256 durationBonus = _calcDurationBonus(i);
if (durationBonus > 0) {
collectedDurationBonus[msg.sender] = collectedDurationBonus[msg.sender].add(durationBonus);
emit DurationBonusCollected(msg.sender, i, durationBonus);
}
}
emit MassHarvest(msg.sender, epochId - lastEpochIdHarvested[msg.sender], totalDistributedValue);
uint256 totalDurationBonus = 0;
if (_staking.isStakeFinished(msg.sender) && collectedDurationBonus[msg.sender] > 0) {
totalDurationBonus = collectedDurationBonus[msg.sender];
collectedDurationBonus[msg.sender] = 0;
_minter.mint(msg.sender, totalDurationBonus);
emit DurationBonusDistributed(msg.sender, _getEpochId(), totalDurationBonus);
}
if (totalDistributedValue > 0) {
_minter.mint(msg.sender, totalDistributedValue);
//Referrer reward
distributeReferrerReward(totalDistributedValue.add(totalDurationBonus));
}
return totalDistributedValue.add(totalDurationBonus);
}
function harvest (uint128 epochId) external whenNotPaused returns (uint){
// checks for requested epoch
require (_getEpochId() > epochId, "This epoch is in the future");
require(epochId <= NR_OF_EPOCHS, "Maximum number of epochs is 60");
require (lastEpochIdHarvested[msg.sender].add(1) == epochId, "Harvest in order");
uint userReward = _harvest(epochId);
uint256 durationBonus = _calcDurationBonus(epochId);
collectedDurationBonus[msg.sender] = collectedDurationBonus[msg.sender].add(_calcDurationBonus(epochId));
emit DurationBonusCollected(msg.sender, epochId, durationBonus);
uint256 totalDurationBonus = 0;
if (_staking.isStakeFinished(msg.sender) && collectedDurationBonus[msg.sender] > 0) {
totalDurationBonus = collectedDurationBonus[msg.sender];
collectedDurationBonus[msg.sender] = 0;
_minter.mint(msg.sender, totalDurationBonus);
emit DurationBonusDistributed(msg.sender, epochId, totalDurationBonus);
}
if (userReward > 0) {
_minter.mint(msg.sender, userReward);
//Referrer reward
distributeReferrerReward(userReward.add(totalDurationBonus));
}
emit Harvest(msg.sender, epochId, userReward);
return userReward.add(totalDurationBonus);
}
function distributeReferrerReward(uint256 stakerReward) internal {
if (_staking.hasReferrer(msg.sender)) {
address referrer = _staking.referrals(msg.sender);
uint256 ref1Reward = stakerReward.mul(_staking.firstReferrerRewardPercentage()).div(10000);
_minter.mint(referrer, ref1Reward);
emit ReferrerRewardCollected(msg.sender, referrer, ref1Reward);
// second step referrer
if (_staking.hasReferrer(referrer)) {
address referrer2 = _staking.referrals(referrer);
uint256 ref2Reward = stakerReward.mul(_staking.secondReferrerRewardPercentage()).div(10000);
_minter.mint(referrer2, ref2Reward);
emit Referrer2RewardCollected(msg.sender, referrer, referrer2, ref2Reward);
}
}
}
// views
// calls to the staking smart contract to retrieve the epoch total pool size
function getPoolSize(uint128 epochId) external view returns (uint) {
return _getPoolSize(epochId);
}
function getCurrentEpoch() external view returns (uint) {
return _getEpochId();
}
// calls to the staking smart contract to retrieve user balance for an epoch
function getEpochStake(address userAddress, uint128 epochId) external view returns (uint) {
return _getUserBalancePerEpoch(userAddress, epochId);
}
function userLastEpochIdHarvested() external view returns (uint){
return lastEpochIdHarvested[msg.sender];
}
function getUserLastEpochHarvested(address staker) external view returns (uint) {
return lastEpochIdHarvested[staker];
}
function estimateDurationBonus (uint128 epochId) public view returns (uint) {
uint256 poolSize = _getPoolSize(epochId);
// exit if there is no stake on the epoch
if (poolSize == 0) {
return 0;
}
uint256 stakerMultiplier = stakerDurationMultiplier(msg.sender, epochId + 1);
return getDurationBonusPerEpoch(epochId)
.mul(_getUserBalancePerEpoch(msg.sender, epochId))
.div(poolSize).mul(stakerMultiplier).div(CALC_MULTIPLIER);
}
function stakerDurationMultiplier(address staker, uint128 epochId) public view returns (uint256) {
(uint256 startEpoch, uint256 endEpoch, bool active) = _staking.stakeData(staker);
if (epochId > endEpoch || (epochId <= endEpoch && active == false) || epochId < startEpoch) {
return 0;
}
uint256 stakerMultiplier = _staking.calcDurationBonusMultiplier(epochId, staker);
return stakerMultiplier;
}
function reduceDurationBonus(address staker, uint256 reduceMultiplier) public onlyStaking {
uint256 collected = collectedDurationBonus[staker];
if (collected > 0) {
collectedDurationBonus[staker] = collected.mul(reduceMultiplier).div(CALC_MULTIPLIER);
uint256 bonusLost = collected.sub(collectedDurationBonus[staker]);
DurationBonusLost(staker, _getEpochId(), bonusLost);
}
}
function clearDurationBonus(address staker) public onlyStaking {
uint256 collected = collectedDurationBonus[staker];
if (collected > 0) {
collectedDurationBonus[staker] = 0;
DurationBonusLost(staker, _getEpochId(), collected);
}
}
// internal methods
function _initEpoch(uint128 epochId) internal {
require(lastInitializedEpoch.add(1) == epochId, "Epoch can be init only in order");
lastInitializedEpoch = epochId;
// call the staking smart contract to init the epoch
epochs[epochId] = _getPoolSize(epochId);
}
function _harvest (uint128 epochId) internal returns (uint) {
// try to initialize an epoch. if it can't it fails
// if it fails either user either a Swapp account will init not init epochs
if (lastInitializedEpoch < epochId) {
_initEpoch(epochId);
}
// Set user state for last harvested
lastEpochIdHarvested[msg.sender] = epochId;
// compute and return user total reward. For optimization reasons the transfer have been moved to an upper layer (i.e. massHarvest needs to do a single transfer)
// exit if there is no stake on the epoch
if (epochs[epochId] == 0) {
return 0;
}
uint128 endEpoch = _staking.stakeEndEpoch(msg.sender);
if (epochId >= endEpoch) {
return 0;
}
return getTotalAmountPerEpoch(epochId)
.mul(_getUserBalancePerEpoch(msg.sender, epochId))
.div(epochs[epochId]);
}
function _calcDurationBonus(uint128 epochId) internal view returns (uint) {
// exit if there is no stake on the epoch
if (epochs[epochId] == 0) {
return 0;
}
uint256 stakerMultiplier = stakerDurationMultiplier(msg.sender, epochId + 1);
return getDurationBonusPerEpoch(epochId)
.mul(_getUserBalancePerEpoch(msg.sender, epochId))
.div(epochs[epochId]).mul(stakerMultiplier).div(CALC_MULTIPLIER);
}
function _getPoolSize(uint128 epochId) internal view returns (uint) {
// retrieve token balance
return _staking.getEpochPoolSize(_swappAddress, epochId);
}
function _getUserBalancePerEpoch(address userAddress, uint128 epochId) internal view returns (uint){
// retrieve token balance per user per epoch
return _staking.getEpochUserBalance(userAddress, _swappAddress, epochId);
}
// compute epoch id from blocktimestamp and epochstart date
function _getEpochId() internal view returns (uint128 epochId) {
if (block.timestamp < epochStart) {
return 0;
}
epochId = uint128(block.timestamp.sub(epochStart).div(epochDuration).add(1));
}
function paused() public view returns (bool) {
return _paused;
}
function pause() external onlyOwner {
_paused = true;
}
function unpause() external onlyOwner {
_paused = false;
}
function _initEpochReward() internal {
epochAmounts[1] = 5000000;
epochAmounts[2] = 2000000;
epochAmounts[3] = 2000000;
epochAmounts[4] = 2000000;
epochAmounts[5] = 2000000;
epochAmounts[6] = 2000000;
epochAmounts[7] = 1500000;
epochAmounts[8] = 1500000;
epochAmounts[9] = 1500000;
epochAmounts[10] = 1500000;
epochAmounts[11] = 1500000;
epochAmounts[12] = 1500000;
epochAmounts[13] = 500000;
epochAmounts[14] = 500000;
epochAmounts[15] = 500000;
epochAmounts[16] = 500000;
epochAmounts[17] = 500000;
epochAmounts[18] = 500000;
epochAmounts[19] = 500000;
epochAmounts[20] = 500000;
epochAmounts[21] = 500000;
epochAmounts[22] = 500000;
epochAmounts[23] = 500000;
epochAmounts[24] = 500000;
epochAmounts[25] = 400000;
epochAmounts[26] = 400000;
epochAmounts[27] = 400000;
epochAmounts[28] = 400000;
epochAmounts[29] = 400000;
epochAmounts[30] = 400000;
epochAmounts[31] = 400000;
epochAmounts[32] = 400000;
epochAmounts[33] = 400000;
epochAmounts[34] = 400000;
epochAmounts[35] = 400000;
epochAmounts[36] = 400000;
epochAmounts[37] = 250000;
epochAmounts[38] = 250000;
epochAmounts[39] = 250000;
epochAmounts[40] = 250000;
epochAmounts[41] = 250000;
epochAmounts[42] = 250000;
epochAmounts[43] = 250000;
epochAmounts[44] = 250000;
epochAmounts[45] = 250000;
epochAmounts[46] = 250000;
epochAmounts[47] = 250000;
epochAmounts[48] = 250000;
epochAmounts[49] = 250000;
epochAmounts[50] = 250000;
epochAmounts[51] = 250000;
epochAmounts[52] = 250000;
epochAmounts[53] = 250000;
epochAmounts[54] = 250000;
epochAmounts[55] = 250000;
epochAmounts[56] = 250000;
epochAmounts[57] = 250000;
epochAmounts[58] = 250000;
epochAmounts[59] = 250000;
epochAmounts[60] = 250000;
}
function _initDurationBonus() internal {
epochDurationBonus[1] = 21450;
epochDurationBonus[2] = 23595;
epochDurationBonus[3] = 25954;
epochDurationBonus[4] = 28550;
epochDurationBonus[5] = 31405;
epochDurationBonus[6] = 34545;
epochDurationBonus[7] = 38000;
epochDurationBonus[8] = 41800;
epochDurationBonus[9] = 45980;
epochDurationBonus[10] = 50578;
epochDurationBonus[11] = 55635;
epochDurationBonus[12] = 61477;
epochDurationBonus[13] = 67932;
epochDurationBonus[14] = 75065;
epochDurationBonus[15] = 82947;
epochDurationBonus[16] = 91656;
epochDurationBonus[17] = 101280;
epochDurationBonus[18] = 111915;
epochDurationBonus[19] = 123666;
epochDurationBonus[20] = 136651;
epochDurationBonus[21] = 150999;
epochDurationBonus[22] = 166854;
epochDurationBonus[23] = 184374;
epochDurationBonus[24] = 204701;
epochDurationBonus[25] = 227269;
epochDurationBonus[26] = 252326;
epochDurationBonus[27] = 280145;
epochDurationBonus[28] = 311031;
epochDurationBonus[29] = 345322;
epochDurationBonus[30] = 383393;
epochDurationBonus[31] = 425662;
epochDurationBonus[32] = 472592;
epochDurationBonus[33] = 524695;
epochDurationBonus[34] = 582543;
epochDurationBonus[35] = 646768;
epochDurationBonus[36] = 721639;
epochDurationBonus[37] = 805178;
epochDurationBonus[38] = 898388;
epochDurationBonus[39] = 1002387;
epochDurationBonus[40] = 1118426;
epochDurationBonus[41] = 1247898;
epochDurationBonus[42] = 1392358;
epochDurationBonus[43] = 1553541;
epochDurationBonus[44] = 1733382;
epochDurationBonus[45] = 1934043;
epochDurationBonus[46] = 2157933;
epochDurationBonus[47] = 2407740;
epochDurationBonus[48] = 2700403;
epochDurationBonus[49] = 3028638;
epochDurationBonus[50] = 3396771;
epochDurationBonus[51] = 3809651;
epochDurationBonus[52] = 4272716;
epochDurationBonus[53] = 4792068;
epochDurationBonus[54] = 5374546;
epochDurationBonus[55] = 6027826;
epochDurationBonus[56] = 6760512;
epochDurationBonus[57] = 7582256;
epochDurationBonus[58] = 8503884;
epochDurationBonus[59] = 9537537;
epochDurationBonus[60] = 11000000;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint128","name":"epochId","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"bonusAmount","type":"uint256"}],"name":"DurationBonusCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint128","name":"epochId","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"bonusAmount","type":"uint256"}],"name":"DurationBonusDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint128","name":"epochId","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"bonusAmount","type":"uint256"}],"name":"DurationBonusLost","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint128","name":"epochId","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"epochsHarvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalValue","type":"uint256"}],"name":"MassHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referrer2","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"Referrer2RewardCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"ReferrerRewardCollected","type":"event"},{"inputs":[],"name":"NR_OF_EPOCHS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"clearDurationBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectedDurationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"epochAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"epochDurationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"epochId","type":"uint128"}],"name":"estimateDurationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpochAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpochDurationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"epoch","type":"uint128"}],"name":"getDurationBonusPerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint128","name":"epochId","type":"uint128"}],"name":"getEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"epochId","type":"uint128"}],"name":"getPoolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"epoch","type":"uint128"}],"name":"getTotalAmountPerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDistributedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDurationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUserLastEpochHarvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"epochId","type":"uint128"}],"name":"harvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastEpochIdHarvested","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastInitializedEpoch","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massHarvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"reduceMultiplier","type":"uint256"}],"name":"reduceDurationBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"epochId","type":"uint128"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setEpochAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"epochId","type":"uint128"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setEpochDurationBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint128","name":"epochId","type":"uint128"}],"name":"stakerDurationMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userLastEpochIdHarvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b031916738cb924583681cbfe487a62140a994a49f833c2441790556001805460ff60a01b191681556200004590603c9062001426565b6001600160401b038111156200006b57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801562000095578160200160208202803683370190505b508051620000ac91600491602090910190620013a6565b50348015620000ba57600080fd5b50600280546001600160a01b03199081167360f4d3e409ad2bb6bf5edfbcc85691ee1977cf3517918290556003805490911673bc1f9993ea5ee2c77909bf43d7a960bb8da8c9b9179055604080516327f843b560e11b815290516001600160a01b039290921691634ff0876a91600480820192602092909190829003018186803b1580156200014857600080fd5b505afa1580156200015d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018391906200140d565b6007556002546040805163f4a4341d60e01b815290516001600160a01b039092169163f4a4341d91600480820192602092909190829003018186803b158015620001cc57600080fd5b505afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020791906200140d565b600855600180546001600160a01b031916331790556200022662000236565b6200023062000abe565b6200144b565b6009602052624c4b407f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3655621e84807f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c38190557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e78190557f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb8190557f74b05292d1d4b2b48b65261b07099d24244bcb069f138d9a6bfdcf776becac4c8190557fbb6daa0c283751197dfdc76590680f9005e97d6f23870deb1164ab60b28b9f5f556216e3607fae6299332bcd708cd60e3a8defa55de28078a50a4cf2b3de3a546253240ff9e18190557fc7694af312c4f286114180fd0ba6a52461fcee8a381636770b19a343af92538a8190557f87e8a52529e8ece4ef759037313542a6429ff494a9fab9027fb79db90124eba68190557f502e20e4e219e0c509d693958f17384c185f07a810a5d31c46c2be981e979c258190557f0d9cf2cd531699eed8dd34e40ff2884a14a698c4898184fba85194e6f6772d248190557fc7b54da85b38015141aec405fe9a03fa9e057971f48e8d0d8fc78485848a2310556207a1207fdec90e20065e511a0428d28bf1b6b0d715e4b1cb865c1f0580815586cc6ebf9e8190557f14f5f4d78ba809fa1eb5eee80339f56eaa489b7b6b892ddb58602e51e8dad7ef8190557fc6578e0b5f8d37c135f99fcd184697bbb8facaa7556a48605034ca65d4c39fbf8190557fbe671448d730349025d29d2778ce42e0b1bf32e5fba806216bd490316c20b57d8190557fe7636fba95dbff23a0d59c2aaba91ac476df033d3d0194af04c6e0be3aa731688190557fe84bfcbbf6b4a03922a064640cc123c559d873e4452e4de9b4c8ae3d625b15f08190557f20eb389d0739387175ea0af71ea83e439c1e64b1f1d88bc1a63c293936f1ddf98190557f60a5a5a37b4d1dd7d7b24e4897f9467e8debaad1cd5a21b57a3edb667b34643f8190557f1cd9b38a3a53bab494aa1d85adb715d6959eb17b9c356637d3fa91f568fbb49d8190557f31500e3e63276b9e30de61d3b3eba79d113a6ecb97bdb48e6ff3bfbcf39843a08190557f1e54f96c5e2b78f60d79048ee9c858e18221042b03d4c3a1edb674a7958c6dbe8190557f9fa182d41d71a497043a8da03c1b347327908b20231c7ad3a623a2ed42be1e295562061a807f967884e4895c9fc5fcc0d7afd0f0d6557102e822f9f19daef11a1defa828ca978190557f2d13cb1e06f1c209c154bf72388128a0c41c5f78e83fa6fa3a15e7af7ce926728190557f39c1220ceb2b65f0545b9700381d45e66fb4c48160af52f2313cff52e7d1816f8190557f0198fab112c143739d2c64cd1e8f8579226b9625635561ef7f569630690cb0808190557f664326ee2c9cf6e3ccb8f5f75d62b49a2f2f40a7f0634c3c1ccd8b8768761c368190557fba813966250df53e8742361bee196aca3139d68609981c9283b9bd74a15a86e88190557f04e46bb1bb2d8a8e64e23570b4b0c755e74dfd455311952241a58ee59d43ee398190557f0be59b18168b57ec65c0c8e445cffd739914e4617bf4e1f6b492b57dcd4f78d68190557f1158e7856e424bc35a28252f518c89c1af91164333f54fc19b5724835112c6818190557f280fb8a25848fb992f554b4c8d4afc13dff52a3691d85dbf26c3555afd6243528190557f25ac479b898599910fcac5655ef89881608fbe6ebfe7a0189ab76e3e210bec958190557f327f5a96ce8922d13e926b5301182a995f2dad0da1f81621072d6188be90cf40556203d0907f72fe66faf096e1b8c9ecc3b66c7af137c79b7e17c40297754fb1c70cc4869abc8190557ff4b500520e6ff7e2b980c7c3b7ac9e6a58ea5f6006cd6e18c840f4d551c1954d8190557fa12453ef3d78204b880f3cf8b9444bb252df0f872a15667124da9103a917c3578190557fea0e630273a94d99be23398ed1c410c5da33a4cdcdd8ad9bb111ebd4fdb859608190557f44968f9a6894e0fb25d0ef127815b20947a3b2815dbfc740b0a6c9cb84e97b8e8190557fd869c086c774be06215b42086d35d0f07dfce65e7170e9b6e8d61dac4213afb98190557fe9dd5851370bf46ed74acda6738d08de07ed6b960776787b507a16b7046e2b618190557fe359e079b4da2ffe9920a661193eaa7b76a5d1f8c27d7e311309b174b6daab378190557f4bbf9d7d67d44cad879862b09fff9ce23e1a492285d86ba983680d0e160e8e0e8190557f4d775e50194a955bb52445eac0d03a4a17d2be44e085301ef60e2d7b9f7435088190557f12b1458e66613f1665899358e21febd8fd8089b9218351897bc7161398e15c108190557f77bd7588d50fb6c6e45fe979c10da04c86538803d20b7d785d211b3c02e93f788190557f3bcba89c3b628a17a8b32d24f473baeeffa2c378f8ee2a2cba2ab89ce338989c8190557fdd9bf46b68f2858fcbfdd22eaa6d4bc710b50475a2b04df5507e88b47e1571f68190557f422307daaf95d43e597be1b3a1782790e1bd7992493ade8fe3397aba95c8e8ed8190557ffa240842c23bc048b8024af5d69d5c285d6726465ce3e46bce947832ecb4f4458190557fb35e894a1f2a7e94cb955faf01dc56fd2a85923e1b35b952047a2f78d7c8f7658190557f583ee370e5f1f222fb7a7c3471bf9c6f1ccfa879a8ed5036923628694913cb598190557f1e60ba17c907aa02eaa7cc913574ba18af4e9f29a15d6aa569c6c5bf74e006098190557f35cbfc6cecf8f6a20f9ae56f6b797d21d83573be46cd67af485c361e5b9e38898190557ff7f04506ba5e09fa12bd33370ea0fbcf80f22400386e297aa544355ad61f01d48190557fa1c3d575985d08bb9f5b2581f8a369dcb618a96554e510eccf0391de41c2e7878190557f298c611a4738d7efd63c00c7eafbbda10e7ee27ea76d058339982643cd7923e0819055603c6000527fe1caf25864288b409d0a28140b2c266e67d9f71c0a3d4af4ab94381bcd59b47855565b600a6020526153ca7fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc755615c2b7fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba8556165627fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975955616f867fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a84155617aad7ff35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f556186f17f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27db556194707f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd288295561a3487f2c1fd36ba11b13b555f58753742999069764391f450ca8727fe8a3eeffe677755561b39c7f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb2845561c5927f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa5561d9537fb3569174ca605aeef264a9f01151dace4275a70316034aaf090d8468560f043b5561f0257f80283cfdc74729ecb224822f7a02837fb1d52df7cc3435ae86bb6e025f6e06fa556201095c7fc5c2b17ace4fcac005542a0a50d8932fc28b9d50b7e4925e5b7ce40eede0c44755620125397f95e5396155afd2ec086edc0518f3069d6ba131fb95388521b3342aebbda916f055620144037fcc8dc71342d3ea7c205feea2d040f8f577a07edda8d6b43a4daf11d5e7fd280a55620166087f1063e8e27a46602f2cf5efe54a6f37c939566cc93507d4c402b1ab61967baeed5562018ba07fd1bfa665ff0a0ee81f20833500dfc80ed4b576a9d481e6c7f2cd8243b94238e8556201b52b7f96c94070a261449c888cfb31ddd6716e50d52e263f7a74a5eeb34ee8b4241016556201e3127f2e60ceb69e96fe6481ce9457171ef3f030bf0150171842d8842b77cad9c3b35555620215cb7ff78db0549aead6621ec87aae05d7bab2ff4f1610fb2a5da9b0d8e5ca932cbe205562024dd77f7206804eee71b1705b2ebdc98e703bf07b0f4c0f02e3e11e04bfaa74de5375865562028bc67f1722be5def2cea03a513d20b9ef471eb355d33f3c504747c388749c98f2d4222556202d0367feea57b1f1522820919f93d0e22f8b5016667e54dfef4536f36a0f466802896ba5562031f9d7fdbb9abaa854f4db3eeaa646072c2d97ef4391daac19febcaaf62e35afc2c519b55620377c57f851f73f7125b7d7c14dc287f4bc29ddd916b6a89c6e09d2d4eabc50246e91812556203d9a67f7f1fc346acb2036e5b5f0fbe8156aceadc762d61540488c54e7331f45ffd20c155620446517f3087163455d40c2a16947527f1a86948a5e7ff7de9ba68924df713830e5e615a556204bef77f964ea767231031507a3f70c59b06c72a2054875e2bc2938da2a55d8f6cb774eb55620544ea7f39c12fc4f65c08d2961e20ab9bc18df4acbbdf98829d6cd7060fccb5e8535c7b556205d9a17f579cf2be734d9b04ae69aa2ac47f7d57a73216e05f35a9c951916f461f31449d5562067ebe7f9fa3ace5691e3b518f73bdcdd856471fb5839152e4d4383a70855965313a8d7e55620736107ffcc670724b0ae51983cbcd5c39830fdf68269a01ccb79e2798b86e7d9b68590655620801977fe3b2c1b596cd1a2a6349a15d2d1ab63f6b2cf08deaec81658cafd3b2a14040cb556208e38f7fa17bf40e81c47228a81202ddd9e3fd8f8c7a116130363b3dcc8a73fc1b708900556209de707f47845a7b6c79f491f651455c594ef10509bfe23c275dec7acf5198f7406fa77855620b02e77fa63cf338c2a7068c31396e74339c4eae75536e44463641023b5e7f14e0e5c8a455620c493a7f3f3714773d60e4d6f1eec9d5d17c2275d573bbfa8030a80905858a104027c52055620db5547f021a8d87d128494b881845d9562c47e841efdae534e579374e147feb41e24fdd55620f4b937fcb5acc7692adf0f459f4c747b10745e8691828884412b18207ee39ebd3637fd355621110da7f91f95df47904a90ac8bb634968d07613b2bbf711f934c1d20403c613c66b80b75562130a9a7f3ee3ee1318427566caac79615d067197d3a14aaa4fec1d445dfa761cfeb178b45562153ee67f723bb389013a8e287d60b741d37621880ed52f1363fb356206da160723f34936556217b4857f7c88ef8d7aca0318251f31c899c30b491c6eaeb9e0abc596bf1f7fc86a58b51255621a73067fc5a5152eb6f32112547d035859dfbd1920ac3f2633565d5b32f82ee8f48d8db355621d82db7f914dccb53380563059e9e556af6a690bb3e3d2e8763db4999263479efe191eda556220ed6d7f6c6d62e8a8b03fc99bb6a42c33f29fbb7bc355fb24b55c501263cba498f98982556224bd3c7ff0d06e1c676d19791845afcc57865504b6e1664144ce3e6d246a51a35a30ab6c55622934737f827b43d7b5df5f84fd4b18cce10d024e57edb92595e42f215cd9b8967d5d096255622e369e7f37f8fd616dbeae27e64020341887a523c145a1a4bb5f33edf950c4efb7379b8a556233d4a37f3f84cf6cefe8166d7172cc41f23bd15f2ff6c4676631dd9620c8946b70ea8aed55623a21737f73a117ba966c4ead530419dfd458ce63ae8e8e62f31e7b400021d3a05fa5b732556241324c7ffb30163b28865485300799dca1d6b9d977accbd874c63b0ce1bd7fe215a4c8485562491f047f4b5222d403a972015c1820d959615c913698372f8d411626c0024a5daa5b560f55625202527f55dee7f6292858369e5d0a94c234a9178230c539086694272573f6476e6f7a4455625bfa327fc2a55a2712cad0cb89be7087d2061240d48d4872b84544f6e2827fbe9340562a55626728407f0d66487a4fd51dd587b2804aa978e27509d1f975a58951d636cb4c8aad7c71e1556273b2307f9a6fcacd6a52d97f4e59c88a4aaf9414ac81acbbf335833d33f867d1f399cc1b556281c24c7fa5d50f82a15a819238a33e2a19ad83e1db0d3b8b39935b937d9c5f45cdaa422355629188017f1be71956f5d37e7a5b23d3a6bd9456048e6c8b0f66836c65be223c01c8e0ae2d55603c60005262a7d8c07fe491db451dcdea8a737c3aa1496f3882606839a69ff5f3ac5af330dfbfadf00155565b828054828255906000526020600020908101928215620013e4579160200282015b82811115620013e4578251825591602001919060010190620013c7565b50620013f2929150620013f6565b5090565b5b80821115620013f25760008155600101620013f7565b6000602082840312156200141f578081fd5b5051919050565b600082198211156200144657634e487b7160e01b81526011600452602481fd5b500190565b612184806200145b6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636c5ede1d11610104578063a1c130d4116100a2578063d0143bab11610071578063d0143bab14610370578063db6a48ce14610383578063f7e251f81461038b578063fccfac3d1461039e576101da565b8063a1c130d41461033a578063a43564eb14610342578063b78ac08714610355578063b97dd9e214610368576101da565b8063777b4b45116100de578063777b4b45146103045780638456cb5914610317578063931fa8f91461031f5780639c7ec88114610332576101da565b80636c5ede1d146102be57806373eff2fd146102d157806375f677ca146102f1576101da565b806331ca6b791161017c57806349281b311161014b57806349281b31146102865780634ff0876a146102995780635c975abb146102a157806367087ee3146102b6576101da565b806331ca6b791461024e5780633f4ba83a14610263578063433124511461026b57806344321f6d1461027e576101da565b806322ded4f5116101b857806322ded4f514610218578063290e45441461022b5780632adb336014610233578063302b1a5f1461023b576101da565b806305917ac0146101df57806315e5a1e5146101fd5780631e6c5e8114610205575b600080fd5b6101e76103b1565b6040516101f49190612037565b60405180910390f35b6101e76103b6565b6101e7610213366004611cbe565b6103bc565b6101e7610226366004611cbe565b610427565b6101e7610439565b6101e76107dd565b6101e7610249366004611c09565b610835565b61026161025c366004611cf6565b610847565b005b610261610904565b6101e7610279366004611c41565b61093d565b6101e7610952565b6101e7610294366004611c09565b6109aa565b6101e76109ce565b6102a96109d4565b6040516101f49190611dda565b6101e76109e4565b6101e76102cc366004611cbe565b610a38565b6102e46102df366004611c09565b610a63565b6040516101f49190612001565b6101e76102ff366004611cbe565b610a7e565b610261610312366004611cf6565b610aa9565b610261610b66565b6101e761032d366004611c41565b610ba5565b6102e4610d0f565b6101e7610d1e565b6101e7610350366004611cbe565b610d3a565b6101e7610363366004611cbe565b6110df565b6101e76110f1565b61026161037e366004611c79565b611109565b6101e76111e5565b6101e7610399366004611cbe565b611233565b6102616103ac366004611c09565b61123e565b603c81565b60085481565b6000806103c8836112f7565b9050806103d9576000915050610422565b60006103ea3361032d86600161204e565b905061041d620f42406104178361041186610417610408338c61137f565b6104118c610a38565b9061140a565b90611416565b925050505b919050565b60096020526000908152604090205481565b60006104436109d4565b156104695760405162461bcd60e51b815260040161046090611f9e565b60405180910390fd5b6000806104886001610479611422565b6001600160801b031690611461565b9050603c8111156104975750603c5b336000908152600660205260408120546104bb906001600160801b0316600161204e565b90505b81816001600160801b03161161057c576104d78161146d565b6104e19084612079565b925060006104ee826115f3565b9050801561056957336000908152600b602052604090205461051090826116a6565b336000818152600b6020526040908190209290925590516001600160801b03841691907f3ff464150615c9feed1523d133f419537d8dce4eafb4f3cad6441f1057f7a98b90610560908590612037565b60405180910390a35b5080610574816120e7565b9150506104be565b50336000818152600660205260409020547fb68dafc1da13dc868096d0b87347c831d0bda92d178317eb1dec7f788444485c906105c2906001600160801b0316846120d0565b846040516105d1929190612040565b60405180910390a2600254604051637619800d60e11b81526000916001600160a01b03169063ec33001a9061060a903390600401611d5f565b60206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065a9190611ca4565b80156106745750336000908152600b602052604090205415155b156107455750336000818152600b6020526040808220805492905560035490516340c10f1960e01b815291926001600160a01b03909116916340c10f19916106c0918590600401611dc1565b600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050506106fa611422565b6001600160801b0316336001600160a01b03167f4c1a02c138bad7a3efdf0e207e5b369762a15144bd1ca3516aa5c70b3b58c10f8360405161073c9190612037565b60405180910390a35b82156107ca576003546040516340c10f1960e01b81526001600160a01b03909116906340c10f199061077d9033908790600401611dc1565b600060405180830381600087803b15801561079757600080fd5b505af11580156107ab573d6000803e3d6000fd5b505050506107ca6107c582856116a690919063ffffffff16565b6116b2565b6107d483826116a6565b93505050505b90565b6000806107e8611422565b90506001600160801b03811615806108095750603c816001600160801b0316115b156108185760009150506107da565b6001600160801b03166000908152600a6020526040902054905090565b600b6020526000908152604090205481565b6001546001600160a01b031633146108715760405162461bcd60e51b815260040161046090611e79565b6000826001600160801b03161180156108945750603c826001600160801b031611155b6108b05760405162461bcd60e51b815260040161046090611e1c565b6108b8611422565b6001600160801b0316826001600160801b0316116108e85760405162461bcd60e51b815260040161046090611f1c565b6001600160801b039091166000908152600a6020526040902055565b6001546001600160a01b0316331461092e5760405162461bcd60e51b815260040161046090611e79565b6001805460ff60a01b19169055565b6000610949838361137f565b90505b92915050565b60008061095d611422565b90506001600160801b038116158061097e5750603c816001600160801b0316115b1561098d5760009150506107da565b6001600160801b0316600090815260096020526040902054905090565b6001600160a01b03166000908152600660205260409020546001600160801b031690565b60075481565b600154600160a01b900460ff1690565b60008060015b603c816001600160801b031611610a32576001600160801b038116600090815260096020526040902054610a1e9083612079565b915080610a2a816120e7565b9150506109ea565b50905090565b6001600160801b0381166000908152600a602052604081205461094c90670de0b6b3a764000061140a565b6006602052600090815260409020546001600160801b031681565b6001600160801b03811660009081526009602052604081205461094c90670de0b6b3a764000061140a565b6001546001600160a01b03163314610ad35760405162461bcd60e51b815260040161046090611e79565b6000826001600160801b0316118015610af65750603c826001600160801b031611155b610b125760405162461bcd60e51b815260040161046090611e1c565b610b1a611422565b6001600160801b0316826001600160801b031611610b4a5760405162461bcd60e51b815260040161046090611f1c565b6001600160801b03909116600090815260096020526040902055565b6001546001600160a01b03163314610b905760405162461bcd60e51b815260040161046090611e79565b6001805460ff60a01b1916600160a01b179055565b60025460405163c691d19160e01b81526000918291829182916001600160a01b039091169063c691d19190610bde908990600401611d5f565b60606040518083038186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e9190611d2b565b92509250925081856001600160801b03161180610c5d575081856001600160801b031611158015610c5d575080155b80610c70575082856001600160801b0316105b15610c81576000935050505061094c565b600254604051631e953b1760e31b81526000916001600160a01b03169063f4a9d8b890610cb49089908b90600401612015565b60206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190611d13565b979650505050505050565b6005546001600160801b031681565b336000908152600660205260409020546001600160801b031690565b6000610d446109d4565b15610d615760405162461bcd60e51b815260040161046090611f9e565b816001600160801b0316610d73611422565b6001600160801b031611610d995760405162461bcd60e51b815260040161046090611fca565b603c826001600160801b03161115610dc35760405162461bcd60e51b815260040161046090611de5565b336000908152600660205260409020546001600160801b0380841691610deb911660016116a6565b14610e085760405162461bcd60e51b815260040161046090611ef2565b6000610e138361146d565b90506000610e20846115f3565b9050610e44610e2e856115f3565b336000908152600b6020526040902054906116a6565b336000818152600b6020526040908190209290925590516001600160801b03861691907f3ff464150615c9feed1523d133f419537d8dce4eafb4f3cad6441f1057f7a98b90610e94908590612037565b60405180910390a3600254604051637619800d60e11b81526000916001600160a01b03169063ec33001a90610ecd903390600401611d5f565b60206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611ca4565b8015610f375750336000908152600b602052604090205415155b156110015750336000818152600b6020526040808220805492905560035490516340c10f1960e01b815291926001600160a01b03909116916340c10f1991610f83918590600401611dc1565b600060405180830381600087803b158015610f9d57600080fd5b505af1158015610fb1573d6000803e3d6000fd5b50505050846001600160801b0316336001600160a01b03167f4c1a02c138bad7a3efdf0e207e5b369762a15144bd1ca3516aa5c70b3b58c10f83604051610ff89190612037565b60405180910390a35b8215611081576003546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906110399033908790600401611dc1565b600060405180830381600087803b15801561105357600080fd5b505af1158015611067573d6000803e3d6000fd5b505050506110816107c582856116a690919063ffffffff16565b846001600160801b0316336001600160a01b03167f04ad45a69eeed9c390c3a678fed2d4b90bde98e742de9936d5e0915bf3d0ea4e856040516110c49190612037565b60405180910390a36110d683826116a6565b95945050505050565b600a6020526000908152604090205481565b60006110fb611422565b6001600160801b0316905090565b6002546001600160a01b031633146111335760405162461bcd60e51b815260040161046090611f51565b6001600160a01b0382166000908152600b602052604090205480156111e057611163620f4240610417838561140a565b6001600160a01b0384166000908152600b602052604081208290559061118a908390611461565b9050611194611422565b6001600160801b0316846001600160a01b03167f78aca16d6078c9827367a58ab3945e7a7a88db3bce89486c7447eb6c0dc0da1f836040516111d69190612037565b60405180910390a3505b505050565b60008060015b603c816001600160801b031611610a32576001600160801b0381166000908152600a602052604090205461121f9083612079565b91508061122b816120e7565b9150506111eb565b600061094c826112f7565b6002546001600160a01b031633146112685760405162461bcd60e51b815260040161046090611f51565b6001600160a01b0381166000908152600b602052604090205480156112f3576001600160a01b0382166000908152600b60205260408120556112a8611422565b6001600160801b0316826001600160a01b03167f78aca16d6078c9827367a58ab3945e7a7a88db3bce89486c7447eb6c0dc0da1f836040516112ea9190612037565b60405180910390a35b5050565b6002546000805460405163165196bf60e11b815291926001600160a01b0390811692632ca32d7e9261132f9216908690600401611d9f565b60206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190611d13565b600254600080546040516308c028dd60e41b815291926001600160a01b0390811692638c028dd0926113ba9288929116908790600401611d73565b60206040518083038186803b1580156113d257600080fd5b505afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190611d13565b600061094982846120b1565b60006109498284612091565b6000600854421015611436575060006107da565b61145c60016114566007546104176008544261146190919063ffffffff16565b906116a6565b905090565b600061094982846120d0565b6005546000906001600160801b038084169116101561148f5761148f82611b64565b33600090815260066020526040902080546001600160801b0319166001600160801b0384169081179091556004805490919081106114dd57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600014156114f857506000610422565b6002546040516331ed3bf160e21b81526000916001600160a01b03169063c7b4efc490611529903390600401611d5f565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115799190611cda565b9050806001600160801b0316836001600160801b03161061159e576000915050610422565b6115ec6004846001600160801b0316815481106115cb57634e487b7160e01b600052603260045260246000fd5b90600052602060002001546104176115e3338761137f565b61041187610a7e565b9392505050565b60006004826001600160801b03168154811061161f57634e487b7160e01b600052603260045260246000fd5b90600052602060002001546000141561163a57506000610422565b600061164b3361032d85600161204e565b90506115ec620f4240610417836104116004886001600160801b03168154811061168557634e487b7160e01b600052603260045260246000fd5b906000526020600020015461041761169d338b61137f565b6104118b610a38565b60006109498284612079565b600254604051630308a59b60e31b81526001600160a01b03909116906318452cd8906116e2903390600401611d5f565b60206040518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117329190611ca4565b15611b6157600254604051639ca423b360e01b81526000916001600160a01b031690639ca423b390611768903390600401611d5f565b60206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b89190611c25565b90506000611852612710610417600260009054906101000a90046001600160a01b03166001600160a01b03166375cd903b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561181357600080fd5b505afa158015611827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184b9190611d13565b869061140a565b6003546040516340c10f1960e01b81529192506001600160a01b0316906340c10f19906118859085908590600401611dc1565b600060405180830381600087803b15801561189f57600080fd5b505af11580156118b3573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03167f1834256d5ddaf7e9aafcd123dca0e155cef83bfc259ce07ba017587c6cdd9abc836040516118fa9190612037565b60405180910390a3600254604051630308a59b60e31b81526001600160a01b03909116906318452cd890611932908590600401611d5f565b60206040518083038186803b15801561194a57600080fd5b505afa15801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190611ca4565b156111e057600254604051639ca423b360e01b81526000916001600160a01b031690639ca423b3906119b8908690600401611d5f565b60206040518083038186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a089190611c25565b90506000611aa2612710610417600260009054906101000a90046001600160a01b03166001600160a01b03166320f5984d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6357600080fd5b505afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b9190611d13565b889061140a565b6003546040516340c10f1960e01b81529192506001600160a01b0316906340c10f1990611ad59085908590600401611dc1565b600060405180830381600087803b158015611aef57600080fd5b505af1158015611b03573d6000803e3d6000fd5b50505050816001600160a01b0316846001600160a01b0316336001600160a01b03167f4514843c0c872aa44ebb71c5e6b05840c7de3261fb32de859afac91fcf0dafb784604051611b549190612037565b60405180910390a4505050505b50565b6005546001600160801b0380831691611b7f911660016116a6565b14611b9c5760405162461bcd60e51b815260040161046090611ebb565b600580546001600160801b0319166001600160801b038316179055611bc0816112f7565b6004826001600160801b031681548110611bea57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550565b8051801515811461042257600080fd5b600060208284031215611c1a578081fd5b81356115ec81612124565b600060208284031215611c36578081fd5b81516115ec81612124565b60008060408385031215611c53578081fd5b8235611c5e81612124565b91506020830135611c6e81612139565b809150509250929050565b60008060408385031215611c8b578182fd5b8235611c9681612124565b946020939093013593505050565b600060208284031215611cb5578081fd5b61094982611bf9565b600060208284031215611ccf578081fd5b81356115ec81612139565b600060208284031215611ceb578081fd5b81516115ec81612139565b60008060408385031215611d08578182fd5b8235611c9681612139565b600060208284031215611d24578081fd5b5051919050565b600080600060608486031215611d3f578081fd5b8351925060208401519150611d5660408501611bf9565b90509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b6001600160a01b039290921682526001600160801b0316602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6020808252601e908201527f4d6178696d756d206e756d626572206f662065706f6368732069732036300000604082015260600190565b6020808252603c908201527f4d696e696d756d2065706f6368206e756d626572206973203120616e64204d6160408201527f78696d756d206e756d626572206f662065706f63687320697320363000000000606082015260800190565b60208082526022908201527f4f6e6c79206f776e65722063616e2070657266726f6d2074686973206163746960408201526137b760f11b606082015260800190565b6020808252601f908201527f45706f63682063616e20626520696e6974206f6e6c7920696e206f7264657200604082015260600190565b60208082526010908201526f2430b93b32b9ba1034b71037b93232b960811b604082015260600190565b6020808252818101527f4f6e6c79206675747572652065706f63682063616e2062652075706461746564604082015260600190565b6020808252602d908201527f4f6e6c79207374616b696e6720636f6e74726163742063616e2070657266726f60408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b6020808252601b908201527f546869732065706f636820697320696e20746865206675747572650000000000604082015260600190565b6001600160801b0391909116815260200190565b6001600160801b039290921682526001600160a01b0316602082015260400190565b90815260200190565b918252602082015260400190565b60006001600160801b038083168185168083038211156120705761207061210e565b01949350505050565b6000821982111561208c5761208c61210e565b500190565b6000826120ac57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156120cb576120cb61210e565b500290565b6000828210156120e2576120e261210e565b500390565b60006001600160801b03808316818114156121045761210461210e565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611b6157600080fd5b6001600160801b0381168114611b6157600080fdfea2646970667358221220835848fa0cf11f61af53c7e70b522fd99596de6fcf63dcca9ca1f5ff8d7e9e3164736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636c5ede1d11610104578063a1c130d4116100a2578063d0143bab11610071578063d0143bab14610370578063db6a48ce14610383578063f7e251f81461038b578063fccfac3d1461039e576101da565b8063a1c130d41461033a578063a43564eb14610342578063b78ac08714610355578063b97dd9e214610368576101da565b8063777b4b45116100de578063777b4b45146103045780638456cb5914610317578063931fa8f91461031f5780639c7ec88114610332576101da565b80636c5ede1d146102be57806373eff2fd146102d157806375f677ca146102f1576101da565b806331ca6b791161017c57806349281b311161014b57806349281b31146102865780634ff0876a146102995780635c975abb146102a157806367087ee3146102b6576101da565b806331ca6b791461024e5780633f4ba83a14610263578063433124511461026b57806344321f6d1461027e576101da565b806322ded4f5116101b857806322ded4f514610218578063290e45441461022b5780632adb336014610233578063302b1a5f1461023b576101da565b806305917ac0146101df57806315e5a1e5146101fd5780631e6c5e8114610205575b600080fd5b6101e76103b1565b6040516101f49190612037565b60405180910390f35b6101e76103b6565b6101e7610213366004611cbe565b6103bc565b6101e7610226366004611cbe565b610427565b6101e7610439565b6101e76107dd565b6101e7610249366004611c09565b610835565b61026161025c366004611cf6565b610847565b005b610261610904565b6101e7610279366004611c41565b61093d565b6101e7610952565b6101e7610294366004611c09565b6109aa565b6101e76109ce565b6102a96109d4565b6040516101f49190611dda565b6101e76109e4565b6101e76102cc366004611cbe565b610a38565b6102e46102df366004611c09565b610a63565b6040516101f49190612001565b6101e76102ff366004611cbe565b610a7e565b610261610312366004611cf6565b610aa9565b610261610b66565b6101e761032d366004611c41565b610ba5565b6102e4610d0f565b6101e7610d1e565b6101e7610350366004611cbe565b610d3a565b6101e7610363366004611cbe565b6110df565b6101e76110f1565b61026161037e366004611c79565b611109565b6101e76111e5565b6101e7610399366004611cbe565b611233565b6102616103ac366004611c09565b61123e565b603c81565b60085481565b6000806103c8836112f7565b9050806103d9576000915050610422565b60006103ea3361032d86600161204e565b905061041d620f42406104178361041186610417610408338c61137f565b6104118c610a38565b9061140a565b90611416565b925050505b919050565b60096020526000908152604090205481565b60006104436109d4565b156104695760405162461bcd60e51b815260040161046090611f9e565b60405180910390fd5b6000806104886001610479611422565b6001600160801b031690611461565b9050603c8111156104975750603c5b336000908152600660205260408120546104bb906001600160801b0316600161204e565b90505b81816001600160801b03161161057c576104d78161146d565b6104e19084612079565b925060006104ee826115f3565b9050801561056957336000908152600b602052604090205461051090826116a6565b336000818152600b6020526040908190209290925590516001600160801b03841691907f3ff464150615c9feed1523d133f419537d8dce4eafb4f3cad6441f1057f7a98b90610560908590612037565b60405180910390a35b5080610574816120e7565b9150506104be565b50336000818152600660205260409020547fb68dafc1da13dc868096d0b87347c831d0bda92d178317eb1dec7f788444485c906105c2906001600160801b0316846120d0565b846040516105d1929190612040565b60405180910390a2600254604051637619800d60e11b81526000916001600160a01b03169063ec33001a9061060a903390600401611d5f565b60206040518083038186803b15801561062257600080fd5b505afa158015610636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065a9190611ca4565b80156106745750336000908152600b602052604090205415155b156107455750336000818152600b6020526040808220805492905560035490516340c10f1960e01b815291926001600160a01b03909116916340c10f19916106c0918590600401611dc1565b600060405180830381600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050506106fa611422565b6001600160801b0316336001600160a01b03167f4c1a02c138bad7a3efdf0e207e5b369762a15144bd1ca3516aa5c70b3b58c10f8360405161073c9190612037565b60405180910390a35b82156107ca576003546040516340c10f1960e01b81526001600160a01b03909116906340c10f199061077d9033908790600401611dc1565b600060405180830381600087803b15801561079757600080fd5b505af11580156107ab573d6000803e3d6000fd5b505050506107ca6107c582856116a690919063ffffffff16565b6116b2565b6107d483826116a6565b93505050505b90565b6000806107e8611422565b90506001600160801b03811615806108095750603c816001600160801b0316115b156108185760009150506107da565b6001600160801b03166000908152600a6020526040902054905090565b600b6020526000908152604090205481565b6001546001600160a01b031633146108715760405162461bcd60e51b815260040161046090611e79565b6000826001600160801b03161180156108945750603c826001600160801b031611155b6108b05760405162461bcd60e51b815260040161046090611e1c565b6108b8611422565b6001600160801b0316826001600160801b0316116108e85760405162461bcd60e51b815260040161046090611f1c565b6001600160801b039091166000908152600a6020526040902055565b6001546001600160a01b0316331461092e5760405162461bcd60e51b815260040161046090611e79565b6001805460ff60a01b19169055565b6000610949838361137f565b90505b92915050565b60008061095d611422565b90506001600160801b038116158061097e5750603c816001600160801b0316115b1561098d5760009150506107da565b6001600160801b0316600090815260096020526040902054905090565b6001600160a01b03166000908152600660205260409020546001600160801b031690565b60075481565b600154600160a01b900460ff1690565b60008060015b603c816001600160801b031611610a32576001600160801b038116600090815260096020526040902054610a1e9083612079565b915080610a2a816120e7565b9150506109ea565b50905090565b6001600160801b0381166000908152600a602052604081205461094c90670de0b6b3a764000061140a565b6006602052600090815260409020546001600160801b031681565b6001600160801b03811660009081526009602052604081205461094c90670de0b6b3a764000061140a565b6001546001600160a01b03163314610ad35760405162461bcd60e51b815260040161046090611e79565b6000826001600160801b0316118015610af65750603c826001600160801b031611155b610b125760405162461bcd60e51b815260040161046090611e1c565b610b1a611422565b6001600160801b0316826001600160801b031611610b4a5760405162461bcd60e51b815260040161046090611f1c565b6001600160801b03909116600090815260096020526040902055565b6001546001600160a01b03163314610b905760405162461bcd60e51b815260040161046090611e79565b6001805460ff60a01b1916600160a01b179055565b60025460405163c691d19160e01b81526000918291829182916001600160a01b039091169063c691d19190610bde908990600401611d5f565b60606040518083038186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e9190611d2b565b92509250925081856001600160801b03161180610c5d575081856001600160801b031611158015610c5d575080155b80610c70575082856001600160801b0316105b15610c81576000935050505061094c565b600254604051631e953b1760e31b81526000916001600160a01b03169063f4a9d8b890610cb49089908b90600401612015565b60206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190611d13565b979650505050505050565b6005546001600160801b031681565b336000908152600660205260409020546001600160801b031690565b6000610d446109d4565b15610d615760405162461bcd60e51b815260040161046090611f9e565b816001600160801b0316610d73611422565b6001600160801b031611610d995760405162461bcd60e51b815260040161046090611fca565b603c826001600160801b03161115610dc35760405162461bcd60e51b815260040161046090611de5565b336000908152600660205260409020546001600160801b0380841691610deb911660016116a6565b14610e085760405162461bcd60e51b815260040161046090611ef2565b6000610e138361146d565b90506000610e20846115f3565b9050610e44610e2e856115f3565b336000908152600b6020526040902054906116a6565b336000818152600b6020526040908190209290925590516001600160801b03861691907f3ff464150615c9feed1523d133f419537d8dce4eafb4f3cad6441f1057f7a98b90610e94908590612037565b60405180910390a3600254604051637619800d60e11b81526000916001600160a01b03169063ec33001a90610ecd903390600401611d5f565b60206040518083038186803b158015610ee557600080fd5b505afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190611ca4565b8015610f375750336000908152600b602052604090205415155b156110015750336000818152600b6020526040808220805492905560035490516340c10f1960e01b815291926001600160a01b03909116916340c10f1991610f83918590600401611dc1565b600060405180830381600087803b158015610f9d57600080fd5b505af1158015610fb1573d6000803e3d6000fd5b50505050846001600160801b0316336001600160a01b03167f4c1a02c138bad7a3efdf0e207e5b369762a15144bd1ca3516aa5c70b3b58c10f83604051610ff89190612037565b60405180910390a35b8215611081576003546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906110399033908790600401611dc1565b600060405180830381600087803b15801561105357600080fd5b505af1158015611067573d6000803e3d6000fd5b505050506110816107c582856116a690919063ffffffff16565b846001600160801b0316336001600160a01b03167f04ad45a69eeed9c390c3a678fed2d4b90bde98e742de9936d5e0915bf3d0ea4e856040516110c49190612037565b60405180910390a36110d683826116a6565b95945050505050565b600a6020526000908152604090205481565b60006110fb611422565b6001600160801b0316905090565b6002546001600160a01b031633146111335760405162461bcd60e51b815260040161046090611f51565b6001600160a01b0382166000908152600b602052604090205480156111e057611163620f4240610417838561140a565b6001600160a01b0384166000908152600b602052604081208290559061118a908390611461565b9050611194611422565b6001600160801b0316846001600160a01b03167f78aca16d6078c9827367a58ab3945e7a7a88db3bce89486c7447eb6c0dc0da1f836040516111d69190612037565b60405180910390a3505b505050565b60008060015b603c816001600160801b031611610a32576001600160801b0381166000908152600a602052604090205461121f9083612079565b91508061122b816120e7565b9150506111eb565b600061094c826112f7565b6002546001600160a01b031633146112685760405162461bcd60e51b815260040161046090611f51565b6001600160a01b0381166000908152600b602052604090205480156112f3576001600160a01b0382166000908152600b60205260408120556112a8611422565b6001600160801b0316826001600160a01b03167f78aca16d6078c9827367a58ab3945e7a7a88db3bce89486c7447eb6c0dc0da1f836040516112ea9190612037565b60405180910390a35b5050565b6002546000805460405163165196bf60e11b815291926001600160a01b0390811692632ca32d7e9261132f9216908690600401611d9f565b60206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190611d13565b600254600080546040516308c028dd60e41b815291926001600160a01b0390811692638c028dd0926113ba9288929116908790600401611d73565b60206040518083038186803b1580156113d257600080fd5b505afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190611d13565b600061094982846120b1565b60006109498284612091565b6000600854421015611436575060006107da565b61145c60016114566007546104176008544261146190919063ffffffff16565b906116a6565b905090565b600061094982846120d0565b6005546000906001600160801b038084169116101561148f5761148f82611b64565b33600090815260066020526040902080546001600160801b0319166001600160801b0384169081179091556004805490919081106114dd57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600014156114f857506000610422565b6002546040516331ed3bf160e21b81526000916001600160a01b03169063c7b4efc490611529903390600401611d5f565b60206040518083038186803b15801561154157600080fd5b505afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115799190611cda565b9050806001600160801b0316836001600160801b03161061159e576000915050610422565b6115ec6004846001600160801b0316815481106115cb57634e487b7160e01b600052603260045260246000fd5b90600052602060002001546104176115e3338761137f565b61041187610a7e565b9392505050565b60006004826001600160801b03168154811061161f57634e487b7160e01b600052603260045260246000fd5b90600052602060002001546000141561163a57506000610422565b600061164b3361032d85600161204e565b90506115ec620f4240610417836104116004886001600160801b03168154811061168557634e487b7160e01b600052603260045260246000fd5b906000526020600020015461041761169d338b61137f565b6104118b610a38565b60006109498284612079565b600254604051630308a59b60e31b81526001600160a01b03909116906318452cd8906116e2903390600401611d5f565b60206040518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117329190611ca4565b15611b6157600254604051639ca423b360e01b81526000916001600160a01b031690639ca423b390611768903390600401611d5f565b60206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b89190611c25565b90506000611852612710610417600260009054906101000a90046001600160a01b03166001600160a01b03166375cd903b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561181357600080fd5b505afa158015611827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184b9190611d13565b869061140a565b6003546040516340c10f1960e01b81529192506001600160a01b0316906340c10f19906118859085908590600401611dc1565b600060405180830381600087803b15801561189f57600080fd5b505af11580156118b3573d6000803e3d6000fd5b50505050816001600160a01b0316336001600160a01b03167f1834256d5ddaf7e9aafcd123dca0e155cef83bfc259ce07ba017587c6cdd9abc836040516118fa9190612037565b60405180910390a3600254604051630308a59b60e31b81526001600160a01b03909116906318452cd890611932908590600401611d5f565b60206040518083038186803b15801561194a57600080fd5b505afa15801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190611ca4565b156111e057600254604051639ca423b360e01b81526000916001600160a01b031690639ca423b3906119b8908690600401611d5f565b60206040518083038186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a089190611c25565b90506000611aa2612710610417600260009054906101000a90046001600160a01b03166001600160a01b03166320f5984d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6357600080fd5b505afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b9190611d13565b889061140a565b6003546040516340c10f1960e01b81529192506001600160a01b0316906340c10f1990611ad59085908590600401611dc1565b600060405180830381600087803b158015611aef57600080fd5b505af1158015611b03573d6000803e3d6000fd5b50505050816001600160a01b0316846001600160a01b0316336001600160a01b03167f4514843c0c872aa44ebb71c5e6b05840c7de3261fb32de859afac91fcf0dafb784604051611b549190612037565b60405180910390a4505050505b50565b6005546001600160801b0380831691611b7f911660016116a6565b14611b9c5760405162461bcd60e51b815260040161046090611ebb565b600580546001600160801b0319166001600160801b038316179055611bc0816112f7565b6004826001600160801b031681548110611bea57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550565b8051801515811461042257600080fd5b600060208284031215611c1a578081fd5b81356115ec81612124565b600060208284031215611c36578081fd5b81516115ec81612124565b60008060408385031215611c53578081fd5b8235611c5e81612124565b91506020830135611c6e81612139565b809150509250929050565b60008060408385031215611c8b578182fd5b8235611c9681612124565b946020939093013593505050565b600060208284031215611cb5578081fd5b61094982611bf9565b600060208284031215611ccf578081fd5b81356115ec81612139565b600060208284031215611ceb578081fd5b81516115ec81612139565b60008060408385031215611d08578182fd5b8235611c9681612139565b600060208284031215611d24578081fd5b5051919050565b600080600060608486031215611d3f578081fd5b8351925060208401519150611d5660408501611bf9565b90509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b6001600160a01b039290921682526001600160801b0316602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6020808252601e908201527f4d6178696d756d206e756d626572206f662065706f6368732069732036300000604082015260600190565b6020808252603c908201527f4d696e696d756d2065706f6368206e756d626572206973203120616e64204d6160408201527f78696d756d206e756d626572206f662065706f63687320697320363000000000606082015260800190565b60208082526022908201527f4f6e6c79206f776e65722063616e2070657266726f6d2074686973206163746960408201526137b760f11b606082015260800190565b6020808252601f908201527f45706f63682063616e20626520696e6974206f6e6c7920696e206f7264657200604082015260600190565b60208082526010908201526f2430b93b32b9ba1034b71037b93232b960811b604082015260600190565b6020808252818101527f4f6e6c79206675747572652065706f63682063616e2062652075706461746564604082015260600190565b6020808252602d908201527f4f6e6c79207374616b696e6720636f6e74726163742063616e2070657266726f60408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b6020808252601b908201527f546869732065706f636820697320696e20746865206675747572650000000000604082015260600190565b6001600160801b0391909116815260200190565b6001600160801b039290921682526001600160a01b0316602082015260400190565b90815260200190565b918252602082015260400190565b60006001600160801b038083168185168083038211156120705761207061210e565b01949350505050565b6000821982111561208c5761208c61210e565b500190565b6000826120ac57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156120cb576120cb61210e565b500290565b6000828210156120e2576120e261210e565b500390565b60006001600160801b03808316818114156121045761210461210e565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611b6157600080fd5b6001600160801b0381168114611b6157600080fdfea2646970667358221220835848fa0cf11f61af53c7e70b522fd99596de6fcf63dcca9ca1f5ff8d7e9e3164736f6c63430008000033
Deployed Bytecode Sourcemap
8200:18896:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8326:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8895:22;;;:::i;17667:537::-;;;;;;:::i;:::-;;:::i;8956:47::-;;;;;;:::i;:::-;;:::i;12834:1686::-;;;:::i;11918:273::-;;;:::i;9070:57::-;;;;;;:::i;:::-;;:::i;11005:339::-;;;;;;:::i;:::-;;:::i;:::-;;22224:72;;;:::i;17218:161::-;;;;;;:::i;:::-;;:::i;11646:260::-;;;:::i;17521:134::-;;;;;;:::i;:::-;;:::i;8833:25::-;;;:::i;22053:78::-;;;:::i;:::-;;;;;;;:::i;12199:261::-;;;:::i;11495:139::-;;;;;;:::i;:::-;;:::i;8771:55::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11352:131::-;;;;;;:::i;:::-;;:::i;10667:326::-;;;;;;:::i;:::-;;:::i;22143:69::-;;;:::i;18216:480::-;;;;;;:::i;:::-;;:::i;8729:35::-;;;:::i;17387:122::-;;;:::i;14528:1401::-;;;;;;:::i;:::-;;:::i;9010:53::-;;;;;;:::i;:::-;;:::i;17033:95::-;;;:::i;18708:446::-;;;;;;:::i;:::-;;:::i;12473:245::-;;;:::i;16911:114::-;;;;;;:::i;:::-;;:::i;19166:288::-;;;;;;:::i;:::-;;:::i;8326:38::-;8362:2;8326:38;:::o;8895:22::-;;;;:::o;17667:537::-;17737:4;17754:16;17773:21;17786:7;17773:12;:21::i;:::-;17754:40;-1:-1:-1;17870:13:0;17866:54;;17907:1;17900:8;;;;;17866:54;17940:24;17967:49;17992:10;18004:11;:7;18014:1;18004:11;:::i;17967:49::-;17940:76;;18036:160;8414:7;18036:139;18158:16;18036:117;18144:8;18036:93;18084:44;18108:10;18120:7;18084:23;:44::i;:::-;18036:33;18061:7;18036:24;:33::i;:::-;:47;;:93::i;:::-;:107;;:117::i;:160::-;18029:167;;;;17667:537;;;;:::o;8956:47::-;;;;;;;;;;;;;:::o;12834:1686::-;12889:4;9471:8;:6;:8::i;:::-;9470:9;9462:40;;;;-1:-1:-1;;;9462:40:0;;;;;;;:::i;:::-;;;;;;;;;12905:26:::1;12942:12:::0;12957:20:::1;12975:1;12957:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;12957:17:0::1;::::0;::::1;:20::i;:::-;12942:35;;8362:2;13051:7;:22;13047:77;;;-1:-1:-1::0;8362:2:0::1;13047:77;13174:10;13141:9;13153:32:::0;;;:20:::1;:32;::::0;;;;;:36:::1;::::0;-1:-1:-1;;;;;13153:32:0::1;::::0;:36:::1;:::i;:::-;13141:48;;13136:557;13196:7;13191:1;-1:-1:-1::0;;;;;13191:12:0::1;;13136:557;;13358:11;13367:1;13358:8;:11::i;:::-;13333:36;::::0;;::::1;:::i;:::-;;;13398:21;13422;13441:1;13422:18;:21::i;:::-;13398:45:::0;-1:-1:-1;13462:17:0;;13458:224:::1;;13560:10;13537:34;::::0;;;:22:::1;:34;::::0;;;;;:53:::1;::::0;13576:13;13537:38:::1;:53::i;:::-;13523:10;13500:34;::::0;;;:22:::1;:34;::::0;;;;;;:90;;;;13614:52;;-1:-1:-1;;;;;13614:52:0;::::1;::::0;13523:10;13614:52:::1;::::0;::::1;::::0;13652:13;;13614:52:::1;:::i;:::-;;;;;;;;13458:224;-1:-1:-1::0;13205:3:0;::::1;::::0;::::1;:::i;:::-;;;;13136:557;;;-1:-1:-1::0;13722:10:0::1;13744:32;::::0;;;:20:::1;:32;::::0;;;;;13710:90:::1;::::0;13734:42:::1;::::0;-1:-1:-1;;;;;13744:32:0::1;13734:7:::0;:42:::1;:::i;:::-;13778:21;13710:90;;;;;;;:::i;:::-;;;;;;;;13858:8;::::0;:36:::1;::::0;-1:-1:-1;;;13858:36:0;;13813:26:::1;::::0;-1:-1:-1;;;;;13858:8:0::1;::::0;:24:::1;::::0;:36:::1;::::0;13883:10:::1;::::0;13858:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;;;;-1:-1:-1::0;13921:10:0::1;13935:1;13898:34:::0;;;:22:::1;:34;::::0;;;;;:38;;13858:78:::1;13854:369;;;-1:-1:-1::0;13997:10:0::1;13974:34;::::0;;;:22:::1;:34;::::0;;;;;;;14023:38;;;14076:7:::1;::::0;:44;;-1:-1:-1;;;14076:44:0;;13974:34;;-1:-1:-1;;;;;14076:7:0;;::::1;::::0;:12:::1;::::0;:44:::1;::::0;13974:34;;14076:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14177:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;14140:71:0::1;14165:10;-1:-1:-1::0;;;;;14140:71:0::1;;14192:18;14140:71;;;;;;:::i;:::-;;;;;;;;13854:369;14239:25:::0;;14235:213:::1;;14272:7;::::0;:47:::1;::::0;-1:-1:-1;;;14272:47:0;;-1:-1:-1;;;;;14272:7:0;;::::1;::::0;:12:::1;::::0;:47:::1;::::0;14285:10:::1;::::0;14297:21;;14272:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14365:71;14390:45;14416:18;14390:21;:25;;:45;;;;:::i;:::-;14365:24;:71::i;:::-;14467:45;:21:::0;14493:18;14467:25:::1;:45::i;:::-;14460:52;;;;;9513:1;12834:1686:::0;:::o;11918:273::-;11979:4;11996:20;12019:13;:11;:13::i;:::-;11996:36;-1:-1:-1;;;;;;12047:17:0;;;;:48;;;8362:2;12068:12;-1:-1:-1;;;;;12068:27:0;;12047:48;12043:89;;;12119:1;12112:8;;;;;12043:89;-1:-1:-1;;;;;12151:32:0;;;;;:18;:32;;;;;;;-1:-1:-1;11918:273:0;:::o;9070:57::-;;;;;;;;;;;;;:::o;11005:339::-;9349:6;;-1:-1:-1;;;;;9349:6:0;9335:10;:20;9327:67;;;;-1:-1:-1;;;9327:67:0;;;;;;;:::i;:::-;11117:1:::1;11107:7;-1:-1:-1::0;;;;;11107:11:0::1;;:38;;;;;8362:2;11122:7;-1:-1:-1::0;;;;;11122:23:0::1;;;11107:38;11099:111;;;;-1:-1:-1::0;;;11099:111:0::1;;;;;;;:::i;:::-;11239:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;11229:23:0::1;:7;-1:-1:-1::0;;;;;11229:23:0::1;;11221:68;;;;-1:-1:-1::0;;;11221:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11300:27:0;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;11005:339::o;22224:72::-;9349:6;;-1:-1:-1;;;;;9349:6:0;9335:10;:20;9327:67;;;;-1:-1:-1;;;9327:67:0;;;;;;;:::i;:::-;22273:7:::1;:15:::0;;-1:-1:-1;;;;22273:15:0::1;::::0;;22224:72::o;17218:161::-;17302:4;17326:45;17350:11;17363:7;17326:23;:45::i;:::-;17319:52;;17218:161;;;;;:::o;11646:260::-;11700:4;11717:20;11740:13;:11;:13::i;:::-;11717:36;-1:-1:-1;;;;;;11768:17:0;;;;:48;;;8362:2;11789:12;-1:-1:-1;;;;;11789:27:0;;11768:48;11764:89;;;11840:1;11833:8;;;;;11764:89;-1:-1:-1;;;;;11872:26:0;;;;;:12;:26;;;;;;;-1:-1:-1;11646:260:0;:::o;17521:134::-;-1:-1:-1;;;;;17619:28:0;17595:4;17619:28;;;:20;:28;;;;;;-1:-1:-1;;;;;17619:28:0;;17521:134::o;8833:25::-;;;;:::o;22053:78::-;22116:7;;-1:-1:-1;;;22116:7:0;;;;;22053:78::o;12199:261::-;12258:7;;12330:1;12313:106;8362:2;12333:1;-1:-1:-1;;;;;12333:17:0;;12313:106;;-1:-1:-1;;;;;12392:15:0;;;;;;:12;:15;;;;;;12372:35;;;;:::i;:::-;;-1:-1:-1;12352:3:0;;;;:::i;:::-;;;;12313:106;;;-1:-1:-1;12436:16:0;-1:-1:-1;12199:261:0;:::o;11495:139::-;-1:-1:-1;;;;;11589:25:0;;11565:4;11589:25;;;:18;:25;;;;;;:37;;11619:6;11589:29;:37::i;8771:55::-;;;;;;;;;;;;-1:-1:-1;;;;;8771:55:0;;:::o;11352:131::-;-1:-1:-1;;;;;11444:19:0;;11420:4;11444:19;;;:12;:19;;;;;;:31;;11468:6;11444:23;:31::i;10667:326::-;9349:6;;-1:-1:-1;;;;;9349:6:0;9335:10;:20;9327:67;;;;-1:-1:-1;;;9327:67:0;;;;;;;:::i;:::-;10772:1:::1;10762:7;-1:-1:-1::0;;;;;10762:11:0::1;;:38;;;;;8362:2;10777:7;-1:-1:-1::0;;;;;10777:23:0::1;;;10762:38;10754:111;;;;-1:-1:-1::0;;;10754:111:0::1;;;;;;;:::i;:::-;10894:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;10884:23:0::1;:7;-1:-1:-1::0;;;;;10884:23:0::1;;10876:68;;;;-1:-1:-1::0;;;10876:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10955:21:0;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:30;10667:326::o;22143:69::-;9349:6;;-1:-1:-1;;;;;9349:6:0;9335:10;:20;9327:67;;;;-1:-1:-1;;;9327:67:0;;;;;;;:::i;:::-;22200:4:::1;22190:14:::0;;-1:-1:-1;;;;22190:14:0::1;-1:-1:-1::0;;;22190:14:0::1;::::0;;22143:69::o;18216:480::-;18378:8;;:26;;-1:-1:-1;;;18378:26:0;;18304:7;;;;;;;;-1:-1:-1;;;;;18378:8:0;;;;:18;;:26;;18397:6;;18378:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18324:80;;;;;;18431:8;18421:7;-1:-1:-1;;;;;18421:18:0;;:62;;;;18455:8;18444:7;-1:-1:-1;;;;;18444:19:0;;;:38;;;;-1:-1:-1;18467:15:0;;18444:38;18421:86;;;;18497:10;18487:7;-1:-1:-1;;;;;18487:20:0;;18421:86;18417:127;;;18531:1;18524:8;;;;;;;18417:127;18591:8;;:53;;-1:-1:-1;;;18591:53:0;;18564:24;;-1:-1:-1;;;;;18591:8:0;;:36;;:53;;18628:7;;18637:6;;18591:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18564:80;18216:480;-1:-1:-1;;;;;;;18216:480:0:o;8729:35::-;;;-1:-1:-1;;;;;8729:35:0;;:::o;17387:122::-;17490:10;17446:4;17469:32;;;:20;:32;;;;;;-1:-1:-1;;;;;17469:32:0;17387:122;:::o;14528:1401::-;14595:4;9471:8;:6;:8::i;:::-;9470:9;9462:40;;;;-1:-1:-1;;;9462:40:0;;;;;;;:::i;:::-;14675:7:::1;-1:-1:-1::0;;;;;14659:23:0::1;:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;14659:23:0::1;;14650:64;;;;-1:-1:-1::0;;;14650:64:0::1;;;;;;;:::i;:::-;8362:2;14733:7;-1:-1:-1::0;;;;;14733:23:0::1;;;14725:66;;;;-1:-1:-1::0;;;14725:66:0::1;;;;;;;:::i;:::-;14832:10;14811:32;::::0;;;:20:::1;:32;::::0;;;;;-1:-1:-1;;;;;14811:50:0;;::::1;::::0;:39:::1;::::0;:32:::1;14848:1;14811:36;:39::i;:::-;:50;14802:80;;;;-1:-1:-1::0;;;14802:80:0::1;;;;;;;:::i;:::-;14893:15;14911:17;14920:7;14911:8;:17::i;:::-;14893:35;;14949:21;14973:27;14992:7;14973:18;:27::i;:::-;14949:51;;15048:67;15087:27;15106:7;15087:18;:27::i;:::-;15071:10;15048:34;::::0;;;:22:::1;:34;::::0;;;;;;:38:::1;:67::i;:::-;15034:10;15011:34;::::0;;;:22:::1;:34;::::0;;;;;;:104;;;;15131:58;;-1:-1:-1;;;;;15131:58:0;::::1;::::0;15034:10;15131:58:::1;::::0;::::1;::::0;15175:13;;15131:58:::1;:::i;:::-;;;;;;;;15255:8;::::0;:36:::1;::::0;-1:-1:-1;;;15255:36:0;;15210:26:::1;::::0;-1:-1:-1;;;;;15255:8:0::1;::::0;:24:::1;::::0;:36:::1;::::0;15280:10:::1;::::0;15255:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;;;;-1:-1:-1::0;15318:10:0::1;15332:1;15295:34:::0;;;:22:::1;:34;::::0;;;;;:38;;15255:78:::1;15251:363;;;-1:-1:-1::0;15394:10:0::1;15371:34;::::0;;;:22:::1;:34;::::0;;;;;;;15420:38;;;15473:7:::1;::::0;:44;;-1:-1:-1;;;15473:44:0;;15371:34;;-1:-1:-1;;;;;15473:7:0;;::::1;::::0;:12:::1;::::0;:44:::1;::::0;15371:34;;15473:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15574:7;-1:-1:-1::0;;;;;15537:65:0::1;15562:10;-1:-1:-1::0;;;;;15537:65:0::1;;15583:18;15537:65;;;;;;:::i;:::-;;;;;;;;15251:363;15638:14:::0;;15634:180:::1;;15660:7;::::0;:36:::1;::::0;-1:-1:-1;;;15660:36:0;;-1:-1:-1;;;;;15660:7:0;;::::1;::::0;:12:::1;::::0;:36:::1;::::0;15673:10:::1;::::0;15685;;15660:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15742:60;15767:34;15782:18;15767:10;:14;;:34;;;;:::i;15742:60::-;15849:7;-1:-1:-1::0;;;;;15829:40:0::1;15837:10;-1:-1:-1::0;;;;;15829:40:0::1;;15858:10;15829:40;;;;;;:::i;:::-;;;;;;;;15887:34;:10:::0;15902:18;15887:14:::1;:34::i;:::-;15880:41:::0;14528:1401;-1:-1:-1;;;;;14528:1401:0:o;9010:53::-;;;;;;;;;;;;;:::o;17033:95::-;17083:4;17107:13;:11;:13::i;:::-;-1:-1:-1;;;;;17100:20:0;;;17033:95;:::o;18708:446::-;9204:8;;-1:-1:-1;;;;;9204:8:0;9182:10;:31;9174:89;;;;-1:-1:-1;;;9174:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18829:30:0;::::1;18809:17;18829:30:::0;;;:22:::1;:30;::::0;;;;;18874:13;;18870:277:::1;;18937:52;8414:7;18937:31;:9:::0;18951:16;18937:13:::1;:31::i;:52::-;-1:-1:-1::0;;;;;18904:30:0;::::1;;::::0;;;:22:::1;:30;::::0;;;;:85;;;:30;19024:45:::1;::::0;:9;;:13:::1;:45::i;:::-;19004:65;;19110:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;19084:51:0::1;19102:6;-1:-1:-1::0;;;;;19084:51:0::1;;19125:9;19084:51;;;;;;:::i;:::-;;;;;;;;18870:277;;9274:1;18708:446:::0;;:::o;12473:245::-;12528:7;;12594:1;12577:106;8362:2;12597:1;-1:-1:-1;;;;;12597:17:0;;12577:106;;-1:-1:-1;;;;;12650:21:0;;;;;;:18;:21;;;;;;12636:35;;;;:::i;:::-;;-1:-1:-1;12616:3:0;;;;:::i;:::-;;;;12577:106;;16911:114;16972:4;16996:21;17009:7;16996:12;:21::i;19166:288::-;9204:8;;-1:-1:-1;;;;;9204:8:0;9182:10;:31;9174:89;;;;-1:-1:-1;;;9174:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19260:30:0;::::1;19240:17;19260:30:::0;;;:22:::1;:30;::::0;;;;;19305:13;;19301:146:::1;;-1:-1:-1::0;;;;;19335:30:0;::::1;19368:1;19335:30:::0;;;:22:::1;:30;::::0;;;;:34;19410:13:::1;:11;:13::i;:::-;-1:-1:-1::0;;;;;19384:51:0::1;19402:6;-1:-1:-1::0;;;;;19384:51:0::1;;19425:9;19384:51;;;;;;:::i;:::-;;;;;;;;19301:146;9274:1;19166:288:::0;:::o;21301:178::-;21422:8;;21363:4;21448:13;;21422:49;;-1:-1:-1;;;21422:49:0;;21363:4;;-1:-1:-1;;;;;21422:8:0;;;;:25;;:49;;21448:13;;21463:7;;21422:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21487:244::-;21658:8;;21581:4;21700:13;;21658:65;;-1:-1:-1;;;21658:65:0;;21581:4;;-1:-1:-1;;;;;21658:8:0;;;;:28;;:65;;21687:11;;21700:13;;;21715:7;;21658:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3561:98::-;3619:7;3646:5;3650:1;3646;:5;:::i;3960:98::-;4018:7;4045:5;4049:1;4045;:5;:::i;21804:237::-;21850:15;21900:10;;21882:15;:28;21878:69;;;-1:-1:-1;21934:1:0;21927:8;;21878:69;21975:57;22030:1;21975:50;22011:13;;21975:31;21995:10;;21975:15;:19;;:31;;;;:::i;:50::-;:54;;:57::i;:::-;21957:76;;21804:237;:::o;3204:98::-;3262:7;3289:5;3293:1;3289;:5;:::i;19797:994::-;20018:20;;19851:4;;-1:-1:-1;;;;;20018:30:0;;;:20;;:30;20014:82;;;20065:19;20076:7;20065:10;:19::i;:::-;20173:10;20152:32;;;;:20;:32;;;;;:42;;-1:-1:-1;;;;;;20152:42:0;-1:-1:-1;;;;;20152:42:0;;;;;;;;20433:6;:15;;:6;;20152:42;20433:15;;;;-1:-1:-1;;;20433:15:0;;;;;;;;;;;;;;;;;20452:1;20433:20;20429:61;;;-1:-1:-1;20477:1:0;20470:8;;20429:61;20529:8;;:34;;-1:-1:-1;;;20529:34:0;;20510:16;;-1:-1:-1;;;;;20529:8:0;;:22;;:34;;20552:10;;20529:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20510:53;;20589:8;-1:-1:-1;;;;;20578:19:0;:7;-1:-1:-1;;;;;20578:19:0;;20574:60;;20621:1;20614:8;;;;;20574:60;20661:122;20767:6;20774:7;-1:-1:-1;;;;;20767:15:0;;;;;;;-1:-1:-1;;;20767:15:0;;;;;;;;;;;;;;;;;20661:91;20707:44;20731:10;20743:7;20707:23;:44::i;:::-;20661:31;20684:7;20661:22;:31::i;:122::-;20654:129;19797:994;-1:-1:-1;;;19797:994:0:o;20805:488::-;20873:4;20945:6;20952:7;-1:-1:-1;;;;;20945:15:0;;;;;;;-1:-1:-1;;;20945:15:0;;;;;;;;;;;;;;;;;20964:1;20945:20;20941:61;;;-1:-1:-1;20989:1:0;20982:8;;20941:61;21022:24;21049:49;21074:10;21086:11;:7;21096:1;21086:11;:::i;21049:49::-;21022:76;;21118:167;8414:7;21118:146;21247:16;21118:124;21226:6;21233:7;-1:-1:-1;;;;;21226:15:0;;;;;;;-1:-1:-1;;;21226:15:0;;;;;;;;;;;;;;;;;21118:93;21166:44;21190:10;21202:7;21166:23;:44::i;:::-;21118:33;21143:7;21118:24;:33::i;2823:98::-;2881:7;2908:5;2912:1;2908;:5;:::i;15941:866::-;16021:8;;:32;;-1:-1:-1;;;16021:32:0;;-1:-1:-1;;;;;16021:8:0;;;;:20;;:32;;16042:10;;16021:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16017:783;;;16089:8;;:30;;-1:-1:-1;;;16089:30:0;;16070:16;;-1:-1:-1;;;;;16089:8:0;;:18;;:30;;16108:10;;16089:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16070:49;;16134:18;16155:69;16218:5;16155:58;16172:8;;;;;;;;;-1:-1:-1;;;;;16172:8:0;-1:-1:-1;;;;;16172:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16155:12;;:16;:58::i;:69::-;16239:7;;:34;;-1:-1:-1;;;16239:34:0;;16134:90;;-1:-1:-1;;;;;;16239:7:0;;:12;;:34;;16252:8;;16134:90;;16239:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16329:8;-1:-1:-1;;;;;16293:57:0;16317:10;-1:-1:-1;;;;;16293:57:0;;16339:10;16293:57;;;;;;:::i;:::-;;;;;;;;16420:8;;:30;;-1:-1:-1;;;16420:30:0;;-1:-1:-1;;;;;16420:8:0;;;;:20;;:30;;16441:8;;16420:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16416:373;;;16491:8;;:28;;-1:-1:-1;;;16491:28:0;;16471:17;;-1:-1:-1;;;;;16491:8:0;;:18;;:28;;16510:8;;16491:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16471:48;;16538:18;16559:70;16623:5;16559:59;16576:8;;;;;;;;;-1:-1:-1;;;;;16576:8:0;-1:-1:-1;;;;;16576:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16559:12;;:16;:59::i;:70::-;16645:7;;:35;;-1:-1:-1;;;16645:35:0;;16538:91;;-1:-1:-1;;;;;;16645:7:0;;:12;;:35;;16658:9;;16538:91;;16645:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16751:9;-1:-1:-1;;;;;16704:69:0;16741:8;-1:-1:-1;;;;;16704:69:0;16729:10;-1:-1:-1;;;;;16704:69:0;;16762:10;16704:69;;;;;;:::i;:::-;;;;;;;;16416:373;;16017:783;;;15941:866;:::o;19489:300::-;19554:20;;-1:-1:-1;;;;;19554:38:0;;;;:27;;:20;19579:1;19554:24;:27::i;:::-;:38;19546:82;;;;-1:-1:-1;;;19546:82:0;;;;;;;:::i;:::-;19639:20;:30;;-1:-1:-1;;;;;;19639:30:0;-1:-1:-1;;;;;19639:30:0;;;;;19760:21;19639:30;19760:12;:21::i;:::-;19742:6;19749:7;-1:-1:-1;;;;;19742:15:0;;;;;;;-1:-1:-1;;;19742:15:0;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;19489:300:0:o;14:166:1:-;92:13;;141;;134:21;124:32;;114:2;;170:1;167;160:12;185:259;;297:2;285:9;276:7;272:23;268:32;265:2;;;318:6;310;303:22;265:2;362:9;349:23;381:33;408:5;381:33;:::i;449:263::-;;572:2;560:9;551:7;547:23;543:32;540:2;;;593:6;585;578:22;540:2;630:9;624:16;649:33;676:5;649:33;:::i;717:402::-;;;846:2;834:9;825:7;821:23;817:32;814:2;;;867:6;859;852:22;814:2;911:9;898:23;930:33;957:5;930:33;:::i;:::-;982:5;-1:-1:-1;1039:2:1;1024:18;;1011:32;1052:35;1011:32;1052:35;:::i;:::-;1106:7;1096:17;;;804:315;;;;;:::o;1124:327::-;;;1253:2;1241:9;1232:7;1228:23;1224:32;1221:2;;;1274:6;1266;1259:22;1221:2;1318:9;1305:23;1337:33;1364:5;1337:33;:::i;:::-;1389:5;1441:2;1426:18;;;;1413:32;;-1:-1:-1;;;1211:240:1:o;1456:214::-;;1576:2;1564:9;1555:7;1551:23;1547:32;1544:2;;;1597:6;1589;1582:22;1544:2;1625:39;1654:9;1625:39;:::i;1675:259::-;;1787:2;1775:9;1766:7;1762:23;1758:32;1755:2;;;1808:6;1800;1793:22;1755:2;1852:9;1839:23;1871:33;1898:5;1871:33;:::i;1939:263::-;;2062:2;2050:9;2041:7;2037:23;2033:32;2030:2;;;2083:6;2075;2068:22;2030:2;2120:9;2114:16;2139:33;2166:5;2139:33;:::i;2207:327::-;;;2336:2;2324:9;2315:7;2311:23;2307:32;2304:2;;;2357:6;2349;2342:22;2304:2;2401:9;2388:23;2420:33;2447:5;2420:33;:::i;2539:194::-;;2662:2;2650:9;2641:7;2637:23;2633:32;2630:2;;;2683:6;2675;2668:22;2630:2;-1:-1:-1;2711:16:1;;2620:113;-1:-1:-1;2620:113:1:o;2738:336::-;;;;2892:2;2880:9;2871:7;2867:23;2863:32;2860:2;;;2913:6;2905;2898:22;2860:2;2947:9;2941:16;2931:26;;2997:2;2986:9;2982:18;2976:25;2966:35;;3020:48;3064:2;3053:9;3049:18;3020:48;:::i;:::-;3010:58;;2850:224;;;;;:::o;3079:203::-;-1:-1:-1;;;;;3243:32:1;;;;3225:51;;3213:2;3198:18;;3180:102::o;3287:416::-;-1:-1:-1;;;;;3545:15:1;;;3527:34;;3597:15;;;;3592:2;3577:18;;3570:43;-1:-1:-1;;;;;3649:47:1;;;3644:2;3629:18;;3622:75;3477:2;3462:18;;3444:259::o;3708:315::-;-1:-1:-1;;;;;3900:32:1;;;;3882:51;;-1:-1:-1;;;;;3969:47:1;3964:2;3949:18;;3942:75;3870:2;3855:18;;3837:186::o;4028:274::-;-1:-1:-1;;;;;4220:32:1;;;;4202:51;;4284:2;4269:18;;4262:34;4190:2;4175:18;;4157:145::o;4307:187::-;4472:14;;4465:22;4447:41;;4435:2;4420:18;;4402:92::o;4499:354::-;4701:2;4683:21;;;4740:2;4720:18;;;4713:30;4779:32;4774:2;4759:18;;4752:60;4844:2;4829:18;;4673:180::o;4858:424::-;5060:2;5042:21;;;5099:2;5079:18;;;5072:30;5138:34;5133:2;5118:18;;5111:62;5209:30;5204:2;5189:18;;5182:58;5272:3;5257:19;;5032:250::o;5287:398::-;5489:2;5471:21;;;5528:2;5508:18;;;5501:30;5567:34;5562:2;5547:18;;5540:62;-1:-1:-1;;;5633:2:1;5618:18;;5611:32;5675:3;5660:19;;5461:224::o;5690:355::-;5892:2;5874:21;;;5931:2;5911:18;;;5904:30;5970:33;5965:2;5950:18;;5943:61;6036:2;6021:18;;5864:181::o;6050:340::-;6252:2;6234:21;;;6291:2;6271:18;;;6264:30;-1:-1:-1;;;6325:2:1;6310:18;;6303:46;6381:2;6366:18;;6224:166::o;6395:356::-;6597:2;6579:21;;;6616:18;;;6609:30;6675:34;6670:2;6655:18;;6648:62;6742:2;6727:18;;6569:182::o;6756:409::-;6958:2;6940:21;;;6997:2;6977:18;;;6970:30;7036:34;7031:2;7016:18;;7009:62;-1:-1:-1;;;7102:2:1;7087:18;;7080:43;7155:3;7140:19;;6930:235::o;7170:342::-;7372:2;7354:21;;;7411:2;7391:18;;;7384:30;-1:-1:-1;;;7445:2:1;7430:18;;7423:48;7503:2;7488:18;;7344:168::o;7517:351::-;7719:2;7701:21;;;7758:2;7738:18;;;7731:30;7797:29;7792:2;7777:18;;7770:57;7859:2;7844:18;;7691:177::o;7873:218::-;-1:-1:-1;;;;;8037:47:1;;;;8019:66;;8007:2;7992:18;;7974:117::o;8096:315::-;-1:-1:-1;;;;;8288:47:1;;;;8270:66;;-1:-1:-1;;;;;8372:32:1;8367:2;8352:18;;8345:60;8258:2;8243:18;;8225:186::o;8416:177::-;8562:25;;;8550:2;8535:18;;8517:76::o;8598:248::-;8772:25;;;8828:2;8813:18;;8806:34;8760:2;8745:18;;8727:119::o;8851:253::-;;-1:-1:-1;;;;;8980:2:1;8977:1;8973:10;9010:2;9007:1;9003:10;9041:3;9037:2;9033:12;9028:3;9025:21;9022:2;;;9049:18;;:::i;:::-;9085:13;;8899:205;-1:-1:-1;;;;8899:205:1:o;9109:128::-;;9180:1;9176:6;9173:1;9170:13;9167:2;;;9186:18;;:::i;:::-;-1:-1:-1;9222:9:1;;9157:80::o;9242:217::-;;9308:1;9298:2;;-1:-1:-1;;;9333:31:1;;9387:4;9384:1;9377:15;9415:4;9340:1;9405:15;9298:2;-1:-1:-1;9444:9:1;;9288:171::o;9464:168::-;;9570:1;9566;9562:6;9558:14;9555:1;9552:21;9547:1;9540:9;9533:17;9529:45;9526:2;;;9577:18;;:::i;:::-;-1:-1:-1;9617:9:1;;9516:116::o;9637:125::-;;9705:1;9702;9699:8;9696:2;;;9710:18;;:::i;:::-;-1:-1:-1;9747:9:1;;9686:76::o;9767:226::-;;-1:-1:-1;;;;;9903:2:1;9896:5;9892:14;9930:2;9921:7;9918:15;9915:2;;;9936:18;;:::i;:::-;9985:1;9972:15;;9814:179;-1:-1:-1;;;9814:179:1:o;9998:127::-;10059:10;10054:3;10050:20;10047:1;10040:31;10090:4;10087:1;10080:15;10114:4;10111:1;10104:15;10130:133;-1:-1:-1;;;;;10207:31:1;;10197:42;;10187:2;;10253:1;10250;10243:12;10268:148;-1:-1:-1;;;;;10349:5:1;10345:46;10338:5;10335:57;10325:2;;10406:1;10403;10396:12
Swarm Source
ipfs://835848fa0cf11f61af53c7e70b522fd99596de6fcf63dcca9ca1f5ff8d7e9e31
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.