Contract Overview
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x7ef47a8b1184f229218a7cb5b57fa52f55bbfa7e873509f8497a91a025f42ad2 | Create Stake | 23753507 | 437 days 17 hrs ago |
| IN | 0x8e410fa23642ad04a7f9fe51580f1435c4eb2f2a | 0 MATIC | 0.007755 | |
0x60bc0d3dedd6d59ae487769d174067964a59f02a6516d8cf5a4328b2eacb839d | Transfer Ownersh... | 21318784 | 500 days 22 hrs ago | 0xd635f3292b03dedcd909162a17e2919d69449cd8 | IN | 0x8e410fa23642ad04a7f9fe51580f1435c4eb2f2a | 0 MATIC | 0.00085935 | |
0x3a07959b149c73864d188080dc1be8c110b38b1cae44ba0ef7bb84268dd48f89 | 0x60806040 | 21223730 | 503 days 11 hrs ago | 0xd635f3292b03dedcd909162a17e2919d69449cd8 | IN | Create: NexenStakingPool | 0 MATIC | 0.13903095 |
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
NexenStakingPool
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import "./Ownable.sol"; import "./IERC20.sol"; library Date { struct _Date { uint16 year; uint8 month; uint8 day; } uint constant DAY_IN_SECONDS = 86400; uint constant YEAR_IN_SECONDS = 31536000; uint constant LEAP_YEAR_IN_SECONDS = 31622400; uint16 constant ORIGIN_YEAR = 1970; function isLeapYear(uint16 year) public pure returns (bool) { if (year % 4 != 0) { return false; } if (year % 100 != 0) { return true; } if (year % 400 != 0) { return false; } return true; } function leapYearsBefore(uint year) public pure returns (uint) { year -= 1; return year / 4 - year / 100 + year / 400; } function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (isLeapYear(year)) { return 29; } else { return 28; } } function parseTimestamp(uint timestamp) internal pure returns (_Date memory dt) { uint secondsAccountedFor = 0; uint buf; uint8 i; // Year dt.year = getYear(timestamp); buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf; secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf); // Month uint secondsInMonth; for (i = 1; i <= 12; i++) { secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year); if (secondsInMonth + secondsAccountedFor > timestamp) { dt.month = i; break; } secondsAccountedFor += secondsInMonth; } // Day for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) { if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) { dt.day = i; break; } secondsAccountedFor += DAY_IN_SECONDS; } } function getYear(uint timestamp) public pure returns (uint16) { uint secondsAccountedFor = 0; uint16 year; uint numLeapYears; // Year year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS); numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR); secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears; secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears); while (secondsAccountedFor > timestamp) { if (isLeapYear(uint16(year - 1))) { secondsAccountedFor -= LEAP_YEAR_IN_SECONDS; } else { secondsAccountedFor -= YEAR_IN_SECONDS; } year -= 1; } return year; } function getMonth(uint timestamp) public pure returns (uint8) { return parseTimestamp(timestamp).month; } function getDay(uint timestamp) public pure returns (uint8) { return parseTimestamp(timestamp).day; } function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) { uint16 i; // Year for (i = ORIGIN_YEAR; i < year; i++) { if (isLeapYear(i)) { timestamp += LEAP_YEAR_IN_SECONDS; } else { timestamp += YEAR_IN_SECONDS; } } // Month uint8[12] memory monthDayCounts; monthDayCounts[0] = 31; if (isLeapYear(year)) { monthDayCounts[1] = 29; } else { monthDayCounts[1] = 28; } monthDayCounts[2] = 31; monthDayCounts[3] = 30; monthDayCounts[4] = 31; monthDayCounts[5] = 30; monthDayCounts[6] = 31; monthDayCounts[7] = 31; monthDayCounts[8] = 30; monthDayCounts[9] = 31; monthDayCounts[10] = 30; monthDayCounts[11] = 31; for (i = 1; i < month; i++) { timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1]; } // Day timestamp += DAY_IN_SECONDS * (day - 1); return timestamp; } } contract NexenStakingPool is Ownable { IERC20 token = IERC20(0xb32e335B798A1Ac07007390683A128f134aa6e25); uint256 decimals = 18; uint256 minimumStakeAmount = 1000; address ZERO_ADDRESS = 0x0000000000000000000000000000000000000000; //Stats uint256 public totalStakes = 0; uint256 public totalStaked = 0; uint256 public adminCanWithdraw = 0; mapping(uint8 => uint256) public totalByLockup; uint256 public totalCompounding = 0; uint256 public totalNotCompounding = 0; struct Stake { bool exists; uint256 createdOn; uint256 initialAmount; bool compound; uint8 lockupPeriod; uint256 withdrawn; address referrer; } mapping(address => Stake) public stakes; uint256 DEFAULT_ROI1 = 13; //0.13% daily ROI, equivalent to 4% monthly uint256 DEFAULT_ROI2 = 15; //0.15% daily ROI uint256 DEFAULT_ROI3 = 17; //0.17% daily ROI uint256 DEFAULT_ROI6 = 19; //0.19% daily ROI bool isValidLockup1 = true; bool isValidLockup2 = false; bool isValidLockup3 = false; bool isValidLockup6 = false; struct ROI { bool exists; uint256 roi1; uint256 roi2; uint256 roi3; uint256 roi6; } //Year to Month to ROI mapping (uint256 => mapping (uint256 => ROI)) private rois; event NewStake(address indexed staker, uint256 totalStaked, uint8 lockupPeriod, bool compound, address referrer); event StakeIncreasedForReferral(address indexed staker, uint256 initialAmount, uint256 delta); event RewardsWithdrawn(address indexed staker, uint256 total); event StakeFinished(address indexed staker, uint256 totalReturned, uint256 totalDeducted); function createStake(uint256 _amount, uint8 _lockupPeriod, bool _compound, address _referrer) public { require(!stakes[msg.sender].exists, "You already have a stake"); require(_isValidLockupPeriod(_lockupPeriod), "Invalid lockup period"); require(_amount >= getMinimumStakeAmount(), "Invalid minimum"); require(IERC20(token).transferFrom(msg.sender, address(this), calculateTotalWithDecimals(_amount)), "Couldn't take the tokens"); if (_referrer != address(0) && stakes[_referrer].exists) { uint256 amountToIncrease = stakes[_referrer].initialAmount / 100; emit StakeIncreasedForReferral(_referrer, stakes[_referrer].initialAmount, amountToIncrease); stakes[_referrer].initialAmount += amountToIncrease; totalStaked += amountToIncrease; } else { _referrer = ZERO_ADDRESS; } Stake memory stake = Stake({exists:true, createdOn: block.timestamp, initialAmount:_amount, compound:_compound, lockupPeriod:_lockupPeriod, withdrawn:0, referrer:_referrer }); stakes[msg.sender] = stake; totalStakes += 1; totalStaked += _amount; totalByLockup[_lockupPeriod] += 1; if (_compound) { totalCompounding += 1; } else { totalNotCompounding += 1; } emit NewStake(msg.sender, _amount, _lockupPeriod, _compound, _referrer); } function withdraw() public { require(stakes[msg.sender].exists, "Invalid stake"); require(!stakes[msg.sender].compound, "Compounders can't withdraw before they finish their stake"); Stake storage stake = stakes[msg.sender]; uint256 total = getPartialToWidthdrawForNotCompounders(msg.sender, block.timestamp); stake.withdrawn += total; require(token.transfer(msg.sender, calculateTotalWithDecimals(total)), "Couldn't withdraw"); emit RewardsWithdrawn(msg.sender, total); } function finishStake() public { require(stakes[msg.sender].exists, "Invalid stake"); Stake memory stake = stakes[msg.sender]; uint256 finishesOn = _calculateFinishTimestamp(stake.createdOn, stake.lockupPeriod); require(block.timestamp > finishesOn || !stake.compound, "Can't be finished yet"); uint256 totalRewards; uint256 totalFees; uint256 totalPenalty; if (stake.compound) { totalRewards = getTotalToWidthdrawForCompounders(msg.sender); //This includes the initial amount totalRewards -= stake.initialAmount; totalFees = totalRewards * 5 / 100; //Flat fee of 5% } else { if (block.timestamp > finishesOn) { totalRewards = getTotalToWidthdrawForNotCompounders(msg.sender); } else { totalRewards = getPartialToWidthdrawForNotCompounders(msg.sender, block.timestamp); //As it didn't finish, pay a fee of 10% (before first half) or 5% (after first half) uint8 penalty = _isFirstHalf(stake.createdOn, stake.lockupPeriod) ? 10 : 5; totalPenalty = totalRewards * penalty / 100; } totalFees = totalRewards * 2 / 100; //Flat fee of 2% } uint256 totalToDeduct = totalFees + totalPenalty; uint256 totalToTransfer = totalRewards + stake.initialAmount - totalToDeduct; adminCanWithdraw += totalToDeduct; totalStakes -= 1; totalStaked -= stake.initialAmount; totalByLockup[stake.lockupPeriod] -= 1; if (stake.compound) { totalCompounding -= 1; } else { totalNotCompounding -= 1; } delete stakes[msg.sender]; require(token.transfer(msg.sender, calculateTotalWithDecimals(totalToTransfer)), "Couldn't transfer the tokens"); emit StakeFinished(msg.sender, totalToTransfer, totalToDeduct); } function calculateTotalWithDecimals(uint256 _amount) internal view returns (uint256) { return _amount * 10 ** decimals; } function _isFirstHalf(uint256 _createdOn, uint8 _lockupPeriod) internal view returns (bool) { uint256 day = 60 * 60 * 24; if (_lockupPeriod == 1) { return _createdOn + day + 15 > block.timestamp; } if (_lockupPeriod == 2) { return _createdOn + day + 30 > block.timestamp; } if (_lockupPeriod == 3) { return _createdOn + day + 45 > block.timestamp; } return _createdOn + day + 90 > block.timestamp; } function calcPartialRewardsForInitialMonth(Stake memory stake, uint8 _todayDay, Date._Date memory _initial, bool compounding) internal view returns (uint256) { uint256 roi = getRoi(_initial.month, _initial.year, stake.lockupPeriod); uint8 totalDays = _todayDay - _initial.day; return calculateRewards(stake.initialAmount, totalDays, roi, compounding); } function calcFullRewardsForInitialMonth(Stake memory stake, Date._Date memory _initial, bool compounding) internal view returns (uint256) { uint8 totalDays = Date.getDaysInMonth(_initial.month, _initial.year); uint256 roi = getRoi(_initial.month, _initial.year, stake.lockupPeriod); uint8 countDays = totalDays - _initial.day; return calculateRewards(stake.initialAmount, countDays, roi, compounding); } function calcFullRewardsForMonth(uint256 _currentTotal, uint256 _roi, uint16 _year, uint8 _month, bool compounding) internal pure returns (uint256) { uint256 totalDays = Date.getDaysInMonth(_month, _year); return calculateRewards(_currentTotal, totalDays, _roi, compounding); } function calculateRewards(uint256 currentTotal, uint256 totalDays, uint256 roi, bool compounding) internal pure returns (uint256) { if (compounding) { uint256 divFactor = 10000 ** 10; while(totalDays > 10) { currentTotal = currentTotal * ((roi + 10000) ** 10) / divFactor; totalDays -= 10; } return currentTotal = currentTotal * ((roi + 10000) ** totalDays) / (10000 ** totalDays); } //Not compounding return currentTotal * totalDays * roi / 10000; } //This function is meant to be called internally when finishing your stake function getTotalToWidthdrawForNotCompounders(address _account) internal view returns (uint256) { Stake memory stake = stakes[_account]; Date._Date memory initial = Date.parseTimestamp(stake.createdOn); uint256 total = calcFullRewardsForInitialMonth(stake, initial, false); uint256 finishTimestamp = _calculateFinishTimestamp(stake.createdOn, stake.lockupPeriod); Date._Date memory finishes = Date.parseTimestamp(finishTimestamp); for(uint8 i=1;i<=stake.lockupPeriod;i++) { uint8 currentMonth = initial.month + i; uint16 currentYear = initial.year; if (currentMonth > 12) { currentYear += 1; currentMonth = currentMonth % 12; } uint256 roi = getRoi(currentMonth, currentYear ,stake.lockupPeriod); //This is the month it finishes on if (currentMonth == finishes.month) { //Calculates partial rewards for month total += calculateRewards(stake.initialAmount, finishes.day, roi, false); break; } //This is a complete month I need to add total += calcFullRewardsForMonth(stake.initialAmount, roi, currentYear, currentMonth, false); } total -= stake.withdrawn; return total; } //This function is meant to be called internally when withdrawing as much as you can, or by the UI function getPartialToWidthdrawForNotCompounders(address _account, uint256 _now) public view returns (uint256) { Stake memory stake = stakes[_account]; Date._Date memory initial = Date.parseTimestamp(stake.createdOn); Date._Date memory today = Date.parseTimestamp(_now); //I am still in my first month of staking if (initial.month == today.month) { return calcPartialRewardsForInitialMonth(stake, today.day, initial, false) - stake.withdrawn; } //I am in a month after my first month of staking uint256 total = calcFullRewardsForInitialMonth(stake, initial, false); uint256 finishTimestamp = _calculateFinishTimestamp(stake.createdOn, stake.lockupPeriod); Date._Date memory finishes = Date.parseTimestamp(finishTimestamp); for(uint8 i=1;i<=stake.lockupPeriod;i++) { uint8 currentMonth = initial.month + i; uint16 currentYear = initial.year; if (currentMonth > 12) { currentYear += 1; currentMonth = currentMonth % 12; } uint256 roi = getRoi(currentMonth, currentYear, stake.lockupPeriod); //This is the month it finishes if (currentMonth == finishes.month) { uint8 upToDay = _getMin(finishes.day, today.day); //Calculates partial rewards for month total += calculateRewards(stake.initialAmount, upToDay, roi, false); break; } else if (currentMonth == today.month) { // We reached the current month //Calculates partial rewards for month total += calculateRewards(stake.initialAmount, today.day, roi, false); break; } //This is a complete month I need to add total += calcFullRewardsForMonth(stake.initialAmount, roi, currentYear, currentMonth, false); } total -= stake.withdrawn; return total; } //This function is meant to be called internally on finishing your stake function getTotalToWidthdrawForCompounders(address _account) internal view returns (uint256) { Stake memory stake = stakes[_account]; Date._Date memory initial = Date.parseTimestamp(stake.createdOn); uint256 total = calcFullRewardsForInitialMonth(stake, initial, true); uint256 finishTimestamp = _calculateFinishTimestamp(stake.createdOn, stake.lockupPeriod); Date._Date memory finishes = Date.parseTimestamp(finishTimestamp); for(uint8 i=1;i<=stake.lockupPeriod;i++) { uint8 currentMonth = initial.month + i; uint16 currentYear = initial.year; if (currentMonth > 12) { currentYear += 1; currentMonth = currentMonth % 12; } uint256 roi = getRoi(currentMonth, currentYear, stake.lockupPeriod); //This is the month it finishes on if (currentMonth == finishes.month) { //Calculates partial rewards for month return calculateRewards(total, finishes.day, roi, true); } //This is a complete month I need to add total = calcFullRewardsForMonth(total, roi, currentYear, currentMonth, true); } return total; } //This function is meant to be called from the UI function getPartialRewardsForCompounders(address _account, uint256 _now) public view returns (uint256) { Stake memory stake = stakes[_account]; Date._Date memory initial = Date.parseTimestamp(stake.createdOn); Date._Date memory today = Date.parseTimestamp(_now); //I am still in my first month of staking if (initial.month == today.month) { return calcPartialRewardsForInitialMonth(stake, today.day, initial, true) - stake.withdrawn; } //I am in a month after my first month of staking uint256 total = calcFullRewardsForInitialMonth(stake, initial, true); uint256 finishTimestamp = _calculateFinishTimestamp(stake.createdOn, stake.lockupPeriod); Date._Date memory finishes = Date.parseTimestamp(finishTimestamp); for(uint8 i=1;i<=stake.lockupPeriod;i++) { uint8 currentMonth = initial.month + i; uint16 currentYear = initial.year; if (currentMonth > 12) { currentYear += 1; currentMonth = currentMonth % 12; } uint256 roi = getRoi(currentMonth, currentYear, stake.lockupPeriod); //This is the month it finishes if (currentMonth == finishes.month) { uint8 upToDay = _getMin(finishes.day, today.day); //Calculates partial rewards for month return calculateRewards(total, upToDay, roi, true); } else if (currentMonth == today.month) { // We reached the current month //Calculates partial rewards for month return calculateRewards(total, today.day, roi, true); } //This is a complete month I need to add total = calcFullRewardsForMonth(total, roi, currentYear, currentMonth, true); } return total; } function _getMin(uint8 num1, uint8 num2) internal pure returns (uint8) { if (num1 < num2) { return num1; } return num2; } function calculateFinishTimestamp(address account) public view returns (uint256) { return _calculateFinishTimestamp(stakes[account].createdOn, stakes[account].lockupPeriod); } function _calculateFinishTimestamp(uint256 _timestamp, uint8 _lockupPeriod) internal pure returns (uint256) { uint16 year = Date.getYear(_timestamp); uint8 month = Date.getMonth(_timestamp); month += _lockupPeriod; if (month > 12) { year += 1; month = month % 12; } uint8 day = Date.getDay(_timestamp); return Date.toTimestamp(year, month, day); } function _isValidLockupPeriod(uint8 n) public view returns (bool) { return (isValidLockup1 && n == 1) || (isValidLockup2 && n == 2) || (isValidLockup3 && n == 3) || (isValidLockup6 && n == 6); } function _setValidLockups(bool _isValidLockup1, bool _isValidLockup2, bool _isValidLockup3, bool _isValidLockup6) public onlyOwner { isValidLockup1 = _isValidLockup1; isValidLockup2 = _isValidLockup2; isValidLockup3 = _isValidLockup3; isValidLockup6 = _isValidLockup6; } function _adminWithdraw() public onlyOwner { uint256 amount = adminCanWithdraw; adminCanWithdraw = 0; require(token.transfer(msg.sender, calculateTotalWithDecimals(amount)), "Couldn't withdraw"); } function _extractNXN(uint256 amount, address _sendTo) public onlyOwner { require(token.transfer(_sendTo, amount)); } function _updateToken(IERC20 _token) public onlyOwner { token = _token; } function _setMinimumStakeAmount(uint256 _minimumStakeAmount) public onlyOwner { minimumStakeAmount = _minimumStakeAmount; } function getMinimumStakeAmount() public view returns (uint256) { return minimumStakeAmount; } function _setRoi(uint256 _month, uint256 _year, uint256 _roi1, uint256 _roi2, uint256 _roi3, uint256 _roi6) public onlyOwner { uint256 today_year = Date.getYear(block.timestamp); uint256 today_month = Date.getMonth(block.timestamp); require((_month >= today_month && _year == today_year) || _year > today_year, "You can only set it for this month or a future month"); rois[_year][_month].exists = true; rois[_year][_month].roi1 = _roi1; rois[_year][_month].roi2 = _roi2; rois[_year][_month].roi3 = _roi3; rois[_year][_month].roi6 = _roi6; } function _setDefaultRoi(uint256 _roi1, uint256 _roi2, uint256 _roi3, uint256 _roi6) public onlyOwner { DEFAULT_ROI1 = _roi1; DEFAULT_ROI2 = _roi2; DEFAULT_ROI3 = _roi3; DEFAULT_ROI6 = _roi6; } function getRoi(uint256 month, uint256 year, uint8 lockupPeriod) public view returns (uint256) { if (rois[year][month].exists) { if (lockupPeriod == 1) { return rois[year][month].roi1; } else if (lockupPeriod == 2) { return rois[year][month].roi2; } else if (lockupPeriod == 3) { return rois[year][month].roi3; } else if (lockupPeriod == 6) { return rois[year][month].roi6; } } if (lockupPeriod == 1) { return DEFAULT_ROI1; } else if (lockupPeriod == 2) { return DEFAULT_ROI2; } else if (lockupPeriod == 3) { return DEFAULT_ROI3; } else if (lockupPeriod == 6) { return DEFAULT_ROI6; } return 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"lockupPeriod","type":"uint8"},{"indexed":false,"internalType":"bool","name":"compound","type":"bool"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"}],"name":"NewStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"RewardsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalReturned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalDeducted","type":"uint256"}],"name":"StakeFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"initialAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delta","type":"uint256"}],"name":"StakeIncreasedForReferral","type":"event"},{"inputs":[],"name":"_adminWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_sendTo","type":"address"}],"name":"_extractNXN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"n","type":"uint8"}],"name":"_isValidLockupPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roi1","type":"uint256"},{"internalType":"uint256","name":"_roi2","type":"uint256"},{"internalType":"uint256","name":"_roi3","type":"uint256"},{"internalType":"uint256","name":"_roi6","type":"uint256"}],"name":"_setDefaultRoi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumStakeAmount","type":"uint256"}],"name":"_setMinimumStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_month","type":"uint256"},{"internalType":"uint256","name":"_year","type":"uint256"},{"internalType":"uint256","name":"_roi1","type":"uint256"},{"internalType":"uint256","name":"_roi2","type":"uint256"},{"internalType":"uint256","name":"_roi3","type":"uint256"},{"internalType":"uint256","name":"_roi6","type":"uint256"}],"name":"_setRoi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isValidLockup1","type":"bool"},{"internalType":"bool","name":"_isValidLockup2","type":"bool"},{"internalType":"bool","name":"_isValidLockup3","type":"bool"},{"internalType":"bool","name":"_isValidLockup6","type":"bool"}],"name":"_setValidLockups","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"_updateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminCanWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"calculateFinishTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_lockupPeriod","type":"uint8"},{"internalType":"bool","name":"_compound","type":"bool"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"createStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMinimumStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_now","type":"uint256"}],"name":"getPartialRewardsForCompounders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_now","type":"uint256"}],"name":"getPartialToWidthdrawForNotCompounders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"month","type":"uint256"},{"internalType":"uint256","name":"year","type":"uint256"},{"internalType":"uint8","name":"lockupPeriod","type":"uint8"}],"name":"getRoi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"createdOn","type":"uint256"},{"internalType":"uint256","name":"initialAmount","type":"uint256"},{"internalType":"bool","name":"compound","type":"bool"},{"internalType":"uint8","name":"lockupPeriod","type":"uint8"},{"internalType":"uint256","name":"withdrawn","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"totalByLockup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCompounding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNotCompounding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600180546001600160a01b031990811673b32e335b798a1ac07007390683a128f134aa6e2517825560126002556103e860035560048054909116905560006005819055600681905560078190556009819055600a55600d600c819055600f908190556011600e55601390556010805463ffffffff1916909117905534801561008b57600080fd5b506100953361009a565b6100ea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612d6880620000fa6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063817b1cd2116100de578063b219ed0f11610097578063c81bf2b111610071578063c81bf2b1146103a8578063d830d27c146103b1578063f2b519bc146103c4578063f2fde38b146103cc57600080fd5b8063b219ed0f14610379578063b85cf43e1461038c578063bf9befb11461039f57600080fd5b8063817b1cd2146102f95780638da5cb5b146103025780639ebdaa6d1461031d578063a284150714610330578063a56a30ec14610343578063b1a6043d1461036657600080fd5b806324db2c861161014b578063644315b711610125578063644315b7146102b8578063705142b8146102cb57806370fe9538146102de578063715018a6146102f157600080fd5b806324db2c86146102955780633765cf02146102a85780633ccfd60b146102b057600080fd5b806308a37f31146101935780630ad3c7651461019d5780630ff3f6c6146101b95780631600ec4b146101c257806316934fc4146101d55780631d71b85014610275575b600080fd5b61019b6103df565b005b6101a660095481565b6040519081526020015b60405180910390f35b6101a6600a5481565b6101a66101d03660046127e7565b610822565b6102326101e3366004612813565b600b6020526000908152604090208054600182015460028301546003840154600485015460059095015460ff94851695939492938284169361010090930490921691906001600160a01b031687565b604080519715158852602088019690965294860193909352901515606085015260ff16608084015260a08301526001600160a01b031660c082015260e0016101b0565b6101a661028336600461283f565b60086020526000908152604090205481565b6101a66102a3366004612813565b610a4d565b6003546101a6565b61019b610a82565b61019b6102c6366004612813565b610c92565b61019b6102d936600461286a565b610cde565b61019b6102ec3660046128bd565b61117d565b61019b61122b565b6101a660065481565b6000546040516001600160a01b0390911681526020016101b0565b61019b61032b3660046128ed565b611261565b61019b61033e36600461291f565b61129f565b61035661035136600461283f565b6112ce565b60405190151581526020016101b0565b6101a6610374366004612938565b61134b565b6101a66103873660046127e7565b611488565b61019b61039a366004612971565b6116c8565b6101a660055481565b6101a660075481565b61019b6103bf3660046129b4565b6118b4565b61019b61192c565b61019b6103da366004612813565b611a2c565b336000908152600b602052604090205460ff166104335760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964207374616b6560981b60448201526064015b60405180910390fd5b336000908152600b60209081526040808320815160e081018352815460ff908116151582526001830154948201859052600283015493820193909352600382015480841615156060830152610100900490921660808301819052600482015460a08401526005909101546001600160a01b031660c08301529092916104b791611ac4565b9050804211806104c957508160600151155b61050d5760405162461bcd60e51b815260206004820152601560248201527410d85b89dd08189948199a5b9a5cda1959081e595d605a1b604482015260640161042a565b60008060008460600151156105575761052533611cf8565b92508460400151836105379190612a1b565b92506064610546846005612a32565b6105509190612a67565b91506105d6565b8342111561056f5761056833611e86565b92506105bc565b6105793342611488565b9250600061058f8660200151876080015161203a565b61059a57600561059d565b600a5b905060646105ae60ff831686612a32565b6105b89190612a67565b9150505b60646105c9846002612a32565b6105d39190612a67565b91505b60006105e28284612a7b565b90506000818760400151866105f79190612a7b565b6106019190612a1b565b905081600760008282546106159190612a7b565b9250508190555060016005600082825461062f9190612a1b565b909155505060408701516006805460009061064b908490612a1b565b9091555050608087015160ff166000908152600860205260408120805460019290610677908490612a1b565b90915550506060870151156106a4576001600960008282546106999190612a1b565b909155506106bd9050565b6001600a60008282546106b79190612a1b565b90915550505b336000818152600b60205260408120805460ff1916815560018082018390556002820183905560038201805461ffff19169055600482019290925560050180546001600160a01b0319169055546001600160a01b03169063a9059cbb90610723846120ce565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561076e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107929190612a93565b6107de5760405162461bcd60e51b815260206004820152601c60248201527f436f756c646e2774207472616e736665722074686520746f6b656e7300000000604482015260640161042a565b604080518281526020810184905233917fa287afc36219422479b90fe9ac2672e28735d1bdd05d78553521159f9f525f6d910160405180910390a250505050505050565b6001600160a01b038083166000908152600b60209081526040808320815160e081018352815460ff90811615158252600183015494820185905260028301549382019390935260038201548084161515606083015261010090049092166080830152600481015460a08301526005015490931660c084015290919082906108a8906120e9565b905060006108b5856120e9565b9050806020015160ff16826020015160ff1614156108f7578260a001516108e3848360400151856001612270565b6108ed9190612a1b565b9350505050610a47565b6000610905848460016122c7565b9050600061091b85602001518660800151611ac4565b90506000610928826120e9565b905060015b866080015160ff168160ff1611610a3d5760008187602001516109509190612ab0565b8751909150600c60ff8316111561097c5761096c600182612ad5565b9050610979600c83612afb565b91505b60006109948360ff168361ffff168c6080015161134b565b9050846020015160ff168360ff1614156109e05760006109bc86604001518a6040015161239e565b90506109ce888260ff168460016123bb565b9b505050505050505050505050610a47565b876020015160ff168360ff161415610a1757610a0687896040015160ff168360016123bb565b9a5050505050505050505050610a47565b610a2587828486600161248d565b96505050508080610a3590612b1d565b91505061092d565b5091955050505050505b92915050565b6001600160a01b0381166000908152600b602052604081206001810154600390910154610a479190610100900460ff16611ac4565b336000908152600b602052604090205460ff16610ad15760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964207374616b6560981b604482015260640161042a565b336000908152600b602052604090206003015460ff1615610b5a5760405162461bcd60e51b815260206004820152603960248201527f436f6d706f756e646572732063616e2774207769746864726177206265666f7260448201527f6520746865792066696e697368207468656972207374616b6500000000000000606482015260840161042a565b336000818152600b6020526040812091610b749042611488565b905080826004016000828254610b8a9190612a7b565b90915550506001546001600160a01b031663a9059cbb33610baa846120ce565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190612a93565b610c595760405162461bcd60e51b8152602060048201526011602482015270436f756c646e277420776974686472617760781b604482015260640161042a565b60405181815233907f8a43c4352486ec339f487f64af78ca5cbf06cd47833f073d3baf3a193e5031619060200160405180910390a25050565b6000546001600160a01b03163314610cbc5760405162461bcd60e51b815260040161042a90612b3d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600b602052604090205460ff1615610d3e5760405162461bcd60e51b815260206004820152601860248201527f596f7520616c726561647920686176652061207374616b650000000000000000604482015260640161042a565b610d47836112ce565b610d8b5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b1bd8dadd5c081c195c9a5bd9605a1b604482015260640161042a565b600354841015610dcf5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206d696e696d756d60881b604482015260640161042a565b6001546001600160a01b03166323b872dd3330610deb886120ce565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e639190612a93565b610eaf5760405162461bcd60e51b815260206004820152601860248201527f436f756c646e27742074616b652074686520746f6b656e730000000000000000604482015260640161042a565b6001600160a01b03811615801590610edf57506001600160a01b0381166000908152600b602052604090205460ff165b15610fb7576001600160a01b0381166000908152600b6020526040812060020154610f0c90606490612a67565b6001600160a01b0383166000818152600b602090815260409182902060020154825190815290810184905292935090917f137164f93582d8b617ea3f6901a1d521e2610ec8397fe92459e6cf85a9dc83e8910160405180910390a26001600160a01b0382166000908152600b602052604081206002018054839290610f92908490612a7b565b925050819055508060066000828254610fab9190612a7b565b90915550610fc5915050565b506004546001600160a01b03165b6040805160e08101825260018082524260208084019182528385018981528715156060860190815260ff808b1660808801908152600060a089018181526001600160a01b03808d1660c08c01908152338452600b9098529a82208a51815490151560ff199091161781559751888a015594516002880155925160038701805492519093166101000261ff00199115159190911661ffff199092169190911717905590516004840155905160059283018054919096166001600160a01b03199091161790945580549293919290919061109e908490612a7b565b9250508190555084600660008282546110b79190612a7b565b909155505060ff841660009081526008602052604081208054600192906110df908490612a7b565b90915550508215611108576001600960008282546110fd9190612a7b565b909155506111219050565b6001600a600082825461111b9190612a7b565b90915550505b6040805186815260ff86166020820152841515818301526001600160a01b0384166060820152905133917f400e171aacda0e3d4172b349f5580803cee665adbac7a82751db1de4e8985309919081900360800190a25050505050565b6000546001600160a01b031633146111a75760405162461bcd60e51b815260040161042a90612b3d565b60015460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af11580156111fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121e9190612a93565b61122757600080fd5b5050565b6000546001600160a01b031633146112555760405162461bcd60e51b815260040161042a90612b3d565b61125f6000612523565b565b6000546001600160a01b0316331461128b5760405162461bcd60e51b815260040161042a90612b3d565b600c93909355600d91909155600e55600f55565b6000546001600160a01b031633146112c95760405162461bcd60e51b815260040161042a90612b3d565b600355565b60105460009060ff1680156112e657508160ff166001145b806113065750601054610100900460ff16801561130657508160ff166002145b80611327575060105462010000900460ff16801561132757508160ff166003145b80610a4757506010546301000000900460ff168015610a4757505060ff1660061490565b600082815260116020908152604080832086845290915281205460ff1615611429578160ff166001141561139c57506000828152601160209081526040808320868452909152902060010154611481565b8160ff16600214156113cb57506000828152601160209081526040808320868452909152902060020154611481565b8160ff16600314156113fa57506000828152601160209081526040808320868452909152902060030154611481565b8160ff166006141561142957506000828152601160209081526040808320868452909152902060040154611481565b8160ff166001141561143e5750600c54611481565b8160ff16600214156114535750600d54611481565b8160ff16600314156114685750600e54611481565b8160ff166006141561147d5750600f54611481565b5060005b9392505050565b6001600160a01b038083166000908152600b60209081526040808320815160e081018352815460ff90811615158252600183015494820185905260028301549382019390935260038201548084161515606083015261010090049092166080830152600481015460a08301526005015490931660c0840152909190829061150e906120e9565b9050600061151b856120e9565b9050806020015160ff16826020015160ff161415611549578260a001516108e3848360400151856000612270565b6000611557848460006122c7565b9050600061156d85602001518660800151611ac4565b9050600061157a826120e9565b905060015b866080015160ff168160ff16116116ab5760008187602001516115a29190612ab0565b8751909150600c60ff831611156115ce576115be600182612ad5565b90506115cb600c83612afb565b91505b60006115e68360ff168361ffff168c6080015161134b565b9050846020015160ff168360ff16141561163957600061160e86604001518a6040015161239e565b90506116248b604001518260ff168460006123bb565b61162e9089612a7b565b9750505050506116ab565b876020015160ff168360ff161415611677576116638a60400151896040015160ff168360006123bb565b61166d9088612a7b565b96505050506116ab565b6116898a60400151828486600061248d565b6116939088612a7b565b965050505080806116a390612b1d565b91505061157f565b5060a08601516116bb9084612a1b565b9998505050505050505050565b6000546001600160a01b031633146116f25760405162461bcd60e51b815260040161042a90612b3d565b6040516392d6631360e01b8152426004820152600090737d702a2eb335758426d102bd5db25c12da1825c4906392d6631390602401602060405180830381865af4158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190612b72565b61ffff1690506000737d702a2eb335758426d102bd5db25c12da1825c463a324ad24426040518263ffffffff1660e01b81526004016117a991815260200190565b602060405180830381865af41580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea9190612b96565b60ff1690508088101580156117fe57508187145b8061180857508187115b6118715760405162461bcd60e51b815260206004820152603460248201527f596f752063616e206f6e6c792073657420697420666f722074686973206d6f6e6044820152730e8d040dee440c240cceae8eae4ca40dadedce8d60631b606482015260840161042a565b5050600094855260116020908152604080872097875296905294909320805460ff1916600190811782558101929092556002820155600381019190915560040155565b6000546001600160a01b031633146118de5760405162461bcd60e51b815260040161042a90612b3d565b6010805461ffff191694151561ff00191694909417610100931515939093029290921763ffff00001916620100009115159190910263ff000000191617630100000091151591909102179055565b6000546001600160a01b031633146119565760405162461bcd60e51b815260040161042a90612b3d565b6007805460009091556001546001600160a01b031663a9059cbb3361197a846120ce565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612a93565b611a295760405162461bcd60e51b8152602060048201526011602482015270436f756c646e277420776974686472617760781b604482015260640161042a565b50565b6000546001600160a01b03163314611a565760405162461bcd60e51b815260040161042a90612b3d565b6001600160a01b038116611abb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042a565b611a2981612523565b6040516392d6631360e01b8152600481018390526000908190737d702a2eb335758426d102bd5db25c12da1825c4906392d6631390602401602060405180830381865af4158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d9190612b72565b6040516328c92b4960e21b815260048101869052909150600090737d702a2eb335758426d102bd5db25c12da1825c49063a324ad2490602401602060405180830381865af4158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb79190612b96565b9050611bc38482612ab0565b9050600c8160ff161115611bec57611bdc600183612ad5565b9150611be9600c82612afb565b90505b6040516301971ca160e61b815260048101869052600090737d702a2eb335758426d102bd5db25c12da1825c4906365c7284090602401602060405180830381865af4158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190612b96565b6040516304646cc560e51b815261ffff8516600482015260ff808516602483015282166044820152909150737d702a2eb335758426d102bd5db25c12da1825c490638c8d98a090606401602060405180830381865af4158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190612bb3565b9695505050505050565b6001600160a01b038082166000908152600b60209081526040808320815160e081018352815460ff90811615158252600183015494820185905260028301549382019390935260038201548084161515606083015261010090049092166080830152600481015460a08301526005015490931660c08401529091908290611d7e906120e9565b90506000611d8e838360016122c7565b90506000611da484602001518560800151611ac4565b90506000611db1826120e9565b905060015b856080015160ff168160ff1611611e7a576000818660200151611dd99190612ab0565b8651909150600c60ff83161115611e0557611df5600182612ad5565b9050611e02600c83612afb565b91505b6000611e1d8360ff168361ffff168b6080015161134b565b9050846020015160ff168360ff161415611e5457611e4587866040015160ff168360016123bb565b9b9a5050505050505050505050565b611e6287828486600161248d565b96505050508080611e7290612b1d565b915050611db6565b50919695505050505050565b6001600160a01b038082166000908152600b60209081526040808320815160e081018352815460ff90811615158252600183015494820185905260028301549382019390935260038201548084161515606083015261010090049092166080830152600481015460a08301526005015490931660c08401529091908290611f0c906120e9565b90506000611f1c838360006122c7565b90506000611f3284602001518560800151611ac4565b90506000611f3f826120e9565b905060015b856080015160ff168160ff161161201f576000818660200151611f679190612ab0565b8651909150600c60ff83161115611f9357611f83600182612ad5565b9050611f90600c83612afb565b91505b6000611fab8360ff168361ffff168b6080015161134b565b9050846020015160ff168360ff161415611feb57611fd78960400151866040015160ff168360006123bb565b611fe19088612a7b565b965050505061201f565b611ffd8960400151828486600061248d565b6120079088612a7b565b9650505050808061201790612b1d565b915050611f44565b5060a085015161202f9084612a1b565b979650505050505050565b600062015180600160ff8416141561206b57426120578286612a7b565b61206290600f612a7b565b11915050610a47565b8260ff166002141561208d57426120828286612a7b565b61206290601e612a7b565b8260ff16600314156120af57426120a48286612a7b565b61206290602d612a7b565b426120ba8286612a7b565b6120c590605a612a7b565b11949350505050565b6000600254600a6120df9190612cb0565b610a479083612a32565b6040805160608101825260008082526020820181905291810182905290808061211185612573565b61ffff1684526121226107b2612668565b84516121319061ffff16612668565b61213b9190612a1b565b915061214b826301e28500612a32565b6121559084612a7b565b9250816107b2856000015161216a9190612cbc565b61ffff166121789190612a1b565b612186906301e13380612a32565b6121909084612a7b565b92506000600191505b600c8260ff1611612201576121b28286600001516126ad565b6121c29060ff1662015180612a32565b9050856121cf8583612a7b565b11156121e35760ff82166020860152612201565b6121ed8185612a7b565b9350816121f981612b1d565b925050612199565b600191505b612218856020015186600001516126ad565b60ff168260ff161161226757856122328562015180612a7b565b11156122465760ff82166040860152612267565b6122536201518085612a7b565b93508161225f81612b1d565b925050612206565b50505050919050565b600080612291846020015160ff16856000015161ffff16886080015161134b565b905060008460400151866122a59190612cdf565b90506122ba87604001518260ff1684876123bb565b925050505b949350505050565b6020820151825160405163591c568760e11b815260ff909216600483015261ffff1660248201526000908190737d702a2eb335758426d102bd5db25c12da1825c49063b238ad0e90604401602060405180830381865af415801561232f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123539190612b96565b90506000612375856020015160ff16866000015161ffff16886080015161134b565b905060008560400151836123899190612cdf565b905061202f87604001518260ff1684886123bb565b60008160ff168360ff1610156123b5575081610a47565b50919050565b6000811561246257701d6329f1c35ca4bfabb9f56100000000005b600a8511156124205780600a6123ee86612710612a7b565b6123f89190612d02565b6124029088612a32565b61240c9190612a67565b9550612419600a86612a1b565b94506123d6565b61242c85612710612cb0565b8561243986612710612a7b565b6124439190612cb0565b61244d9088612a32565b6124579190612a67565b9550859150506122bf565b612710836124708688612a32565b61247a9190612a32565b6124849190612a67565b95945050505050565b60405163591c568760e11b815260ff8316600482015261ffff841660248201526000908190737d702a2eb335758426d102bd5db25c12da1825c49063b238ad0e90604401602060405180830381865af41580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125129190612b96565b60ff16905061202f878288866123bb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008080806125866301e1338086612a67565b612592906107b2612a7b565b915061259f6107b2612668565b6125ac8361ffff16612668565b6125b69190612a1b565b90506125c6816301e28500612a32565b6125d09084612a7b565b9250806125df6107b284612cbc565b61ffff166125ed9190612a1b565b6125fb906301e13380612a32565b6126059084612a7b565b92505b848311156126605761262361261e600184612cbc565b612773565b1561263d576126366301e2850084612a1b565b925061264e565b61264b6301e1338084612a1b565b92505b612659600183612cbc565b9150612608565b509392505050565b6000612675600183612a1b565b915061268361019083612a67565b61268e606484612a67565b612699600485612a67565b6126a39190612a1b565b610a479190612a7b565b60008260ff16600114806126c457508260ff166003145b806126d257508260ff166005145b806126e057508260ff166007145b806126ee57508260ff166008145b806126fc57508260ff16600a145b8061270a57508260ff16600c145b156127175750601f610a47565b8260ff166004148061272c57508260ff166006145b8061273a57508260ff166009145b8061274857508260ff16600b145b156127555750601e610a47565b61275e82612773565b1561276b5750601d610a47565b50601c610a47565b6000612780600483612d11565b61ffff161561279157506000919050565b61279c606483612d11565b61ffff16156127ad57506001919050565b6127b961019083612d11565b61ffff16156127ca57506000919050565b506001919050565b6001600160a01b0381168114611a2957600080fd5b600080604083850312156127fa57600080fd5b8235612805816127d2565b946020939093013593505050565b60006020828403121561282557600080fd5b8135611481816127d2565b60ff81168114611a2957600080fd5b60006020828403121561285157600080fd5b813561148181612830565b8015158114611a2957600080fd5b6000806000806080858703121561288057600080fd5b84359350602085013561289281612830565b925060408501356128a28161285c565b915060608501356128b2816127d2565b939692955090935050565b600080604083850312156128d057600080fd5b8235915060208301356128e2816127d2565b809150509250929050565b6000806000806080858703121561290357600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561293157600080fd5b5035919050565b60008060006060848603121561294d57600080fd5b8335925060208401359150604084013561296681612830565b809150509250925092565b60008060008060008060c0878903121561298a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600080608085870312156129ca57600080fd5b84356129d58161285c565b935060208501356129e58161285c565b925060408501356129f58161285c565b915060608501356128b28161285c565b634e487b7160e01b600052601160045260246000fd5b600082821015612a2d57612a2d612a05565b500390565b6000816000190483118215151615612a4c57612a4c612a05565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612a7657612a76612a51565b500490565b60008219821115612a8e57612a8e612a05565b500190565b600060208284031215612aa557600080fd5b81516114818161285c565b600060ff821660ff84168060ff03821115612acd57612acd612a05565b019392505050565b600061ffff808316818516808303821115612af257612af2612a05565b01949350505050565b600060ff831680612b0e57612b0e612a51565b8060ff84160691505092915050565b600060ff821660ff811415612b3457612b34612a05565b60010192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612b8457600080fd5b815161ffff8116811461148157600080fd5b600060208284031215612ba857600080fd5b815161148181612830565b600060208284031215612bc557600080fd5b5051919050565b600181815b80851115612c07578160001904821115612bed57612bed612a05565b80851615612bfa57918102915b93841c9390800290612bd1565b509250929050565b600082612c1e57506001610a47565b81612c2b57506000610a47565b8160018114612c415760028114612c4b57612c67565b6001915050610a47565b60ff841115612c5c57612c5c612a05565b50506001821b610a47565b5060208310610133831016604e8410600b8410161715612c8a575081810a610a47565b612c948383612bcc565b8060001904821115612ca857612ca8612a05565b029392505050565b60006114818383612c0f565b600061ffff83811690831681811015612cd757612cd7612a05565b039392505050565b600060ff821660ff841680821015612cf957612cf9612a05565b90039392505050565b600061148160ff841683612c0f565b600061ffff80841680612d2657612d26612a51565b9216919091069291505056fea2646970667358221220fed1db0635b2f04cf43dad1bcaaaeb85f56dfa5fa5ea20b36f9c18b636fc81e664736f6c634300080a0033
Deployed ByteCode Sourcemap
4694:19416:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8733:2023;;;:::i;:::-;;5123:35;;;;;;;;;160:25:4;;;148:2;133:18;5123:35:2;;;;;;;;5164:38;;;;;;18299:1940;;;;;;:::i;:::-;;:::i;5422:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5422:39:2;;;;;;;1228:14:4;;1221:22;1203:41;;1275:2;1260:18;;1253:34;;;;1303:18;;;1296:34;;;;1373:14;;1366:22;1361:2;1346:18;;1339:50;1438:4;1426:17;1420:3;1405:19;;1398:46;1475:3;1460:19;;1453:35;-1:-1:-1;;;;;1525:32:4;1519:3;1504:19;;1497:61;1190:3;1175:19;5422:39:2;904:660:4;5071:46:2;;;;;;:::i;:::-;;;;;;;;;;;;;;20429:187;;;;;;:::i;:::-;;:::i;22204:105::-;22284:18;;22204:105;;8181:542;;;:::i;21968:85::-;;;;;;:::i;:::-;;:::i;6447:1724::-;;;;;;:::i;:::-;;:::i;21830:128::-;;;;;;:::i;:::-;;:::i;1605:101:3:-;;;:::i;4994:30:2:-;;;;;;973:85:3;1019:7;1045:6;973:85;;-1:-1:-1;;;;;1045:6:3;;;3383:51:4;;3371:2;3356:18;973:85:3;3237:203:4;22956:228:2;;;;;;:::i;:::-;;:::i;22063:135::-;;;;;;:::i;:::-;;:::i;21067:206::-;;;;;;:::i;:::-;;:::i;:::-;;;4185:14:4;;4178:22;4160:41;;4148:2;4133:18;21067:206:2;4020:187:4;23194:914:2;;;;;;:::i;:::-;;:::i;14757:2079::-;;;;;;:::i;:::-;;:::i;22319:627::-;;;;;;:::i;:::-;;:::i;4958:30::-;;;;;;5030:35;;;;;;21283:306;;;;;;:::i;:::-;;:::i;21599:225::-;;;:::i;1855:198:3:-;;;;;;:::i;:::-;;:::i;8733:2023:2:-;8788:10;8781:18;;;;:6;:18;;;;;:25;;;8773:51;;;;-1:-1:-1;;;8773:51:2;;5978:2:4;8773:51:2;;;5960:21:4;6017:2;5997:18;;;5990:30;-1:-1:-1;;;6036:18:4;;;6029:43;6089:18;;8773:51:2;;;;;;;;;8871:10;8843:18;8864;;;:6;:18;;;;;;;;8843:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8843:39:2;;;;;;;:18;8922:62;;:25;:62::i;:::-;8901:83;;9020:10;9002:15;:28;:47;;;;9035:5;:14;;;9034:15;9002:47;8994:81;;;;-1:-1:-1;;;8994:81:2;;6320:2:4;8994:81:2;;;6302:21:4;6359:2;6339:18;;;6332:30;-1:-1:-1;;;6378:18:4;;;6371:51;6439:18;;8994:81:2;6118:345:4;8994:81:2;9094:20;9124:17;9151:20;9194:5;:14;;;9190:876;;;9239:45;9273:10;9239:33;:45::i;:::-;9224:60;;9349:5;:19;;;9333:35;;;;;:::i;:::-;;-1:-1:-1;9413:3:2;9394:16;9333:35;9409:1;9394:16;:::i;:::-;:22;;;;:::i;:::-;9382:34;;9190:876;;;9494:10;9476:15;:28;9472:519;;;9539:48;9576:10;9539:36;:48::i;:::-;9524:63;;9472:519;;;9655:67;9694:10;9706:15;9655:38;:67::i;:::-;9640:82;;9841:13;9857:49;9870:5;:15;;;9887:5;:18;;;9857:12;:49::i;:::-;:58;;9914:1;9857:58;;;9909:2;9857:58;9841:74;-1:-1:-1;9973:3:2;9948:22;;;;:12;:22;:::i;:::-;:28;;;;:::i;:::-;9933:43;;9622:369;9472:519;10035:3;10016:16;:12;10031:1;10016:16;:::i;:::-;:22;;;;:::i;:::-;10004:34;;9190:876;10084:21;10108:24;10120:12;10108:9;:24;:::i;:::-;10084:48;;10142:23;10205:13;10183:5;:19;;;10168:12;:34;;;;:::i;:::-;:50;;;;:::i;:::-;10142:76;;10248:13;10228:16;;:33;;;;;;;:::i;:::-;;;;;;;;10287:1;10272:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;10313:19:2;;;;10298:11;:34;;:11;;:34;;10313:19;;10298:34;:::i;:::-;;;;-1:-1:-1;;10356:18:2;;;;10342:33;;;;;;:13;:33;;;;;:38;;10379:1;;10342:33;:38;;10379:1;;10342:38;:::i;:::-;;;;-1:-1:-1;;10394:14:2;;;;10390:121;;;10444:1;10424:16;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;10390:121:2;;-1:-1:-1;10390:121:2;;10499:1;10476:19;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;10390:121:2;10534:10;10527:18;;;;:6;:18;;;;;10520:25;;-1:-1:-1;;10520:25:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10520:25:2;;;;;;;;;;;;;;-1:-1:-1;;;;;;10520:25:2;;;10564:5;-1:-1:-1;;;;;10564:5:2;;:14;;10591:43;10618:15;10591:26;:43::i;:::-;10564:71;;-1:-1:-1;;;;;;10564:71:2;;;;;;;-1:-1:-1;;;;;7485:32:4;;;10564:71:2;;;7467:51:4;7534:18;;;7527:34;7440:18;;10564:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10556:112;;;;-1:-1:-1;;;10556:112:2;;8024:2:4;10556:112:2;;;8006:21:4;8063:2;8043:18;;;8036:30;8102;8082:18;;;8075:58;8150:18;;10556:112:2;7822:352:4;10556:112:2;10692:57;;;8353:25:4;;;8409:2;8394:18;;8387:34;;;10706:10:2;;10692:57;;8326:18:4;10692:57:2;;;;;;;8763:1993;;;;;;;8733:2023::o;18299:1940::-;-1:-1:-1;;;;;18433:16:2;;;18393:7;18433:16;;;:6;:16;;;;;;;;18412:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18393:7;;18412:37;18393:7;;18496:36;;:19;:36::i;:::-;18468:64;;18542:23;18568:25;18588:4;18568:19;:25::i;:::-;18542:51;;18683:5;:11;;;18666:28;;:7;:13;;;:28;;;18662:150;;;18786:5;:15;;;18717:66;18751:5;18758;:9;;;18769:7;18778:4;18717:33;:66::i;:::-;:84;;;;:::i;:::-;18710:91;;;;;;;18662:150;18888:13;18904:52;18935:5;18942:7;18951:4;18904:30;:52::i;:::-;18888:68;;18975:23;19001:62;19027:5;:15;;;19044:5;:18;;;19001:25;:62::i;:::-;18975:88;;19073:26;19102:36;19122:15;19102:19;:36::i;:::-;19073:65;-1:-1:-1;19169:1:2;19157:1045;19174:5;:18;;;19171:21;;:1;:21;;;19157:1045;;19212:18;19249:1;19233:7;:13;;;:17;;;;:::i;:::-;19285:12;;19212:38;;-1:-1:-1;19330:2:2;19315:17;;;;19311:122;;;19352:16;19367:1;19352:16;;:::i;:::-;;-1:-1:-1;19401:17:2;19416:2;19401:12;:17;:::i;:::-;19386:32;;19311:122;19447:11;19461:53;19468:12;19461:53;;19482:11;19461:53;;19495:5;:18;;;19461:6;:53::i;:::-;19447:67;;19593:8;:14;;;19577:30;;:12;:30;;;19573:463;;;19627:13;19643:32;19651:8;:12;;;19665:5;:9;;;19643:7;:32::i;:::-;19627:48;;19755:43;19772:5;19779:7;19755:43;;19788:3;19793:4;19755:16;:43::i;:::-;19748:50;;;;;;;;;;;;;;;19573:463;19851:5;:11;;;19835:27;;:12;:27;;;19831:205;;;19976:45;19993:5;20000;:9;;;19976:45;;20011:3;20016:4;19976:16;:45::i;:::-;19969:52;;;;;;;;;;;;;;19831:205;20123:68;20147:5;20154:3;20159:11;20172:12;20186:4;20123:23;:68::i;:::-;20115:76;;19198:1004;;;19193:3;;;;;:::i;:::-;;;;19157:1045;;;-1:-1:-1;20227:5:2;;-1:-1:-1;;;;;;18299:1940:2;;;;;:::o;20429:187::-;-1:-1:-1;;;;;20553:15:2;;20501:7;20553:15;;;:6;:15;;;;;:25;;;;20580:28;;;;;20527:82;;20553:25;20580:28;;;;;20527:25;:82::i;8181:542::-;8233:10;8226:18;;;;:6;:18;;;;;:25;;;8218:51;;;;-1:-1:-1;;;8218:51:2;;5978:2:4;8218:51:2;;;5960:21:4;6017:2;5997:18;;;5990:30;-1:-1:-1;;;6036:18:4;;;6029:43;6089:18;;8218:51:2;5776:337:4;8218:51:2;8295:10;8288:18;;;;:6;:18;;;;;:27;;;;;8287:28;8279:98;;;;-1:-1:-1;;;8279:98:2;;9414:2:4;8279:98:2;;;9396:21:4;9453:2;9433:18;;;9426:30;9492:34;9472:18;;;9465:62;9563:27;9543:18;;;9536:55;9608:19;;8279:98:2;9212:421:4;8279:98:2;8417:10;8388:19;8410:18;;;:6;:18;;;;;;8454:67;;8505:15;8454:38;:67::i;:::-;8438:83;;8550:5;8531;:15;;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;8582:5:2;;-1:-1:-1;;;;;8582:5:2;:14;8597:10;8609:33;8636:5;8609:26;:33::i;:::-;8582:61;;-1:-1:-1;;;;;;8582:61:2;;;;;;;-1:-1:-1;;;;;7485:32:4;;;8582:61:2;;;7467:51:4;7534:18;;;7527:34;7440:18;;8582:61:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8574:91;;;;-1:-1:-1;;;8574:91:2;;9840:2:4;8574:91:2;;;9822:21:4;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9898:18:4;;;9891:47;9955:18;;8574:91:2;9638:341:4;8574:91:2;8681:35;;160:25:4;;;8698:10:2;;8681:35;;148:2:4;133:18;8681:35:2;;;;;;;8208:515;;8181:542::o;21968:85::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;22032:5:2::1;:14:::0;;-1:-1:-1;;;;;;22032:14:2::1;-1:-1:-1::0;;;;;22032:14:2;;;::::1;::::0;;;::::1;::::0;;21968:85::o;6447:1724::-;6574:10;6567:18;;;;:6;:18;;;;;:25;;;6566:26;6558:63;;;;-1:-1:-1;;;6558:63:2;;10547:2:4;6558:63:2;;;10529:21:4;10586:2;10566:18;;;10559:30;10625:26;10605:18;;;10598:54;10669:18;;6558:63:2;10345:348:4;6558:63:2;6639:35;6660:13;6639:20;:35::i;:::-;6631:69;;;;-1:-1:-1;;;6631:69:2;;10900:2:4;6631:69:2;;;10882:21:4;10939:2;10919:18;;;10912:30;-1:-1:-1;;;10958:18:4;;;10951:51;11019:18;;6631:69:2;10698:345:4;6631:69:2;22284:18;;6718:7;:34;;6710:62;;;;-1:-1:-1;;;6710:62:2;;11250:2:4;6710:62:2;;;11232:21:4;11289:2;11269:18;;;11262:30;-1:-1:-1;;;11308:18:4;;;11301:45;11363:18;;6710:62:2;11048:339:4;6710:62:2;6806:5;;-1:-1:-1;;;;;6806:5:2;6799:26;6826:10;6846:4;6853:35;6880:7;6853:26;:35::i;:::-;6799:90;;-1:-1:-1;;;;;;6799:90:2;;;;;;;-1:-1:-1;;;;;11650:15:4;;;6799:90:2;;;11632:34:4;11702:15;;;;11682:18;;;11675:43;11734:18;;;11727:34;11567:18;;6799:90:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6791:127;;;;-1:-1:-1;;;6791:127:2;;11974:2:4;6791:127:2;;;11956:21:4;12013:2;11993:18;;;11986:30;12052:26;12032:18;;;12025:54;12096:18;;6791:127:2;11772:348:4;6791:127:2;-1:-1:-1;;;;;6941:23:2;;;;;;:51;;-1:-1:-1;;;;;;6968:17:2;;;;;;:6;:17;;;;;:24;;;6941:51;6937:426;;;-1:-1:-1;;;;;7035:17:2;;7008:24;7035:17;;;:6;:17;;;;;:31;;;:37;;7069:3;;7035:37;:::i;:::-;-1:-1:-1;;;;;7091:87:2;;7128:17;;;;:6;:17;;;;;;;;;:31;;;7091:87;;8353:25:4;;;8394:18;;;8387:34;;;7008:64:2;;-1:-1:-1;7091:87:2;;;;8326:18:4;7091:87:2;;;;;;;-1:-1:-1;;;;;7192:17:2;;;;;;:6;:17;;;;;:31;;:51;;7227:16;;7192:17;:51;;7227:16;;7192:51;:::i;:::-;;;;;;;;7272:16;7257:11;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;6937:426:2;;-1:-1:-1;;6937:426:2;;-1:-1:-1;7340:12:2;;-1:-1:-1;;;;;7340:12:2;6937:426;7394:381;;;;;;;;7408:4;7394:381;;;7461:15;7394:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7373:18;7394:381;;;;;;-1:-1:-1;;;;;7394:381:2;;;;;;;;;7829:10;7822:18;;:6;:18;;;;;;:26;;;;;;;-1:-1:-1;;7822:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7822:26:2;;;;;;;-1:-1:-1;;7822:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7822:26:2;;;;;;;7858:16;;7394:381;;7408:4;;7822:26;;7373:18;7858:16;;7408:4;;7858:16;:::i;:::-;;;;;;;;7899:7;7884:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;7916:28:2;;;;;;;:13;:28;;;;;:33;;7948:1;;7916:28;:33;;7948:1;;7916:33;:::i;:::-;;;;-1:-1:-1;;7959:116:2;;;;8008:1;7988:16;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;7959:116:2;;-1:-1:-1;7959:116:2;;8063:1;8040:19;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;7959:116:2;8098:66;;;12346:25:4;;;12419:4;12407:17;;12402:2;12387:18;;12380:45;12468:14;;12461:22;12441:18;;;12434:50;-1:-1:-1;;;;;12520:32:4;;12515:2;12500:18;;12493:60;8098:66:2;;8107:10;;8098:66;;;;;;12333:3:4;8098:66:2;;;6548:1623;6447:1724;;;;:::o;21830:128::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;21919:5:2::1;::::0;:31:::1;::::0;-1:-1:-1;;;21919:31:2;;-1:-1:-1;;;;;7485:32:4;;;21919:31:2::1;::::0;::::1;7467:51:4::0;7534:18;;;7527:34;;;21919:5:2;;::::1;::::0;:14:::1;::::0;7440:18:4;;21919:31:2::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21911:40;;;::::0;::::1;;21830:128:::0;;:::o;1605:101:3:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;1669:30:::1;1696:1;1669:18;:30::i;:::-;1605:101::o:0;22956:228:2:-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;23067:12:2::1;:20:::0;;;;23097:12:::1;:20:::0;;;;23127:12:::1;:20:::0;23157:12:::1;:20:::0;22956:228::o;22063:135::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;22151:18:2::1;:40:::0;22063:135::o;21067:206::-;21151:14;;21127:4;;21151:14;;:24;;;;;21169:1;:6;;21174:1;21169:6;21151:24;21150:56;;;-1:-1:-1;21181:14:2;;;;;;;:24;;;;;21199:1;:6;;21204:1;21199:6;21181:24;21150:86;;;-1:-1:-1;21211:14:2;;;;;;;:24;;;;;21229:1;:6;;21234:1;21229:6;21211:24;21150:116;;;-1:-1:-1;21241:14:2;;;;;;;:24;;;;-1:-1:-1;;21259:6:2;;21264:1;21259:6;;21067:206::o;23194:914::-;23280:7;23303:10;;;:4;:10;;;;;;;;:17;;;;;;;;:24;;;23299:448;;;23347:12;:17;;23363:1;23347:17;23343:394;;;-1:-1:-1;23391:10:2;;;;:4;:10;;;;;;;;:17;;;;;;;;:22;;;23384:29;;23343:394;23450:12;:17;;23466:1;23450:17;23446:291;;;-1:-1:-1;23494:10:2;;;;:4;:10;;;;;;;;:17;;;;;;;;:22;;;23487:29;;23446:291;23553:12;:17;;23569:1;23553:17;23549:188;;;-1:-1:-1;23597:10:2;;;;:4;:10;;;;;;;;:17;;;;;;;;:22;;;23590:29;;23549:188;23656:12;:17;;23672:1;23656:17;23652:85;;;-1:-1:-1;23700:10:2;;;;:4;:10;;;;;;;;:17;;;;;;;;:22;;;23693:29;;23652:85;23769:12;:17;;23785:1;23769:17;23765:310;;;-1:-1:-1;23809:12:2;;23802:19;;23765:310;23850:12;:17;;23866:1;23850:17;23846:229;;;-1:-1:-1;23890:12:2;;23883:19;;23846:229;23931:12;:17;;23947:1;23931:17;23927:148;;;-1:-1:-1;23971:12:2;;23964:19;;23927:148;24012:12;:17;;24028:1;24012:17;24008:67;;;-1:-1:-1;24052:12:2;;24045:19;;24008:67;-1:-1:-1;24100:1:2;23194:914;;;;;;:::o;14757:2079::-;-1:-1:-1;;;;;14898:16:2;;;14858:7;14898:16;;;:6;:16;;;;;;;;14877:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14858:7;;14877:37;14858:7;;14961:36;;:19;:36::i;:::-;14933:64;;15007:23;15033:25;15053:4;15033:19;:25::i;:::-;15007:51;;15148:5;:11;;;15131:28;;:7;:13;;;:28;;;15127:151;;;15252:5;:15;;;15182:67;15216:5;15223;:9;;;15234:7;15243:5;15182:33;:67::i;15127:151::-;15354:13;15370:53;15401:5;15408:7;15417:5;15370:30;:53::i;:::-;15354:69;;15442:23;15468:62;15494:5;:15;;;15511:5;:18;;;15468:25;:62::i;:::-;15442:88;;15540:26;15569:36;15589:15;15569:19;:36::i;:::-;15540:65;-1:-1:-1;15636:1:2;15624:1141;15641:5;:18;;;15638:21;;:1;:21;;;15624:1141;;15679:18;15716:1;15700:7;:13;;;:17;;;;:::i;:::-;15752:12;;15679:38;;-1:-1:-1;15797:2:2;15782:17;;;;15778:122;;;15819:16;15834:1;15819:16;;:::i;:::-;;-1:-1:-1;15868:17:2;15883:2;15868:12;:17;:::i;:::-;15853:32;;15778:122;15914:11;15928:53;15935:12;15928:53;;15949:11;15928:53;;15962:5;:18;;;15928:6;:53::i;:::-;15914:67;;16060:8;:14;;;16044:30;;:12;:30;;;16040:543;;;16094:13;16110:32;16118:8;:12;;;16132:5;:9;;;16110:7;:32::i;:::-;16094:48;;16224:58;16241:5;:19;;;16262:7;16224:58;;16271:3;16276:5;16224:16;:58::i;:::-;16215:67;;;;:::i;:::-;;;16300:5;;;;;;16040:543;16358:5;:11;;;16342:27;;:12;:27;;;16338:245;;;16485:60;16502:5;:19;;;16523:5;:9;;;16485:60;;16534:3;16539:5;16485:16;:60::i;:::-;16476:69;;;;:::i;:::-;;;16563:5;;;;;16338:245;16671:83;16695:5;:19;;;16716:3;16721:11;16734:12;16748:5;16671:23;:83::i;:::-;16662:92;;;;:::i;:::-;;;15665:1100;;;15660:3;;;;;:::i;:::-;;;;15624:1141;;;-1:-1:-1;16792:15:2;;;;16783:24;;;;:::i;:::-;;14757:2079;-1:-1:-1;;;;;;;;;14757:2079:2:o;22319:627::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;22475:29:2::1;::::0;-1:-1:-1;;;22475:29:2;;22488:15:::1;22475:29;::::0;::::1;160:25:4::0;22454:18:2::1;::::0;22475:4:::1;::::0;:12:::1;::::0;133:18:4;;22475:29:2::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22454:50;;;;22514:19;22536:4;:13;22550:15;22536:30;;;;;;;;;;;;;160:25:4::0;;148:2;133:18;;14:177;22536:30:2::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22514:52;;;;22604:11;22594:6;:21;;:45;;;;;22629:10;22620:5;:19;22594:45;22593:69;;;;22652:10;22644:5;:18;22593:69;22585:134;;;::::0;-1:-1:-1;;;22585:134:2;;13489:2:4;22585:134:2::1;::::0;::::1;13471:21:4::0;13528:2;13508:18;;;13501:30;13567:34;13547:18;;;13540:62;-1:-1:-1;;;13618:18:4;;;13611:50;13678:19;;22585:134:2::1;13287:416:4::0;22585:134:2::1;-1:-1:-1::0;;22738:11:2::1;::::0;;;:4:::1;:11;::::0;;;;;;;:19;;;;;;;;;;:33;;-1:-1:-1;;22738:33:2::1;22767:4;22738:33:::0;;::::1;::::0;;22781:24;::::1;:32:::0;;;;22823:24:::1;::::0;::::1;:32:::0;22865:24:::1;::::0;::::1;:32:::0;;;;22907:24:::1;;:32:::0;22319:627::o;21283:306::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;21424:14:2::1;:32:::0;;-1:-1:-1;;21466:32:2;21424;::::1;;-1:-1:-1::0;;21466:32:2;;;;;21424::::1;21466::::0;::::1;;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;21550:32:2;21508;;::::1;;::::0;;;::::1;-1:-1:-1::0;;21550:32:2;;;;::::1;;::::0;;;::::1;;::::0;;21283:306::o;21599:225::-;1019:7:3;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;21669:16:2::1;::::0;;21652:14:::1;21695:20:::0;;;-1:-1:-1;21733:5:2;-1:-1:-1;;;;;21733:5:2::1;:14;21748:10;21760:34;21669:16:::0;21760:26:::1;:34::i;:::-;21733:62;::::0;-1:-1:-1;;;;;;21733:62:2::1;::::0;;;;;;-1:-1:-1;;;;;7485:32:4;;;21733:62:2::1;::::0;::::1;7467:51:4::0;7534:18;;;7527:34;7440:18;;21733:62:2::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21725:92;;;::::0;-1:-1:-1;;;21725:92:2;;9840:2:4;21725:92:2::1;::::0;::::1;9822:21:4::0;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9898:18:4;;;9891:47;9955:18;;21725:92:2::1;9638:341:4::0;21725:92:2::1;21642:182;21599:225::o:0;1855:198:3:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:3;666:10:0;1185:23:3;1177:68;;;;-1:-1:-1;;;1177:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;1943:22:3;::::1;1935:73;;;::::0;-1:-1:-1;;;1935:73:3;;13910:2:4;1935:73:3::1;::::0;::::1;13892:21:4::0;13949:2;13929:18;;;13922:30;13988:34;13968:18;;;13961:62;-1:-1:-1;;;14039:18:4;;;14032:36;14085:19;;1935:73:3::1;13708:402:4::0;1935:73:3::1;2018:28;2037:8;2018:18;:28::i;20626:431:2:-:0;20758:24;;-1:-1:-1;;;20758:24:2;;;;;160:25:4;;;20725:7:2;;;;20758:4;;:12;;133:18:4;;20758:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20806:25;;-1:-1:-1;;;20806:25:2;;;;;160::4;;;20744:38:2;;-1:-1:-1;20792:11:2;;20806:4;;:13;;133:18:4;;20806:25:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20792:39;-1:-1:-1;20841:22:2;20850:13;20792:39;20841:22;:::i;:::-;;;20885:2;20877:5;:10;;;20873:82;;;20903:9;20911:1;20903:9;;:::i;:::-;;-1:-1:-1;20934:10:2;20942:2;20934:5;:10;:::i;:::-;20926:18;;20873:82;20976:23;;-1:-1:-1;;;20976:23:2;;;;;160:25:4;;;20964:9:2;;20976:4;;:11;;133:18:4;;20976:23:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21016:34;;-1:-1:-1;;;21016:34:2;;14345:6:4;14333:19;;21016:34:2;;;14315:38:4;14401:4;14389:17;;;14369:18;;;14362:45;14443:17;;14423:18;;;14416:45;20964:35:2;;-1:-1:-1;21016:4:2;;:16;;14288:18:4;;21016:34:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21009:41;20626:431;-1:-1:-1;;;;;;20626:431:2:o;16923:1312::-;-1:-1:-1;;;;;17047:16:2;;;17007:7;17047:16;;;:6;:16;;;;;;;;17026:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17007:7;;17026:37;17007:7;;17110:36;;:19;:36::i;:::-;17082:64;;17165:13;17181:52;17212:5;17219:7;17228:4;17181:30;:52::i;:::-;17165:68;;17252:23;17278:62;17304:5;:15;;;17321:5;:18;;;17278:25;:62::i;:::-;17252:88;;17350:26;17379:36;17399:15;17379:19;:36::i;:::-;17350:65;-1:-1:-1;17446:1:2;17434:764;17451:5;:18;;;17448:21;;:1;:21;;;17434:764;;17489:18;17526:1;17510:7;:13;;;:17;;;;:::i;:::-;17562:12;;17489:38;;-1:-1:-1;17607:2:2;17592:17;;;;17588:122;;;17629:16;17644:1;17629:16;;:::i;:::-;;-1:-1:-1;17678:17:2;17693:2;17678:12;:17;:::i;:::-;17663:32;;17588:122;17724:11;17738:53;17745:12;17738:53;;17759:11;17738:53;;17772:5;:18;;;17738:6;:53::i;:::-;17724:67;;17873:8;:14;;;17857:30;;:12;:30;;;17853:179;;;17969:48;17986:5;17993:8;:12;;;17969:48;;18007:3;18012:4;17969:16;:48::i;:::-;17962:55;16923:1312;-1:-1:-1;;;;;;;;;;;16923:1312:2:o;17853:179::-;18119:68;18143:5;18150:3;18155:11;18168:12;18182:4;18119:23;:68::i;:::-;18111:76;;17475:723;;;17470:3;;;;;:::i;:::-;;;;17434:764;;;-1:-1:-1;18223:5:2;;16923:1312;-1:-1:-1;;;;;;16923:1312:2:o;13238:1406::-;-1:-1:-1;;;;;13365:16:2;;;13325:7;13365:16;;;:6;:16;;;;;;;;13344:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13325:7;;13344:37;13325:7;;13428:36;;:19;:36::i;:::-;13400:64;;13483:13;13499:53;13530:5;13537:7;13546:5;13499:30;:53::i;:::-;13483:69;;13571:23;13597:62;13623:5;:15;;;13640:5;:18;;;13597:25;:62::i;:::-;13571:88;;13669:26;13698:36;13718:15;13698:19;:36::i;:::-;13669:65;-1:-1:-1;13765:1:2;13753:820;13770:5;:18;;;13767:21;;:1;:21;;;13753:820;;13808:18;13845:1;13829:7;:13;;;:17;;;;:::i;:::-;13881:12;;13808:38;;-1:-1:-1;13926:2:2;13911:17;;;;13907:122;;;13948:16;13963:1;13948:16;;:::i;:::-;;-1:-1:-1;13997:17:2;14012:2;13997:12;:17;:::i;:::-;13982:32;;13907:122;14043:11;14057:53;14064:12;14057:53;;14078:11;14057:53;;14091:5;:18;;;14057:6;:53::i;:::-;14043:67;;14192:8;:14;;;14176:30;;:12;:30;;;14172:219;;;14290:63;14307:5;:19;;;14328:8;:12;;;14290:63;;14342:3;14347:5;14290:16;:63::i;:::-;14281:72;;;;:::i;:::-;;;14371:5;;;;;14172:219;14479:83;14503:5;:19;;;14524:3;14529:11;14542:12;14556:5;14479:23;:83::i;:::-;14470:92;;;;:::i;:::-;;;13794:779;;;13789:3;;;;;:::i;:::-;;;;13753:820;;;-1:-1:-1;14600:15:2;;;;14591:24;;;;:::i;:::-;;13238:1406;-1:-1:-1;;;;;;;13238:1406:2:o;10909:512::-;10995:4;11025:12;11077:1;11060:18;;;;11056:95;;;11125:15;11101:16;11114:3;11101:10;:16;:::i;:::-;:21;;11120:2;11101:21;:::i;:::-;:39;11094:46;;;;;11056:95;11164:13;:18;;11181:1;11164:18;11160:95;;;11229:15;11205:16;11218:3;11205:10;:16;:::i;:::-;:21;;11224:2;11205:21;:::i;11160:95::-;11268:13;:18;;11285:1;11268:18;11264:95;;;11333:15;11309:16;11322:3;11309:10;:16;:::i;:::-;:21;;11328:2;11309:21;:::i;11264:95::-;11399:15;11375:16;11388:3;11375:10;:16;:::i;:::-;:21;;11394:2;11375:21;:::i;:::-;:39;;10909:512;-1:-1:-1;;;;10909:512:2:o;10766:133::-;10842:7;10884:8;;10878:2;:14;;;;:::i;:::-;10868:24;;:7;:24;:::i;1322:1116::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;1512:18:2;1520:9;1512:7;:18::i;:::-;1502:28;;;;1573;384:4;1573:15;:28::i;:::-;1562:7;;1546:24;;;;:15;:24::i;:::-;:55;;;;:::i;:::-;1540:61;-1:-1:-1;1635:26:2;1540:61;339:8;1635:26;:::i;:::-;1612:49;;;;:::i;:::-;;;1737:3;384:4;1713:2;:7;;;:21;;;;:::i;:::-;:27;;;;;;:::i;:::-;1694:47;;288:8;1694:47;:::i;:::-;1671:70;;;;:::i;:::-;;;1769:19;1807:1;1803:5;;1798:329;1815:2;1810:1;:7;;;1798:329;;1876:26;1891:1;1894:2;:7;;;1876:14;:26::i;:::-;1859:43;;;;245:5;1859:43;:::i;:::-;1842:60;-1:-1:-1;1963:9:2;1924:36;1941:19;1842:60;1924:36;:::i;:::-;:48;1920:142;;;2000:12;;;:8;;;:12;2038:5;;1920:142;2079:37;2102:14;2079:37;;:::i;:::-;;-1:-1:-1;1819:3:2;;;;:::i;:::-;;;;1798:329;;;2161:1;2157:5;;2152:280;2169:33;2184:2;:8;;;2194:2;:7;;;2169:14;:33::i;:::-;2164:38;;:1;:38;;;2152:280;;2270:9;2231:36;2248:19;245:5;2231:36;:::i;:::-;:48;2227:140;;;2307:10;;;:6;;;:10;2343:5;;2227:140;2384:37;245:5;2384:37;;:::i;:::-;;-1:-1:-1;2204:3:2;;;;:::i;:::-;;;;2152:280;;;1402:1036;;;;1322:1116;;;:::o;11431:381::-;11580:7;11599:11;11613:57;11620:8;:14;;;11613:57;;11636:8;:13;;;11613:57;;11651:5;:18;;;11613:6;:57::i;:::-;11599:71;;11680:15;11710:8;:12;;;11698:9;:24;;;;:::i;:::-;11680:42;;11739:66;11756:5;:19;;;11777:9;11739:66;;11788:3;11793:11;11739:16;:66::i;:::-;11732:73;;;;11431:381;;;;;;;:::o;11818:439::-;12004:14;;;;12020:13;;11984:50;;-1:-1:-1;;;11984:50:2;;16663:4:4;16651:17;;;11984:50:2;;;16633:36:4;16717:6;16705:19;16685:18;;;16678:47;11947:7:2;;;;11984:4;;:19;;16606:18:4;;11984:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11966:68;;12044:11;12058:57;12065:8;:14;;;12058:57;;12081:8;:13;;;12058:57;;12096:5;:18;;;12058:6;:57::i;:::-;12044:71;;12125:15;12155:8;:12;;;12143:9;:24;;;;:::i;:::-;12125:42;;12184:66;12201:5;:19;;;12222:9;12184:66;;12233:3;12238:11;12184:16;:66::i;20249:170::-;20313:5;20341:4;20334:11;;:4;:11;;;20330:53;;;-1:-1:-1;20368:4:2;20361:11;;20330:53;-1:-1:-1;20408:4:2;20249:170;-1:-1:-1;20249:170:2:o;12574:575::-;12695:7;12718:11;12714:339;;;12765:11;12790:151;12808:2;12796:9;:14;12790:151;;;12884:9;12878:2;12862:11;:3;12868:5;12862:11;:::i;:::-;12861:19;;;;:::i;:::-;12845:36;;:12;:36;:::i;:::-;:48;;;;:::i;:::-;12830:63;-1:-1:-1;12911:15:2;12924:2;12911:15;;:::i;:::-;;;12790:151;;;13023:18;13032:9;13023:5;:18;:::i;:::-;13009:9;12993:11;:3;12999:5;12993:11;:::i;:::-;12992:26;;;;:::i;:::-;12976:43;;:12;:43;:::i;:::-;:66;;;;:::i;:::-;12961:81;;;12954:88;;;;;12714:339;13137:5;13131:3;13104:24;13119:9;13104:12;:24;:::i;:::-;:30;;;;:::i;:::-;:38;;;;:::i;:::-;13097:45;12574:575;-1:-1:-1;;;;;12574:575:2:o;12267:297::-;12445:34;;-1:-1:-1;;;12445:34:2;;16663:4:4;16651:17;;12445:34:2;;;16633:36:4;16717:6;16705:19;;16685:18;;;16678:47;12406:7:2;;;;12445:4;;:19;;16606:18:4;;12445:34:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12425:54;;;;12496:61;12513:13;12528:9;12539:4;12545:11;12496:16;:61::i;2207:187:3:-;2280:16;2299:6;;-1:-1:-1;;;;;2315:17:3;;;-1:-1:-1;;;;;;2315:17:3;;;;;;2347:40;;2299:6;;;;;;;2347:40;;2280:16;2347:40;2270:124;2207:187;:::o;2444:823:2:-;2498:6;;;;2647:27;288:8;2647:9;:27;:::i;:::-;2633:41;;384:4;2633:41;:::i;:::-;2619:56;-1:-1:-1;2724:28:2;384:4;2724:15;:28::i;:::-;2700:21;2716:4;2700:21;;:15;:21::i;:::-;:52;;;;:::i;:::-;2685:67;-1:-1:-1;2786:35:2;2685:67;339:8;2786:35;:::i;:::-;2763:58;;;;:::i;:::-;;-1:-1:-1;2894:12:2;2873:18;384:4;2873;:18;:::i;:::-;:33;;;;;;:::i;:::-;2854:53;;288:8;2854:53;:::i;:::-;2831:76;;;;:::i;:::-;;;2918:322;2947:9;2925:19;:31;2918:322;;;2980:28;2998:8;3005:1;2998:4;:8;:::i;:::-;2980:10;:28::i;:::-;2976:227;;;3036:43;339:8;3036:43;;:::i;:::-;;;2976:227;;;3146:38;288:8;3146:38;;:::i;:::-;;;2976:227;3220:9;3228:1;3220:9;;:::i;:::-;;;2918:322;;;-1:-1:-1;3256:4:2;2444:823;-1:-1:-1;;;2444:823:2:o;699:140::-;756:4;772:9;780:1;772:9;;:::i;:::-;;-1:-1:-1;822:10:2;829:3;772:9;822:10;:::i;:::-;809;816:3;809:4;:10;:::i;:::-;798:8;805:1;798:4;:8;:::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;845:471::-;916:5;937;:10;;946:1;937:10;:24;;;;951:5;:10;;960:1;951:10;937:24;:38;;;;965:5;:10;;974:1;965:10;937:38;:52;;;;979:5;:10;;988:1;979:10;937:52;:66;;;;993:5;:10;;1002:1;993:10;937:66;:81;;;;1007:5;:11;;1016:2;1007:11;937:81;:96;;;;1022:5;:11;;1031:2;1022:11;937:96;933:377;;;-1:-1:-1;1060:2:2;1053:9;;933:377;1091:5;:10;;1100:1;1091:10;:24;;;;1105:5;:10;;1114:1;1105:10;1091:24;:38;;;;1119:5;:10;;1128:1;1119:10;1091:38;:53;;;;1133:5;:11;;1142:2;1133:11;1091:53;1087:223;;;-1:-1:-1;1171:2:2;1164:9;;1087:223;1202:16;1213:4;1202:10;:16::i;:::-;1198:112;;;-1:-1:-1;1245:2:2;1238:9;;1198:112;-1:-1:-1;1297:2:2;1290:9;;395:298;449:4;469:8;476:1;469:4;:8;:::i;:::-;:13;;;465:60;;-1:-1:-1;509:5:2;;395:298;-1:-1:-1;395:298:2:o;465:60::-;538:10;545:3;538:4;:10;:::i;:::-;:15;;;534:61;;-1:-1:-1;580:4:2;;395:298;-1:-1:-1;395:298:2:o;534:61::-;608:10;615:3;608:4;:10;:::i;:::-;:15;;;604:62;;-1:-1:-1;650:5:2;;395:298;-1:-1:-1;395:298:2:o;604:62::-;-1:-1:-1;682:4:2;;395:298;-1:-1:-1;395:298:2:o;196:131:4:-;-1:-1:-1;;;;;271:31:4;;261:42;;251:70;;317:1;314;307:12;332:315;400:6;408;461:2;449:9;440:7;436:23;432:32;429:52;;;477:1;474;467:12;429:52;516:9;503:23;535:31;560:5;535:31;:::i;:::-;585:5;637:2;622:18;;;;609:32;;-1:-1:-1;;;332:315:4:o;652:247::-;711:6;764:2;752:9;743:7;739:23;735:32;732:52;;;780:1;777;770:12;732:52;819:9;806:23;838:31;863:5;838:31;:::i;1569:114::-;1653:4;1646:5;1642:16;1635:5;1632:27;1622:55;;1673:1;1670;1663:12;1688:243;1745:6;1798:2;1786:9;1777:7;1773:23;1769:32;1766:52;;;1814:1;1811;1804:12;1766:52;1853:9;1840:23;1872:29;1895:5;1872:29;:::i;2201:118::-;2287:5;2280:13;2273:21;2266:5;2263:32;2253:60;;2309:1;2306;2299:12;2324:588;2405:6;2413;2421;2429;2482:3;2470:9;2461:7;2457:23;2453:33;2450:53;;;2499:1;2496;2489:12;2450:53;2535:9;2522:23;2512:33;;2595:2;2584:9;2580:18;2567:32;2608:29;2631:5;2608:29;:::i;:::-;2656:5;-1:-1:-1;2713:2:4;2698:18;;2685:32;2726:30;2685:32;2726:30;:::i;:::-;2775:7;-1:-1:-1;2834:2:4;2819:18;;2806:32;2847:33;2806:32;2847:33;:::i;:::-;2324:588;;;;-1:-1:-1;2324:588:4;;-1:-1:-1;;2324:588:4:o;2917:315::-;2985:6;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3098:9;3085:23;3075:33;;3158:2;3147:9;3143:18;3130:32;3171:31;3196:5;3171:31;:::i;:::-;3221:5;3211:15;;;2917:315;;;;;:::o;3445:385::-;3531:6;3539;3547;3555;3608:3;3596:9;3587:7;3583:23;3579:33;3576:53;;;3625:1;3622;3615:12;3576:53;-1:-1:-1;;3648:23:4;;;3718:2;3703:18;;3690:32;;-1:-1:-1;3769:2:4;3754:18;;3741:32;;3820:2;3805:18;3792:32;;-1:-1:-1;3445:385:4;-1:-1:-1;3445:385:4:o;3835:180::-;3894:6;3947:2;3935:9;3926:7;3922:23;3918:32;3915:52;;;3963:1;3960;3953:12;3915:52;-1:-1:-1;3986:23:4;;3835:180;-1:-1:-1;3835:180:4:o;4212:379::-;4287:6;4295;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4408:9;4395:23;4385:33;;4465:2;4454:9;4450:18;4437:32;4427:42;;4519:2;4508:9;4504:18;4491:32;4532:29;4555:5;4532:29;:::i;:::-;4580:5;4570:15;;;4212:379;;;;;:::o;4596:523::-;4700:6;4708;4716;4724;4732;4740;4793:3;4781:9;4772:7;4768:23;4764:33;4761:53;;;4810:1;4807;4800:12;4761:53;-1:-1:-1;;4833:23:4;;;4903:2;4888:18;;4875:32;;-1:-1:-1;4954:2:4;4939:18;;4926:32;;5005:2;4990:18;;4977:32;;-1:-1:-1;5056:3:4;5041:19;;5028:33;;-1:-1:-1;5108:3:4;5093:19;5080:33;;-1:-1:-1;4596:523:4;-1:-1:-1;4596:523:4:o;5124:647::-;5198:6;5206;5214;5222;5275:3;5263:9;5254:7;5250:23;5246:33;5243:53;;;5292:1;5289;5282:12;5243:53;5331:9;5318:23;5350:28;5372:5;5350:28;:::i;:::-;5397:5;-1:-1:-1;5454:2:4;5439:18;;5426:32;5467:30;5426:32;5467:30;:::i;:::-;5516:7;-1:-1:-1;5575:2:4;5560:18;;5547:32;5588:30;5547:32;5588:30;:::i;:::-;5637:7;-1:-1:-1;5696:2:4;5681:18;;5668:32;5709:30;5668:32;5709:30;:::i;6468:127::-;6529:10;6524:3;6520:20;6517:1;6510:31;6560:4;6557:1;6550:15;6584:4;6581:1;6574:15;6600:125;6640:4;6668:1;6665;6662:8;6659:34;;;6673:18;;:::i;:::-;-1:-1:-1;6710:9:4;;6600:125::o;6730:168::-;6770:7;6836:1;6832;6828:6;6824:14;6821:1;6818:21;6813:1;6806:9;6799:17;6795:45;6792:71;;;6843:18;;:::i;:::-;-1:-1:-1;6883:9:4;;6730:168::o;6903:127::-;6964:10;6959:3;6955:20;6952:1;6945:31;6995:4;6992:1;6985:15;7019:4;7016:1;7009:15;7035:120;7075:1;7101;7091:35;;7106:18;;:::i;:::-;-1:-1:-1;7140:9:4;;7035:120::o;7160:128::-;7200:3;7231:1;7227:6;7224:1;7221:13;7218:39;;;7237:18;;:::i;:::-;-1:-1:-1;7273:9:4;;7160:128::o;7572:245::-;7639:6;7692:2;7680:9;7671:7;7667:23;7663:32;7660:52;;;7708:1;7705;7698:12;7660:52;7740:9;7734:16;7759:28;7781:5;7759:28;:::i;8432:204::-;8470:3;8506:4;8503:1;8499:12;8538:4;8535:1;8531:12;8573:3;8567:4;8563:14;8558:3;8555:23;8552:49;;;8581:18;;:::i;:::-;8617:13;;8432:204;-1:-1:-1;;;8432:204:4:o;8641:224::-;8680:3;8708:6;8741:2;8738:1;8734:10;8771:2;8768:1;8764:10;8802:3;8798:2;8794:12;8789:3;8786:21;8783:47;;;8810:18;;:::i;:::-;8846:13;;8641:224;-1:-1:-1;;;;8641:224:4:o;8870:157::-;8900:1;8934:4;8931:1;8927:12;8958:3;8948:37;;8965:18;;:::i;:::-;9017:3;9010:4;9007:1;9003:12;8999:22;8994:27;;;8870:157;;;;:::o;9032:175::-;9069:3;9113:4;9106:5;9102:16;9142:4;9133:7;9130:17;9127:43;;;9150:18;;:::i;:::-;9199:1;9186:15;;9032:175;-1:-1:-1;;9032:175:4:o;9984:356::-;10186:2;10168:21;;;10205:18;;;10198:30;10264:34;10259:2;10244:18;;10237:62;10331:2;10316:18;;9984:356::o;12754:276::-;12823:6;12876:2;12864:9;12855:7;12851:23;12847:32;12844:52;;;12892:1;12889;12882:12;12844:52;12924:9;12918:16;12974:6;12967:5;12963:18;12956:5;12953:29;12943:57;;12996:1;12993;12986:12;13035:247;13103:6;13156:2;13144:9;13135:7;13131:23;13127:32;13124:52;;;13172:1;13169;13162:12;13124:52;13204:9;13198:16;13223:29;13246:5;13223:29;:::i;14472:184::-;14542:6;14595:2;14583:9;14574:7;14570:23;14566:32;14563:52;;;14611:1;14608;14601:12;14563:52;-1:-1:-1;14634:16:4;;14472:184;-1:-1:-1;14472:184:4:o;14661:422::-;14750:1;14793:5;14750:1;14807:270;14828:7;14818:8;14815:21;14807:270;;;14887:4;14883:1;14879:6;14875:17;14869:4;14866:27;14863:53;;;14896:18;;:::i;:::-;14946:7;14936:8;14932:22;14929:55;;;14966:16;;;;14929:55;15045:22;;;;15005:15;;;;14807:270;;;14811:3;14661:422;;;;;:::o;15088:806::-;15137:5;15167:8;15157:80;;-1:-1:-1;15208:1:4;15222:5;;15157:80;15256:4;15246:76;;-1:-1:-1;15293:1:4;15307:5;;15246:76;15338:4;15356:1;15351:59;;;;15424:1;15419:130;;;;15331:218;;15351:59;15381:1;15372:10;;15395:5;;;15419:130;15456:3;15446:8;15443:17;15440:43;;;15463:18;;:::i;:::-;-1:-1:-1;;15519:1:4;15505:16;;15534:5;;15331:218;;15633:2;15623:8;15620:16;15614:3;15608:4;15605:13;15601:36;15595:2;15585:8;15582:16;15577:2;15571:4;15568:12;15564:35;15561:77;15558:159;;;-1:-1:-1;15670:19:4;;;15702:5;;15558:159;15749:34;15774:8;15768:4;15749:34;:::i;:::-;15819:6;15815:1;15811:6;15807:19;15798:7;15795:32;15792:58;;;15830:18;;:::i;:::-;15868:20;;15088:806;-1:-1:-1;;;15088:806:4:o;15899:131::-;15959:5;15988:36;16015:8;16009:4;15988:36;:::i;16035:217::-;16074:4;16103:6;16159:10;;;;16129;;16181:12;;;16178:38;;;16196:18;;:::i;:::-;16233:13;;16035:217;-1:-1:-1;;;16035:217:4:o;16257:195::-;16295:4;16332;16329:1;16325:12;16364:4;16361:1;16357:12;16389:3;16384;16381:12;16378:38;;;16396:18;;:::i;:::-;16433:13;;;16257:195;-1:-1:-1;;;16257:195:4:o;16736:140::-;16794:5;16823:47;16864:4;16854:8;16850:19;16844:4;16823:47;:::i;16881:179::-;16912:1;16938:6;16971:2;16968:1;16964:10;16993:3;16983:37;;17000:18;;:::i;:::-;17038:10;;17034:20;;;;;16881:179;-1:-1:-1;;16881:179:4:o
Swarm Source
ipfs://fed1db0635b2f04cf43dad1bcaaaeb85f56dfa5fa5ea20b36f9c18b636fc81e6
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.