Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 45 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 14185839 | 1142 days ago | IN | 0 ETH | 0.03643471 | ||||
Unstake | 14185515 | 1142 days ago | IN | 0 ETH | 0.01125617 | ||||
Unstake | 14185083 | 1142 days ago | IN | 0 ETH | 0.00704762 | ||||
Unstake | 14184913 | 1142 days ago | IN | 0 ETH | 0.00746804 | ||||
Unstake | 14184308 | 1142 days ago | IN | 0 ETH | 0.00477222 | ||||
Unstake | 14184114 | 1142 days ago | IN | 0 ETH | 0.01324876 | ||||
Unstake | 14183938 | 1142 days ago | IN | 0 ETH | 0.01709258 | ||||
Unstake | 14183761 | 1142 days ago | IN | 0 ETH | 0.00760965 | ||||
Unstake | 14182361 | 1142 days ago | IN | 0 ETH | 0.02955809 | ||||
Unstake | 14181468 | 1142 days ago | IN | 0 ETH | 0.04592032 | ||||
Rebase | 14180127 | 1143 days ago | IN | 0 ETH | 0.03804881 | ||||
Rebase | 14180084 | 1143 days ago | IN | 0 ETH | 0.04689741 | ||||
Unstake | 14175450 | 1143 days ago | IN | 0 ETH | 0.00941187 | ||||
Unstake | 14175140 | 1143 days ago | IN | 0 ETH | 0.02579354 | ||||
Unstake | 14174712 | 1143 days ago | IN | 0 ETH | 0.01864335 | ||||
Rebase | 14173968 | 1143 days ago | IN | 0 ETH | 0.08348065 | ||||
Unstake | 14173417 | 1144 days ago | IN | 0 ETH | 0.02979149 | ||||
Unstake | 14173365 | 1144 days ago | IN | 0 ETH | 0.02828107 | ||||
Unstake | 14173042 | 1144 days ago | IN | 0 ETH | 0.01565105 | ||||
Unstake | 14171744 | 1144 days ago | IN | 0 ETH | 0.00899904 | ||||
Rebase | 14171741 | 1144 days ago | IN | 0 ETH | 0.01706525 | ||||
Unstake | 14170868 | 1144 days ago | IN | 0 ETH | 0.00664322 | ||||
Unstake Locked | 14169039 | 1144 days ago | IN | 0 ETH | 0.01100739 | ||||
Unstake | 14169035 | 1144 days ago | IN | 0 ETH | 0.01342455 | ||||
Unstake | 14168942 | 1144 days ago | IN | 0 ETH | 0.01115241 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SINStaking
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-07 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } library LowGasSafeMath { /// @notice Returns x + y, reverts if sum overflows uint256 /// @param x The augend /// @param y The addend /// @return z The sum of x and y function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x); } function add32(uint32 x, uint32 y) internal pure returns (uint32 z) { require((z = x + y) >= x); } /// @notice Returns x - y, reverts if underflows /// @param x The minuend /// @param y The subtrahend /// @return z The difference of x and y function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x); } function sub32(uint32 x, uint32 y) internal pure returns (uint32 z) { require((z = x - y) <= x); } /// @notice Returns x * y, reverts if overflows /// @param x The multiplicand /// @param y The multiplier /// @return z The product of x and y function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(x == 0 || (z = x * y) / x == y); } /// @notice Returns x + y, reverts if overflows or underflows /// @param x The augend /// @param y The addend /// @return z The sum of x and y function add(int256 x, int256 y) internal pure returns (int256 z) { require((z = x + y) >= x == (y >= 0)); } /// @notice Returns x - y, reverts if overflows or underflows /// @param x The minuend /// @param y The subtrahend /// @return z The difference of x and y function sub(int256 x, int256 y) internal pure returns (int256 z) { require((z = x - y) <= x == (y >= 0)); } } interface IERC20 { function decimals() external view returns (uint8); /** * @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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } library SafeERC20 { using LowGasSafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) .sub(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract OwnableData { address public owner; address public pendingOwner; } contract Ownable is OwnableData { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /// @notice `owner` defaults to msg.sender on construction. constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner. /// Can only be invoked by the current `owner`. /// @param newOwner Address of the new owner. /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`. /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise. function transferOwnership( address newOwner, bool direct, bool renounce ) public onlyOwner { if (direct) { // Checks require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } /// @notice Needs to be called by `pendingOwner` to claim ownership. function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } /// @notice Only allows the `owner` to execute the function. modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } } interface IsSIN is IERC20 { function rebase( uint256 sinProfit_, uint epoch_) external returns (uint256); function circulatingSupply() external view returns (uint256); function balanceOf(address who) external view override returns (uint256); function gonsForBalance( uint amount ) external view returns ( uint ); function balanceForGons( uint gons ) external view returns ( uint ); function index() external view returns ( uint ); } interface IWarmup { function retrieve( address staker_, uint amount_ ) external; } interface IDistributor { function distribute() external returns ( bool ); } contract SINStaking is Ownable { using SafeMath for uint256; using LowGasSafeMath for uint32; using SafeERC20 for IERC20; using SafeERC20 for IsSIN; IERC20 public immutable SIN; IsSIN public immutable sSIN; struct Epoch { uint number; uint distribute; uint32 length; uint32 endTime; } Epoch public epoch; IDistributor public distributor; uint public totalBonus; IWarmup public warmupContract; uint public warmupPeriod; enum LOCKUPS { NONE, MONTH1, MONTH3, MONTH6 } struct Lockup{ uint gonsWarmup; uint gonsAccount; uint initialDeposit; uint256 multiplier; uint256 lockTimestamp; } mapping( address => Lockup) public lockupInfo; uint internal month = 2629746; event LogStake(address indexed recipient, uint256 amount); event LogClaim(address indexed recipient, uint256 amount); event LogForfeit(address indexed recipient, uint256 memoAmount, uint256 timeAmount); event LogDepositLock(address indexed user, bool locked); event LogUnstake(address indexed recipient, uint256 amount); event LogRebase(uint256 distribute); event LogSetContract(CONTRACTS contractType, address indexed _contract); event LogWarmupPeriod(uint period); constructor ( address _SIN, address _sSIN, uint32 _epochLength, uint _firstEpochNumber, uint32 _firstEpochTime ) { require( _SIN != address(0) ); SIN = IERC20(_SIN); require( _sSIN != address(0) ); sSIN = IsSIN(_sSIN); epoch = Epoch({ length: _epochLength, number: _firstEpochNumber, endTime: _firstEpochTime, distribute: 0 }); } struct Claim { uint deposit; uint gons; uint expiry; bool lock; // prevents malicious delays } mapping( address => Claim ) public warmupInfo; /** @notice stake SIN to enter warmup @param _amount uint @return bool */ function stake( uint _amount, address _recipient, LOCKUPS _lockup ) external returns ( bool ) { rebase(); SIN.safeTransferFrom( msg.sender, address(this), _amount ); Claim memory info = warmupInfo[ _recipient ]; require( !info.lock, "Deposits for account are locked" ); warmupInfo[ _recipient ] = Claim ({ deposit: info.deposit.add( _amount ), gons: info.gons.add( sSIN.gonsForBalance( _amount ) ), expiry: epoch.number.add( warmupPeriod ), lock: false }); Lockup memory lock = lockupInfo[ _recipient ]; require(lock.multiplier == 0 || _lockup == LOCKUPS.NONE, "Account is already locked"); uint256 amountToTransfer = _amount; if( _lockup == LOCKUPS.MONTH1 ) { // 1 - 1.25 Multiplier lockupInfo[ _recipient ] = Lockup({ gonsWarmup: IsSIN( sSIN ).gonsForBalance( _amount.mul(25).div(100) ), gonsAccount: IsSIN( sSIN ).gonsForBalance( _amount ), initialDeposit: _amount, multiplier: 125, lockTimestamp: block.timestamp + month }); amountToTransfer = _amount.mul(125)/100; } if( _lockup == LOCKUPS.MONTH3 ) { // 2 - 1.5 Multiplier lockupInfo[ _recipient ] = Lockup({ gonsWarmup: IsSIN( sSIN ).gonsForBalance( _amount.mul(50).div(100) ), gonsAccount: IsSIN( sSIN ).gonsForBalance( _amount ), initialDeposit: _amount, multiplier: 150, lockTimestamp: block.timestamp + month*3 }); amountToTransfer = _amount.mul(150).div(100); } if( _lockup == LOCKUPS.MONTH6 ) { // 3 - 2 Multiplier lockupInfo[ _recipient ] = Lockup({ gonsWarmup: IsSIN( sSIN ).gonsForBalance( _amount ), gonsAccount: IsSIN( sSIN ).gonsForBalance( _amount ), initialDeposit: _amount, multiplier: 200, lockTimestamp: block.timestamp + month*6 }); amountToTransfer = _amount*2; } sSIN.safeTransfer( address(warmupContract), amountToTransfer ); emit LogStake(_recipient, _amount); return true; } /** @notice retrieve sSIN from warmup @param _recipient address */ function claim ( address _recipient ) external { Claim memory info = warmupInfo[ _recipient ]; if ( epoch.number >= info.expiry && info.expiry != 0 ) { delete warmupInfo[ _recipient ]; uint256 amount = sSIN.balanceForGons( info.gons ); warmupContract.retrieve( _recipient, amount); emit LogClaim(_recipient, amount); } } /** @notice forfeit sSIN in warmup and retrieve SIN */ function forfeit() external { Claim memory info = warmupInfo[ msg.sender ]; delete warmupInfo[ msg.sender ]; uint memoBalance = sSIN.balanceForGons( info.gons ); warmupContract.retrieve( address(this), memoBalance); SIN.safeTransfer( msg.sender, info.deposit); emit LogForfeit(msg.sender, memoBalance, info.deposit); } /** @notice prevent new deposits to address (protection from malicious activity) */ function toggleDepositLock() external { warmupInfo[ msg.sender ].lock = !warmupInfo[ msg.sender ].lock; emit LogDepositLock(msg.sender, warmupInfo[ msg.sender ].lock); } /** @notice redeem sSIN for SIN @param _amount uint @param _trigger bool */ function unstake( uint _amount, bool _trigger ) external { if ( _trigger ) { rebase(); } Lockup memory lock = lockupInfo[ msg.sender ]; require(sSIN.balanceOf(msg.sender) - _amount >= sSIN.balanceForGons( lock.gonsAccount ), "Not enough sSIN for lockup"); sSIN.safeTransferFrom( msg.sender, address(this), _amount ); SIN.safeTransfer( msg.sender, _amount ); emit LogUnstake(msg.sender, _amount); } function unstakeLocked(bool _trigger) external{ if (_trigger){ rebase(); } Lockup memory lock = lockupInfo[ msg.sender ]; if (lock.multiplier >0){ sSIN.safeTransferFrom( msg.sender, address(this), sSIN.balanceForGons( lock.gonsAccount )); warmupContract.retrieve( address(this), sSIN.balanceForGons( lock.gonsWarmup )); if (lock.lockTimestamp <= block.timestamp){ SIN.safeTransfer( msg.sender, sSIN.balanceForGons( lock.gonsWarmup + lock.gonsAccount )); } else{ SIN.safeTransfer( msg.sender, lock.initialDeposit ); } delete lockupInfo[ msg.sender ]; } } /** @notice returns the sSIN index, which tracks rebase growth @return uint */ function index() external view returns ( uint ) { return sSIN.index(); } /** @notice trigger rebase if epoch over */ function rebase() public { if( epoch.endTime <= uint32(block.timestamp) ) { sSIN.rebase( epoch.distribute, epoch.number ); epoch.endTime = epoch.endTime.add32( epoch.length ); epoch.number++; if ( address(distributor) != address(0) ) { distributor.distribute(); } uint balance = contractBalance(); uint staked = sSIN.circulatingSupply(); if( balance <= staked ) { epoch.distribute = 0; } else { epoch.distribute = balance.sub( staked ); } emit LogRebase(epoch.distribute); } } /** @notice returns contract SIN holdings, including bonuses provided @return uint */ function contractBalance() public view returns ( uint ) { return SIN.balanceOf( address(this) ).add( totalBonus ); } enum CONTRACTS { DISTRIBUTOR, WARMUP } /** @notice sets the contract address for LP staking @param _contract address */ function setContract( CONTRACTS _contract, address _address ) external onlyOwner { if( _contract == CONTRACTS.DISTRIBUTOR ) { // 0 distributor = IDistributor(_address); } else if ( _contract == CONTRACTS.WARMUP ) { // 1 require( address(warmupContract) == address( 0 ), "Warmup cannot be set more than once" ); warmupContract = IWarmup(_address); } emit LogSetContract(_contract, _address); } /** * @notice set warmup period in epoch's numbers for new stakers * @param _warmupPeriod uint */ function setWarmup( uint _warmupPeriod ) external onlyOwner { warmupPeriod = _warmupPeriod; emit LogWarmupPeriod(_warmupPeriod); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_SIN","type":"address"},{"internalType":"address","name":"_sSIN","type":"address"},{"internalType":"uint32","name":"_epochLength","type":"uint32"},{"internalType":"uint256","name":"_firstEpochNumber","type":"uint256"},{"internalType":"uint32","name":"_firstEpochTime","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"locked","type":"bool"}],"name":"LogDepositLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"memoAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeAmount","type":"uint256"}],"name":"LogForfeit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"distribute","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum SINStaking.CONTRACTS","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"address","name":"_contract","type":"address"}],"name":"LogSetContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"LogWarmupPeriod","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"},{"inputs":[],"name":"SIN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract IDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"distribute","type":"uint256"},{"internalType":"uint32","name":"length","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forfeit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockupInfo","outputs":[{"internalType":"uint256","name":"gonsWarmup","type":"uint256"},{"internalType":"uint256","name":"gonsAccount","type":"uint256"},{"internalType":"uint256","name":"initialDeposit","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"lockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sSIN","outputs":[{"internalType":"contract IsSIN","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum SINStaking.CONTRACTS","name":"_contract","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warmupPeriod","type":"uint256"}],"name":"setWarmup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"enum SINStaking.LOCKUPS","name":"_lockup","type":"uint8"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleDepositLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_trigger","type":"bool"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_trigger","type":"bool"}],"name":"unstakeLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"warmupContract","outputs":[{"internalType":"contract IWarmup","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"warmupInfo","outputs":[{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"gons","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warmupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405262282072600a5534801561001757600080fd5b506040516200300d3803806200300d833981810160405260a081101561003c57600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b03191633908117825593519596949592949391927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b0385166100ac57600080fd5b6001600160601b0319606086901b166080526001600160a01b0384166100d157600080fd5b6001600160601b0319606094851b1660a0526040805160808101825283815260006020820181905263ffffffff95861692820183905292909416939094018390526002919091556003556004805464010000000090920263ffffffff60201b1963ffffffff19909316909317919091169190911790555060805160601c60a05160601c612e19620001f4600039806107ae52806109095280610c535280610eb45280610f9e52806110cb52806111af52806112ca52806113b452806114bc52806119465280611a115280611b0c5280611bb25280611bf65280611dd1528061202f52806120e55280612165528061227652806124cd525080610b3652806117485280611b4e5280611eda5280612332528061237e52806126015250612e196000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80639ebea88c116100e3578063c9f464ff1161008c578063e30c397811610066578063e30c397814610488578063ed4acaa814610490578063f3d86e4a1461049857610198565b8063c9f464ff14610444578063cc7d56e814610461578063deac361a1461048057610198565b8063af14052c116100bd578063af14052c1461042c578063bfe1092814610434578063c7cda4b21461043c57610198565b80639ebea88c146103f7578063a5401f181461041c578063a8dd07dc1461042457610198565b8063686a9679116101455780638da5cb5b1161011f5780638da5cb5b1461038a5780638f077b83146103bb578063900cf0cf146103c357610198565b8063686a9679146102f0578063865e6fd3146103465780638b7afe2e1461038257610198565b80634e09e617116101765780634e09e6171461022f5780634e71e0c81461028d5780636746f4c21461029557610198565b8063078dfbe71461019d5780631e83409a146101e25780632986c0e514610215575b600080fd5b6101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101351515906040013515156104a0565b005b6101e0600480360360208110156101f857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610695565b61021d610905565b60408051918252519081900360200190f35b6102626004803603602081101561024557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661099e565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101e06109cd565b6102c8600480360360208110156102ab57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ae8565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b6103326004803603606081101561030657600080fd5b50803590602081013573ffffffffffffffffffffffffffffffffffffffff16906040013560ff16610b12565b604080519115158252519081900360200190f35b6101e06004803603604081101561035c57600080fd5b50803560ff16906020013573ffffffffffffffffffffffffffffffffffffffff1661153e565b61021d61173e565b610392611804565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e0611820565b6103cb61189c565b60408051948552602085019390935263ffffffff91821684840152166060830152519081900360800190f35b6101e06004803603604081101561040d57600080fd5b508035906020013515156118ba565b610392611bb0565b61021d611bd4565b6101e0611bda565b610392611ebc565b610392611ed8565b6101e06004803603602081101561045a57600080fd5b5035611efc565b6101e06004803603602081101561047757600080fd5b50351515611fbd565b61021d6123d5565b6103926123db565b6103926123f7565b6101e0612413565b60005473ffffffffffffffffffffffffffffffffffffffff16331461052657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811561064f5773ffffffffffffffffffffffffffffffffffffffff831615158061054d5750805b6105b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549091169055610690565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b61069d612d1c565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028082015493830184905260039091015460ff16151560608301525490911180159061070f5750604081015115155b156109015773ffffffffffffffffffffffffffffffffffffffff8083166000908152600b60209081526040808320838155600181018490556002810184905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558482015181517f7965d56d0000000000000000000000000000000000000000000000000000000081526004810191909152905192937f00000000000000000000000000000000000000000000000000000000000000001692637965d56d92602480840193919291829003018186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d602081101561081c57600080fd5b5051600754604080517fc3a2a66500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201859052915193945091169163c3a2a6659160448082019260009290919082900301818387803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff871693507ffce6d5860f911bc27ece1365300332d2ddbe20c1adc46ee2eddd8f72c48053b292509081900360200190a2505b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561096d57600080fd5b505afa158015610981573d6000803e3d6000fd5b505050506040513d602081101561099757600080fd5b5051905090565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b60015473ffffffffffffffffffffffffffffffffffffffff16338114610a5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b600b6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6000610b1c611bda565b610b5e73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308761266c565b610b66612d1c565b5073ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161580156060830152610c3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4465706f7369747320666f72206163636f756e7420617265206c6f636b656400604482015290519081900360640190fd5b604080516080810190915281518190610c499088612707565b8152602001610cf97f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631bd39674896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cc257600080fd5b505afa158015610cd6573d6000803e3d6000fd5b505050506040513d6020811015610cec57600080fd5b5051602085015190612707565b8152600854600254602090920191610d1091612707565b81526000602091820181905273ffffffffffffffffffffffffffffffffffffffff87168152600b8252604090819020835181559183015160018301558201516002820155606090910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055610d94612d46565b5073ffffffffffffffffffffffffffffffffffffffff8416600090815260096020908152604091829020825160a081018452815481526001820154928101929092526002810154928201929092526003820154606082018190526004909201546080820152901580610e1157506000846003811115610e0f57fe5b145b610e7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4163636f756e7420697320616c7265616479206c6f636b656400000000000000604482015290519081900360640190fd5b856001856003811115610e8b57fe5b1415611094576040805160a081019091528073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016631bd39674610eef6064610ee98d6019612784565b906127f7565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f2357600080fd5b505afa158015610f37573d6000803e3d6000fd5b505050506040513d6020811015610f4d57600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692631bd396749260248083019392829003018186803b158015610fe057600080fd5b505afa158015610ff4573d6000803e3d6000fd5b505050506040513d602081101561100a57600080fd5b5051815260208181018a9052607d6040808401829052600a54420160609485015273ffffffffffffffffffffffffffffffffffffffff8b16600090815260098452819020855181559285015160018401558401516002830155918301516003820155608090920151600490920191909155606490611089908990612784565b8161109057fe5b0490505b60028560038111156110a257fe5b14156112a9576040805160a081019091528073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016631bd396746111006064610ee98d6032612784565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692631bd396749260248083019392829003018186803b1580156111f157600080fd5b505afa158015611205573d6000803e3d6000fd5b505050506040513d602081101561121b57600080fd5b5051815260208181018a905260966040808401829052600a544260039182020160609586015273ffffffffffffffffffffffffffffffffffffffff8c166000908152600985528290208651815593860151600185015590850151600284015592840151928201929092556080909201516004909201919091556112a690606490610ee9908a90612784565b90505b60038560038111156112b757fe5b141561149e576040518060a001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631bd396748a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d602081101561136357600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692631bd396749260248083019392829003018186803b1580156113f657600080fd5b505afa15801561140a573d6000803e3d6000fd5b505050506040513d602081101561142057600080fd5b5051815260208082018a905260c8604080840191909152600a54600602420160609384015273ffffffffffffffffffffffffffffffffffffffff8a1660009081526009835281902084518155918401516001830155830151600280830191909155918301516003820155608090920151600490920191909155870290505b6007546114e59073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911683612839565b60408051888152905173ffffffffffffffffffffffffffffffffffffffff8816917f3dbdcfd4c1f2e08931aae3d544e149a1e643143f5234d166fe3debb783388495919081900360200190a25060019695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008260018111156115d257fe5b141561161d57600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556116e1565b600182600181111561162b57fe5b14156116e15760075473ffffffffffffffffffffffffffffffffffffffff16156116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612d766023913960400191505060405180910390fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b8073ffffffffffffffffffffffffffffffffffffffff167f74a3f47ee8c75a3912be4eeb0120ef2a7e6d7dfb822ea75f3f3843a3d366ae78836040518082600181111561172a57fe5b815260200191505060405180910390a25050565b60006117ff6006547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117cd57600080fd5b505afa1580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b505190612707565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b336000818152600b602090815260409182902060030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff918216151791829055835191161515815291517f84980d6cdf0a9cada77d43f70d2d8419bd623f064919f2e227dbc39404866dc99281900390910190a2565b60025460035460045463ffffffff8082169164010000000090041684565b80156118c8576118c8611bda565b6118d0612d46565b5033600090815260096020908152604091829020825160a08101845281548152600182015481840181905260028301548286015260038301546060830152600492830154608083015284517f7965d56d0000000000000000000000000000000000000000000000000000000081529283015292517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1692637965d56d9260248082019391829003018186803b15801561199d57600080fd5b505afa1580156119b1573d6000803e3d6000fd5b505050506040513d60208110156119c757600080fd5b5051604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051859173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a5857600080fd5b505afa158015611a6c573d6000803e3d6000fd5b505050506040513d6020811015611a8257600080fd5b5051031015611af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f7420656e6f756768207353494e20666f72206c6f636b7570000000000000604482015290519081900360640190fd5b611b3473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308661266c565b611b7573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163385612839565b60408051848152905133917faf14da4c9c7eeb91ef462950405340d31988005c789d867d3a1394f082105e89919081900360200190a2505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b60045463ffffffff4281166401000000009092041611611eba577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663058ecdb46002600101546002600001546040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b505050506040513d6020811015611ca357600080fd5b5050600454611cc59063ffffffff64010000000082048116918116906128c616565b6004805463ffffffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117905560028054600101905560055473ffffffffffffffffffffffffffffffffffffffff1615611dc157600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611d9457600080fd5b505af1158015611da8573d6000803e3d6000fd5b505050506040513d6020811015611dbe57600080fd5b50505b6000611dcb61173e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639358928b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d6020811015611e5f57600080fd5b50519050808211611e74576000600355611e82565b611e7e82826128df565b6003555b60035460408051918252517f60633057fb2c2558942a126acc1dc7c639b6fdee660a0171f7500e2ac5918b2e9181900360200190a150505b565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f8257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60088190556040805182815290517f0538aaeb1d9d528cb5e132864d95d2d7350a7a3879a90d0ce93164557c22ed319181900360200190a150565b8015611fcb57611fcb611bda565b611fd3612d46565b5033600090815260096020908152604091829020825160a08101845281548152600182015492810192909252600281015492820192909252600382015460608201819052600490920154608082015290156109015761210d33307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637965d56d85602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692919061266c565b6007548151604080517f7965d56d00000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9283169263c3a2a6659230927f000000000000000000000000000000000000000000000000000000000000000090921691637965d56d91602480820192602092909190829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602483019190915251604480830192600092919082900301818387803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050504281608001511161235e57612359337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637965d56d84602001518560000151016040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122ef57600080fd5b505afa158015612303573d6000803e3d6000fd5b505050506040513d602081101561231957600080fd5b505173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612839565b6123a6565b60408101516123a69073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016903390612839565b336000908152600960205260408120818155600181018290556002810182905560038101829055600401555050565b60085481565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b61241b612d1c565b50336000818152600b602081815260408084208151608081018352815481526001820180548286019081526002840180548487015260038501805460ff8116151560608701529a8a529787529388905590879055918690557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909616909355915182517f7965d56d000000000000000000000000000000000000000000000000000000008152600481019190915291517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1692637965d56d926024808301939192829003018186803b15801561252557600080fd5b505afa158015612539573d6000803e3d6000fd5b505050506040513d602081101561254f57600080fd5b5051600754604080517fc3a2a66500000000000000000000000000000000000000000000000000000000815230600482015260248101849052905192935073ffffffffffffffffffffffffffffffffffffffff9091169163c3a2a6659160448082019260009290919082900301818387803b1580156125cd57600080fd5b505af11580156125e1573d6000803e3d6000fd5b5050835161262a925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691503390612839565b8151604080518381526020810192909252805133927fed3bd88323251a29d30eb9552dda9f85957286ace369047d9b59ecccd4939e1292908290030190a25050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612701908590612921565b50505050565b60008282018381101561277b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826127935750600061277e565b828202828482816127a057fe5b041461277b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612d996021913960400191505060405180910390fd5b600061277b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129f9565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610690908490612921565b80820163ffffffff808416908216101561277e57600080fd5b600061277b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acc565b6060612983826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b409092919063ffffffff16565b805190915015610690578080602001905160208110156129a257600080fd5b5051610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612dba602a913960400191505060405180910390fd5b60008183612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a64578181015183820152602001612a4c565b50505050905090810190601f168015612a915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612aab57fe5b049050838581612ab757fe5b06818502018514612ac457fe5b949350505050565b60008184841115612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612a64578181015183820152602001612a4c565b505050900390565b6060612ac484846000856060612b5585612d16565b612bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612c2a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bed565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612c8c576040519150601f19603f3d011682016040523d82523d6000602084013e612c91565b606091505b50915091508115612ca5579150612ac49050565b805115612cb55780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152865160248401528651879391928392604401919085019080838360008315612a64578181015183820152602001612a4c565b3b151590565b60405180608001604052806000815260200160008152602001600081526020016000151581525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe5761726d75702063616e6e6f7420626520736574206d6f7265207468616e206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220535b2c7e1ec6bdbbd13f9425d60c684e9f722d877c32a10800507d09bb2e99b264736f6c63430007050033000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe53159042000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000062016c30
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101985760003560e01c80639ebea88c116100e3578063c9f464ff1161008c578063e30c397811610066578063e30c397814610488578063ed4acaa814610490578063f3d86e4a1461049857610198565b8063c9f464ff14610444578063cc7d56e814610461578063deac361a1461048057610198565b8063af14052c116100bd578063af14052c1461042c578063bfe1092814610434578063c7cda4b21461043c57610198565b80639ebea88c146103f7578063a5401f181461041c578063a8dd07dc1461042457610198565b8063686a9679116101455780638da5cb5b1161011f5780638da5cb5b1461038a5780638f077b83146103bb578063900cf0cf146103c357610198565b8063686a9679146102f0578063865e6fd3146103465780638b7afe2e1461038257610198565b80634e09e617116101765780634e09e6171461022f5780634e71e0c81461028d5780636746f4c21461029557610198565b8063078dfbe71461019d5780631e83409a146101e25780632986c0e514610215575b600080fd5b6101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101351515906040013515156104a0565b005b6101e0600480360360208110156101f857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610695565b61021d610905565b60408051918252519081900360200190f35b6102626004803603602081101561024557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661099e565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101e06109cd565b6102c8600480360360208110156102ab57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ae8565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b6103326004803603606081101561030657600080fd5b50803590602081013573ffffffffffffffffffffffffffffffffffffffff16906040013560ff16610b12565b604080519115158252519081900360200190f35b6101e06004803603604081101561035c57600080fd5b50803560ff16906020013573ffffffffffffffffffffffffffffffffffffffff1661153e565b61021d61173e565b610392611804565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e0611820565b6103cb61189c565b60408051948552602085019390935263ffffffff91821684840152166060830152519081900360800190f35b6101e06004803603604081101561040d57600080fd5b508035906020013515156118ba565b610392611bb0565b61021d611bd4565b6101e0611bda565b610392611ebc565b610392611ed8565b6101e06004803603602081101561045a57600080fd5b5035611efc565b6101e06004803603602081101561047757600080fd5b50351515611fbd565b61021d6123d5565b6103926123db565b6103926123f7565b6101e0612413565b60005473ffffffffffffffffffffffffffffffffffffffff16331461052657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811561064f5773ffffffffffffffffffffffffffffffffffffffff831615158061054d5750805b6105b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549091169055610690565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b61069d612d1c565b5073ffffffffffffffffffffffffffffffffffffffff81166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028082015493830184905260039091015460ff16151560608301525490911180159061070f5750604081015115155b156109015773ffffffffffffffffffffffffffffffffffffffff8083166000908152600b60209081526040808320838155600181018490556002810184905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558482015181517f7965d56d0000000000000000000000000000000000000000000000000000000081526004810191909152905192937f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421692637965d56d92602480840193919291829003018186803b1580156107f257600080fd5b505afa158015610806573d6000803e3d6000fd5b505050506040513d602081101561081c57600080fd5b5051600754604080517fc3a2a66500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201859052915193945091169163c3a2a6659160448082019260009290919082900301818387803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505060408051848152905173ffffffffffffffffffffffffffffffffffffffff871693507ffce6d5860f911bc27ece1365300332d2ddbe20c1adc46ee2eddd8f72c48053b292509081900360200190a2505b5050565b60007f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561096d57600080fd5b505afa158015610981573d6000803e3d6000fd5b505050506040513d602081101561099757600080fd5b5051905090565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b60015473ffffffffffffffffffffffffffffffffffffffff16338114610a5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b600b6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b6000610b1c611bda565b610b5e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc1633308761266c565b610b66612d1c565b5073ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff161580156060830152610c3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4465706f7369747320666f72206163636f756e7420617265206c6f636b656400604482015290519081900360640190fd5b604080516080810190915281518190610c499088612707565b8152602001610cf97f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16631bd39674896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cc257600080fd5b505afa158015610cd6573d6000803e3d6000fd5b505050506040513d6020811015610cec57600080fd5b5051602085015190612707565b8152600854600254602090920191610d1091612707565b81526000602091820181905273ffffffffffffffffffffffffffffffffffffffff87168152600b8252604090819020835181559183015160018301558201516002820155606090910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055610d94612d46565b5073ffffffffffffffffffffffffffffffffffffffff8416600090815260096020908152604091829020825160a081018452815481526001820154928101929092526002810154928201929092526003820154606082018190526004909201546080820152901580610e1157506000846003811115610e0f57fe5b145b610e7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4163636f756e7420697320616c7265616479206c6f636b656400000000000000604482015290519081900360640190fd5b856001856003811115610e8b57fe5b1415611094576040805160a081019091528073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904216631bd39674610eef6064610ee98d6019612784565b906127f7565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f2357600080fd5b505afa158015610f37573d6000803e3d6000fd5b505050506040513d6020811015610f4d57600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421692631bd396749260248083019392829003018186803b158015610fe057600080fd5b505afa158015610ff4573d6000803e3d6000fd5b505050506040513d602081101561100a57600080fd5b5051815260208181018a9052607d6040808401829052600a54420160609485015273ffffffffffffffffffffffffffffffffffffffff8b16600090815260098452819020855181559285015160018401558401516002830155918301516003820155608090920151600490920191909155606490611089908990612784565b8161109057fe5b0490505b60028560038111156110a257fe5b14156112a9576040805160a081019091528073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904216631bd396746111006064610ee98d6032612784565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421692631bd396749260248083019392829003018186803b1580156111f157600080fd5b505afa158015611205573d6000803e3d6000fd5b505050506040513d602081101561121b57600080fd5b5051815260208181018a905260966040808401829052600a544260039182020160609586015273ffffffffffffffffffffffffffffffffffffffff8c166000908152600985528290208651815593860151600185015590850151600284015592840151928201929092556080909201516004909201919091556112a690606490610ee9908a90612784565b90505b60038560038111156112b757fe5b141561149e576040518060a001604052807f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16631bd396748a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d602081101561136357600080fd5b50518152604080517f1bd39674000000000000000000000000000000000000000000000000000000008152600481018b9052905160209283019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421692631bd396749260248083019392829003018186803b1580156113f657600080fd5b505afa15801561140a573d6000803e3d6000fd5b505050506040513d602081101561142057600080fd5b5051815260208082018a905260c8604080840191909152600a54600602420160609384015273ffffffffffffffffffffffffffffffffffffffff8a1660009081526009835281902084518155918401516001830155830151600280830191909155918301516003820155608090920151600490920191909155870290505b6007546114e59073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590428116911683612839565b60408051888152905173ffffffffffffffffffffffffffffffffffffffff8816917f3dbdcfd4c1f2e08931aae3d544e149a1e643143f5234d166fe3debb783388495919081900360200190a25060019695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008260018111156115d257fe5b141561161d57600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556116e1565b600182600181111561162b57fe5b14156116e15760075473ffffffffffffffffffffffffffffffffffffffff16156116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612d766023913960400191505060405180910390fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b8073ffffffffffffffffffffffffffffffffffffffff167f74a3f47ee8c75a3912be4eeb0120ef2a7e6d7dfb822ea75f3f3843a3d366ae78836040518082600181111561172a57fe5b815260200191505060405180910390a25050565b60006117ff6006547f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117cd57600080fd5b505afa1580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b505190612707565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b336000818152600b602090815260409182902060030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff918216151791829055835191161515815291517f84980d6cdf0a9cada77d43f70d2d8419bd623f064919f2e227dbc39404866dc99281900390910190a2565b60025460035460045463ffffffff8082169164010000000090041684565b80156118c8576118c8611bda565b6118d0612d46565b5033600090815260096020908152604091829020825160a08101845281548152600182015481840181905260028301548286015260038301546060830152600492830154608083015284517f7965d56d0000000000000000000000000000000000000000000000000000000081529283015292517f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff1692637965d56d9260248082019391829003018186803b15801561199d57600080fd5b505afa1580156119b1573d6000803e3d6000fd5b505050506040513d60208110156119c757600080fd5b5051604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051859173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904216916370a0823191602480820192602092909190829003018186803b158015611a5857600080fd5b505afa158015611a6c573d6000803e3d6000fd5b505050506040513d6020811015611a8257600080fd5b5051031015611af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f7420656e6f756768207353494e20666f72206c6f636b7570000000000000604482015290519081900360640190fd5b611b3473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421633308661266c565b611b7573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc163385612839565b60408051848152905133917faf14da4c9c7eeb91ef462950405340d31988005c789d867d3a1394f082105e89919081900360200190a2505050565b7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904281565b60065481565b60045463ffffffff4281166401000000009092041611611eba577f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff1663058ecdb46002600101546002600001546040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b505050506040513d6020811015611ca357600080fd5b5050600454611cc59063ffffffff64010000000082048116918116906128c616565b6004805463ffffffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117905560028054600101905560055473ffffffffffffffffffffffffffffffffffffffff1615611dc157600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611d9457600080fd5b505af1158015611da8573d6000803e3d6000fd5b505050506040513d6020811015611dbe57600080fd5b50505b6000611dcb61173e565b905060007f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16639358928b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d6020811015611e5f57600080fd5b50519050808211611e74576000600355611e82565b611e7e82826128df565b6003555b60035460408051918252517f60633057fb2c2558942a126acc1dc7c639b6fdee660a0171f7500e2ac5918b2e9181900360200190a150505b565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc81565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f8257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60088190556040805182815290517f0538aaeb1d9d528cb5e132864d95d2d7350a7a3879a90d0ce93164557c22ed319181900360200190a150565b8015611fcb57611fcb611bda565b611fd3612d46565b5033600090815260096020908152604091829020825160a08101845281548152600182015492810192909252600281015492820192909252600382015460608201819052600490920154608082015290156109015761210d33307f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16637965d56d85602001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d60208110156120cc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe531590421692919061266c565b6007548151604080517f7965d56d00000000000000000000000000000000000000000000000000000000815260048101929092525173ffffffffffffffffffffffffffffffffffffffff9283169263c3a2a6659230927f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904290921691637965d56d91602480820192602092909190829003018186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d60208110156121d857600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602483019190915251604480830192600092919082900301818387803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050504281608001511161235e57612359337f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff16637965d56d84602001518560000151016040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122ef57600080fd5b505afa158015612303573d6000803e3d6000fd5b505050506040513d602081101561231957600080fd5b505173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc169190612839565b6123a6565b60408101516123a69073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc16903390612839565b336000908152600960205260408120818155600181018290556002810182905560038101829055600401555050565b60085481565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b61241b612d1c565b50336000818152600b602081815260408084208151608081018352815481526001820180548286019081526002840180548487015260038501805460ff8116151560608701529a8a529787529388905590879055918690557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909616909355915182517f7965d56d000000000000000000000000000000000000000000000000000000008152600481019190915291517f00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe5315904273ffffffffffffffffffffffffffffffffffffffff1692637965d56d926024808301939192829003018186803b15801561252557600080fd5b505afa158015612539573d6000803e3d6000fd5b505050506040513d602081101561254f57600080fd5b5051600754604080517fc3a2a66500000000000000000000000000000000000000000000000000000000815230600482015260248101849052905192935073ffffffffffffffffffffffffffffffffffffffff9091169163c3a2a6659160448082019260009290919082900301818387803b1580156125cd57600080fd5b505af11580156125e1573d6000803e3d6000fd5b5050835161262a925073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc1691503390612839565b8151604080518381526020810192909252805133927fed3bd88323251a29d30eb9552dda9f85957286ace369047d9b59ecccd4939e1292908290030190a25050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612701908590612921565b50505050565b60008282018381101561277b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826127935750600061277e565b828202828482816127a057fe5b041461277b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612d996021913960400191505060405180910390fd5b600061277b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129f9565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610690908490612921565b80820163ffffffff808416908216101561277e57600080fd5b600061277b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612acc565b6060612983826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b409092919063ffffffff16565b805190915015610690578080602001905160208110156129a257600080fd5b5051610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612dba602a913960400191505060405180910390fd5b60008183612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a64578181015183820152602001612a4c565b50505050905090810190601f168015612a915780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612aab57fe5b049050838581612ab757fe5b06818502018514612ac457fe5b949350505050565b60008184841115612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612a64578181015183820152602001612a4c565b505050900390565b6060612ac484846000856060612b5585612d16565b612bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612c2a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bed565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612c8c576040519150601f19603f3d011682016040523d82523d6000602084013e612c91565b606091505b50915091508115612ca5579150612ac49050565b805115612cb55780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152865160248401528651879391928392604401919085019080838360008315612a64578181015183820152602001612a4c565b3b151590565b60405180608001604052806000815260200160008152602001600081526020016000151581525090565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe5761726d75702063616e6e6f7420626520736574206d6f7265207468616e206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220535b2c7e1ec6bdbbd13f9425d60c684e9f722d877c32a10800507d09bb2e99b264736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe53159042000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000062016c30
-----Decoded View---------------
Arg [0] : _SIN (address): 0x804A4f2705f7BD08b1D84AE8698014A18C708DBc
Arg [1] : _sSIN (address): 0x64a9f1ac6Ae2d424ED0dCC6ce32Ae3fe53159042
Arg [2] : _epochLength (uint32): 28800
Arg [3] : _firstEpochNumber (uint256): 1
Arg [4] : _firstEpochTime (uint32): 1644260400
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000804a4f2705f7bd08b1d84ae8698014a18c708dbc
Arg [1] : 00000000000000000000000064a9f1ac6ae2d424ed0dcc6ce32ae3fe53159042
Arg [2] : 0000000000000000000000000000000000000000000000000000000000007080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000062016c30
Deployed Bytecode Sourcemap
22864:9377:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21081:506;;;;;;;;;;;;;;;;-1:-1:-1;21081:506:0;;;;;;;;;;;;;;;;;;:::i;:::-;;27548:405;;;;;;;;;;;;;;;;-1:-1:-1;27548:405:0;;;;:::i;30190:86::-;;;:::i;:::-;;;;;;;;;;;;;;;;23633:45;;;;;;;;;;;;;;;;-1:-1:-1;23633:45:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21669:340;;;:::i;24888:45::-;;;;;;;;;;;;;;;;-1:-1:-1;24888:45:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25054:2390;;;;;;;;;;;;;;;;-1:-1:-1;25054:2390:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31480:472;;;;;;;;;;;;;;;;-1:-1:-1;31480:472:0;;;;;;;;;;;:::i;31186:130::-;;;:::i;20246:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28526:192;;;:::i;23236:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28840:478;;;;;;;;;;;;;;;;-1:-1:-1;28840:478:0;;;;;;;;;:::i;23076:27::-;;;:::i;23307:22::-;;;:::i;30348:715::-;;;:::i;23263:31::-;;;:::i;23042:27::-;;;:::i;32085:153::-;;;;;;;;;;;;;;;;-1:-1:-1;32085:153:0;;:::i;29326:745::-;;;;;;;;;;;;;;;;-1:-1:-1;29326:745:0;;;;:::i;23378:24::-;;;:::i;20273:27::-;;;:::i;23342:29::-;;;:::i;28036:378::-;;;:::i;21081:506::-;22137:5;;;;22123:10;:19;22115:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21220:6:::1;21216:364;;;21274:22;::::0;::::1;::::0;::::1;::::0;:34:::1;;;21300:8;21274:34;21266:68;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21401:5;::::0;;21380:37:::1;::::0;::::1;::::0;;::::1;::::0;21401:5;::::1;::::0;21380:37:::1;::::0;::::1;21432:5;:16:::0;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;;21463:25;;;;::::1;::::0;;21216:364:::1;;;21545:12;:23:::0;;;::::1;;::::0;::::1;;::::0;;21216:364:::1;21081:506:::0;;;:::o;27548:405::-;27606:17;;:::i;:::-;-1:-1:-1;27626:24:0;;;;;;;:10;:24;;;;;;;;;27606:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27666:12;27606:44;;-1:-1:-1;27666:27:0;;;:47;;-1:-1:-1;27697:11:0;;;;:16;;27666:47;27661:285;;;27738:24;;;;;;;;:10;:24;;;;;;;;27731:31;;;;;;;;;;;;;;;;;;;;;;;27815:9;;;;27794:32;;;;;;;;;;;;;;27738:24;;27794:4;:19;;;;:32;;;;;27738:24;;27794:32;;;;;;:19;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27794:32:0;27841:14;;:45;;;;;;:14;:45;;;;;;;;;;;;;;;27794:32;;-1:-1:-1;27841:14:0;;;:23;;:45;;;;;:14;;:45;;;;;;;;:14;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27906:28:0;;;;;;;;;;;;-1:-1:-1;27906:28:0;;-1:-1:-1;27906:28:0;;;;;;;;27661:285;;27548:405;;:::o;30190:86::-;30231:4;30256;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30256:12:0;;-1:-1:-1;30190:86:0;:::o;23633:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21669:340::-;21737:12;;;;21789:10;:27;;21781:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21912:5;;;21891:42;;;;;;;21912:5;;;21891:42;;;21944:5;:21;;;;;;;;;;;;;;21976:25;;;;;;;21669:340::o;24888:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25054:2390::-;25141:4;25159:8;:6;:8::i;:::-;25188:58;:20;:3;:20;25210:10;25230:4;25237:7;25188:20;:58::i;:::-;25259:17;;:::i;:::-;-1:-1:-1;25279:24:0;;;;;;;:10;:24;;;;;;;;;25259:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25314:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25410:219;;;;;;;;;25441:12;;25410:219;;25441:27;;25459:7;25441:16;:27::i;:::-;25410:219;;;;25489:47;25504:4;:19;;;25525:7;25504:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25504:30:0;;25489:9;;;;:13;:47::i;:::-;25410:219;;25577:12;;25559:5;:12;25410:219;;;;;25559:32;;:16;:32::i;:::-;25410:219;;25612:5;25410:219;;;;;;;25383:24;;;;;:10;:24;;;;;;;:246;;;;;;;;25410:219;25383:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25650:18;;:::i;:::-;-1:-1:-1;25671:24:0;;;;;;;:10;:24;;;;;;;;;25650:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25714:20;;:47;;-1:-1:-1;25749:12:0;25738:7;:23;;;;;;;;;25714:47;25706:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25839:7;25874:14;25863:7;:25;;;;;;;;;25859:479;;;25958:314;;;;;;;;;;25996:28;26003:4;25996:28;;26026:24;26046:3;26026:15;:7;26038:2;26026:11;:15::i;:::-;:19;;:24::i;:::-;25996:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25996:56:0;25958:314;;26084:39;;;;;;;;;;;;;;25996:56;25958:314;;;;26084:28;26091:4;26084:28;;;;:39;;;;;25996:56;26084:39;;;;;:28;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26084:39:0;25958:314;;26084:39;25958:314;;;;;;26196:3;25958:314;;;;;;;26251:5;;26233:15;:23;25958:314;;;;;25931:24;;;-1:-1:-1;25931:24:0;;;:10;:24;;;;;:341;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26323:3;;26306:16;;26158:7;;26306:11;:16::i;:::-;:20;;;;;;26287:39;;25859:479;26363:14;26352:7;:25;;;;;;;;;26348:487;;;26446:316;;;;;;;;;;26484:28;26491:4;26484:28;;26514:24;26534:3;26514:15;:7;26526:2;26514:11;:15::i;:24::-;26484:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26484:56:0;26446:316;;26572:39;;;;;;;;;;;;;;26484:56;26446:316;;;;26572:28;26579:4;26572:28;;;;:39;;;;;26484:56;26572:39;;;;;:28;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26572:39:0;26446:316;;26572:39;26446:316;;;;;;26684:3;26446:316;;;;;;;26739:5;;26721:15;26745:1;26739:7;;;26721:25;26446:316;;;;;26419:24;;;-1:-1:-1;26419:24:0;;;:10;:24;;;;;:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26798:25;;26819:3;;26798:16;;26646:7;;26798:11;:16::i;:25::-;26779:44;;26348:487;26860:14;26849:7;:25;;;;;;;;;26845:450;;;26941:299;;;;;;;;26986:4;26979:28;;;27009:7;26979:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26979:39:0;26941:299;;27050:39;;;;;;;;;;;;;;26979;26941:299;;;;27050:28;27057:4;27050:28;;;;:39;;;;;26979;27050;;;;;:28;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27050:39:0;26941:299;;27050:39;26941:299;;;;;;27162:3;26941:299;;;;;;;;27217:5;;27223:1;27217:7;27199:15;:25;26941:299;;;;;26914:24;;;-1:-1:-1;26914:24:0;;;:10;:24;;;;;:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27274:9;;;-1:-1:-1;26845:450:0;27334:14;;27307:62;;27334:14;27307:4;:17;;;27334:14;27351:16;27307:17;:62::i;:::-;27385:29;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27432:4:0;;25054:2390;-1:-1:-1;;;;;;25054:2390:0:o;31480:472::-;22137:5;;;;22123:10;:19;22115:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31589:21:::1;31576:9;:34;;;;;;;;;31572:322;;;31633:11;:36:::0;;;::::1;;::::0;::::1;;::::0;;31572:322:::1;;;31705:16;31692:9;:29;;;;;;;;;31687:207;;;31761:14;::::0;31753:39:::1;31761:14;31753:39:::0;31744:89:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31848:14;:34:::0;;;::::1;;::::0;::::1;;::::0;;31687:207:::1;31935:8;31909:35;;;31924:9;31909:35;;;;;;;;;;;;;;;;;;;;;;;;;;31480:472:::0;;:::o;31186:130::-;31235:4;31260:48;31296:10;;31260:3;:13;;;31283:4;31260:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31260:30:0;;:34;:48::i;:::-;31253:55;;31186:130;:::o;20246:20::-;;;;;;:::o;28526:192::-;28620:10;28608:24;;;;:10;:24;;;;;;;;;:29;;;;28575:62;;;28608:29;;;;28607:30;28575:62;;;;;28653:57;;28680:29;;28653:57;;;;;;;;;;;;;;;;28526:192::o;23236:18::-;;;;;;;;;;;;;;;;;:::o;28840:478::-;28913:8;28908:51;;;28939:8;:6;:8::i;:::-;28969:18;;:::i;:::-;-1:-1:-1;29002:10:0;28990:24;;;;:10;:24;;;;;;;;;28969:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29073:39;;;;;;;;;;;:4;28990:24;29073:19;;;;:39;;;;;;;;;;;:19;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29073:39:0;29033:26;;;;;;29048:10;29033:26;;;;;;29062:7;;29033:14;:4;:14;;;;:26;;;;;29073:39;;29033:26;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29033:26:0;:36;:79;;29025:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29154:59;:21;:4;:21;29177:10;29197:4;29204:7;29154:21;:59::i;:::-;29224:39;:16;:3;:16;29242:10;29254:7;29224:16;:39::i;:::-;29279:31;;;;;;;;29290:10;;29279:31;;;;;;;;;;28840:478;;;:::o;23076:27::-;;;:::o;23307:22::-;;;;:::o;30348:715::-;30388:13;;:40;30412:15;30388:40;;:13;;;;;:40;30384:672;;30448:4;:11;;;30461:5;:16;;;30479:5;:12;;;30448:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30547:12:0;;30526:35;;30547:12;30526:13;;;;;;30547:12;;;30526:19;:35;:::i;:::-;30510:13;:51;;;;;;;;;;;;;;;;;;;:5;30576:14;;-1:-1:-1;30576:14:0;;;30632:11;;30624:34;30632:11;30624:34;30619:101;;30680:11;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30619:101:0;30736:12;30751:17;:15;:17::i;:::-;30736:32;;30783:11;30797:4;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30797:24:0;;-1:-1:-1;30842:17:0;;;30838:160;;30900:1;30881:16;:20;30838:160;;;30961:21;:7;30974:6;30961:11;:21::i;:::-;30942:16;:40;30838:160;31027:16;;31017:27;;;;;;;;;;;;;;;;30384:672;;;30348:715::o;23263:31::-;;;;;;:::o;23042:27::-;;;:::o;32085:153::-;22137:5;;;;22123:10;:19;22115:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32156:12:::1;:28:::0;;;32200:30:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;32085:153:::0;:::o;29326:745::-;29387:8;29383:48;;;29411:8;:6;:8::i;:::-;29441:18;;:::i;:::-;-1:-1:-1;29474:10:0;29462:24;;;;:10;:24;;;;;;;;;29441:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29501:18;29497:563;;29535:90;29558:10;29578:4;29585;:19;;;29606:4;:16;;;29585:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29585:39:0;29535:21;:4;:21;;:90;;:21;:90::i;:::-;29640:14;;29701:15;;29680:38;;;;;;;;;;;;;;29640:14;;;;;:23;;29673:4;;29680;:19;;;;;;:38;;;;;;;;;;;;;;;:19;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29680:38:0;29640:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29640:79:0;;;;;;;-1:-1:-1;29640:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29762:15;29740:4;:18;;;:37;29736:269;;29797:88;29815:10;29827:4;:19;;;29866:4;:16;;;29848:4;:15;;;:34;29827:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29827:57:0;29797:16;:3;:16;;:88;:16;:88::i;:::-;29736:269;;;29968:19;;;;29938:51;;:16;:3;:16;;29956:10;;29938:16;:51::i;:::-;30034:10;30022:24;;;;:10;:24;;;;;30015:31;;;;;;;;;;;;;;;;;;;;;;;;29326:745;;:::o;23378:24::-;;;;:::o;20273:27::-;;;;;;:::o;23342:29::-;;;;;;:::o;28036:378::-;28075:17;;:::i;:::-;-1:-1:-1;28107:10:0;28095:24;;;;:10;:24;;;;;;;;28075:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28137:24;;;;;;28130:31;;;;;;;;;;;;;;;;;;;28212:9;;28191:32;;;;;;;;;;;;;;:4;28095:24;28191:19;;;;:32;;;;;28095:24;;28191:32;;;;;:19;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28191:32:0;28234:14;;:53;;;;;;28267:4;28234:53;;;;;;;;;;;;28191:32;;-1:-1:-1;28234:14:0;;;;;:23;;:53;;;;;:14;;:53;;;;;;;;:14;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28328:12:0;;28298:43;;-1:-1:-1;28298:16:0;:3;:16;;-1:-1:-1;28316:10:0;;28298:16;:43::i;:::-;28393:12;;28357:49;;;;;;;;;;;;;;;28368:10;;28357:49;;;;;;;;;28036:378;;:::o;17325:205::-;17453:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17476:27;17453:68;;;17426:96;;17446:5;;17426:19;:96::i;:::-;17325:205;;;;:::o;336:181::-;394:7;426:5;;;450:6;;;;442:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;508:1;-1:-1:-1;336:181:0;;;;;:::o;1690:471::-;1748:7;1993:6;1989:47;;-1:-1:-1;2023:1:0;2016:8;;1989:47;2060:5;;;2064:1;2060;:5;:1;2084:5;;;;;:10;2076:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2637:132;2695:7;2722:39;2726:1;2729;2722:39;;;;;;;;;;;;;;;;;:3;:39::i;17140:177::-;17250:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17273:23;17250:58;;;17223:86;;17243:5;;17223:19;:86::i;3859:112::-;3951:5;;;3946:16;;;;;;;;;3938:25;;;;;800:136;858:7;885:43;889:1;892;885:43;;;;;;;;;;;;;;;;;:3;:43::i;19450:761::-;19874:23;19900:69;19928:4;19900:69;;;;;;;;;;;;;;;;;19908:5;19900:27;;;;:69;;;;;:::i;:::-;19984:17;;19874:95;;-1:-1:-1;19984:21:0;19980:224;;20126:10;20115:30;;;;;;;;;;;;;;;-1:-1:-1;20115:30:0;20107:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3265:275;3351:7;3386:12;3379:5;3371:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3410:9;3426:1;3422;:5;;;;;;3410:17;;3462:1;3458;:5;;;;;;3454:1;3450;:5;:13;3445:1;:18;3438:26;;;;3531:1;3265:275;-1:-1:-1;;;;3265:275:0:o;1239:192::-;1325:7;1361:12;1353:6;;;;1345:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1397:5:0;;;1239:192::o;10971:230::-;11108:12;11140:53;11163:6;11171:4;11177:1;11180:12;12818;12851:18;12862:6;12851:10;:18::i;:::-;12843:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12977:12;12991:23;13018:6;:11;;13038:8;13049:4;13018:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12976:78;;;;13069:7;13065:595;;;13100:10;-1:-1:-1;13093:17:0;;-1:-1:-1;13093:17:0;13065:595;13214:17;;:21;13210:439;;13477:10;13471:17;13538:15;13525:10;13521:2;13517:19;13510:44;13425:148;13613:20;;;;;;;;;;;;;;;;;;;;13620:12;;13613:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8460:422;8827:20;8866:8;;;8460:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://535b2c7e1ec6bdbbd13f9425d60c684e9f722d877c32a10800507d09bb2e99b2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 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.