Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 751 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 13492579 | 1583 days ago | IN | 0 ETH | 0.00391136 | ||||
| Withdraw | 13395987 | 1598 days ago | IN | 0 ETH | 0.00918986 | ||||
| Claim | 13265244 | 1619 days ago | IN | 0 ETH | 0.00246402 | ||||
| Withdraw | 13265244 | 1619 days ago | IN | 0 ETH | 0.00407106 | ||||
| Withdraw | 13220700 | 1625 days ago | IN | 0 ETH | 0.00308969 | ||||
| Claim | 13219577 | 1626 days ago | IN | 0 ETH | 0.00360091 | ||||
| Withdraw | 13207456 | 1627 days ago | IN | 0 ETH | 0.00377977 | ||||
| Claim | 13083420 | 1647 days ago | IN | 0 ETH | 0.00471334 | ||||
| Claim | 13080991 | 1647 days ago | IN | 0 ETH | 0.002197 | ||||
| Claim | 13067313 | 1649 days ago | IN | 0 ETH | 0.00119387 | ||||
| Claim | 13050362 | 1652 days ago | IN | 0 ETH | 0.00417145 | ||||
| Claim | 13050352 | 1652 days ago | IN | 0 ETH | 0.00422436 | ||||
| Withdraw | 13007797 | 1658 days ago | IN | 0 ETH | 0.00360463 | ||||
| Withdraw | 12991942 | 1661 days ago | IN | 0 ETH | 0.00552386 | ||||
| Withdraw | 12991942 | 1661 days ago | IN | 0 ETH | 0.00552386 | ||||
| Claim | 12991939 | 1661 days ago | IN | 0 ETH | 0.00332434 | ||||
| Claim | 12921257 | 1672 days ago | IN | 0 ETH | 0.00175416 | ||||
| Claim | 12780059 | 1694 days ago | IN | 0 ETH | 0.00147123 | ||||
| Claim | 12762789 | 1697 days ago | IN | 0 ETH | 0.00067903 | ||||
| Claim | 12645762 | 1715 days ago | IN | 0 ETH | 0.00090537 | ||||
| Withdraw | 12639804 | 1716 days ago | IN | 0 ETH | 0.00201821 | ||||
| Withdraw | 12596137 | 1723 days ago | IN | 0 ETH | 0.00192906 | ||||
| Claim | 12596130 | 1723 days ago | IN | 0 ETH | 0.00157478 | ||||
| Claim | 12573236 | 1726 days ago | IN | 0 ETH | 0.00074693 | ||||
| Claim | 12566061 | 1727 days ago | IN | 0 ETH | 0.00113172 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BlfiNftTokenStaking
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-03-04
*/
/**
*
* Market has owned you?
* Now you will own the market
*
* Loading blackfisk.ai
*
* .ooooooooooooooooooooooooooo+
.ooooooooooooooooooooooooooo+
.ooooooooooooooooooooooooooo+
.ooooooooooooooooooooooooooo+
:+++++++++oooooooooooooooooooooooooooo+++++++++`
/oooooooooooooooooooooooooooooooooooooooooooooo`
/oooooooooooooooooooooooooooooooooooooooooooooo`
/oooooooooooooooooooooooooooooooooooooooooooooo`
/oooooooooooooooooooooooooooooooooooooooooooooo.````````
/oooooooooooooooooooooooooooooooooooooooooooooooooooooo-
/oooooooooooooooooooooooooooooooooooooooooooooooooooooo-
/oooooooooooooooooooooooooooooooooooooooooooooooooooooo-
/oooooooooooooooooooooooooooooooooooooooooooooooooooooo-
.--------/ooooooooooooooooooooooooooooooooooooooooooooo-
.ooooooooooooooooooooooooo++++ooooooooo++++ooo-
.oooooooooooooooooooooooo+---:oooooooo+:--:+oo-
.oooooooooooooooooooooooo+----oooooooo+---:+oo-
.oooooooooooooooooooooooo+----oooooooo+---:+oo-
`````````````````/oooooo+::::oooooooo+:::/+oo-
:ooooooooooooooooooooooooooo-
:ooooooooooooooooooooooooooo-
:ooooooooooooooooooooooooooo-
``````````````````````````/ooooooooooooooooooooooooooo:`````````````````````````````
/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/
/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/
/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/
/oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/
/ooooooooo+::::::::ooooooooooooooooooooooooooo:::::::::/ooooooooo::::::::+ooooooooo/
/ooooooooo/ +oooooooooooooooooooooooooo` -oooooooo+ /ooooooooo/
/ooooooooo/ +oooooooooooooooooooooooooo` -oooooooo+ /ooooooooo/
/ooooooooo/ +oooooooooooooooooooooooooo` -oooooooo+ /ooooooooo/
......../ooooooooo+........ooooooooooooooooooooooooooo` -ooooooooo........+ooooooooo/........
ooooooooo-```````-ooooooooo.```````/oooooooooooooooooo` `````````.ooooooooo-```````-ooooooooo
ooooooooo- .ooooooooo` :oooooooooooooooooo` `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :oooooooooooooooooo` `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :oooooooooooooooooo` `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :ooooooooo+.......+/////////- `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :ooooooooo+ +ooooooooo: `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :ooooooooo+ +ooooooooo: `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :ooooooooo+ +ooooooooo: `ooooooooo. -ooooooooo
ooooooooo- .ooooooooo` :ooooooooo+ +ooooooooo: `ooooooooo. -ooooooooo
*/
pragma solidity ^0.6.0;
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
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;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
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) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {codehash := extcodehash(account)}
return (codehash != accountHash && codehash != 0x0);
}
/**
* @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} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
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).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* 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");
return _functionCallWithValue(target, data, value, 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);
}
}
}
}
library SafeERC20 {
using SafeMath 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, "SafeERC20: decreased allowance below zero");
_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");
}
}
}
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
// When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
// so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.
bytes32 lastvalue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastvalue;
// Update the index for the moved value
set._indexes[lastvalue] = toDeleteIndex + 1;
// All indexes are 1-based
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
require(set._values.length > index, "EnumerableSet: index out of bounds");
return set._values[index];
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(value)));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(value)));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint256(_at(set._inner, index)));
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this;
// silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
contract BlackFiskNFTToken is ERC20("BLFI-INK-Token", "INK"), Ownable {
uint256 public total = 10000;
constructor () public {
// mint tokens
_mint(msg.sender, total.mul(10 ** 18));
}
function mint(uint256 _amount) public onlyOwner {
require(totalSupply().add(_amount) <= total.mul(10 ** 18), "Supply reached");
_mint(msg.sender, _amount);
}
function burn(uint256 _amount) public {
_burn(msg.sender, _amount);
}
function burnFrom(address _from, uint256 _amount) public onlyOwner {
_burn(_from, _amount);
}
}
contract BlfiNftTokenStaking is Ownable {
/**
* Libs for safeErc-20 and SafeMath
*/
using SafeMath for uint256;
using SafeERC20 for IERC20;
/**
* Public structs
*/
/** Struct User */
struct User {
uint256 totalDeposited;
uint256 startDate;
uint256 lastTime;
}
/** Struct for Pool */
struct Pool {
uint256 totalSupplyLp;
IERC20 lpToken;
}
IERC20 public coin;
/** List of supported lp pools for staking */
Pool[] public pools;
/** HashMap of users that take part in staking */
mapping(uint256 => mapping(address => User)) public userInfo;
uint256 public timeLock = 15 days;
/**
* All events that uses in public transactions
*/
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
event Claim(address indexed user, uint256 indexed pid, uint256 amount);
// /** Creates first epoch and init contract */
constructor(IERC20 _coin) public {
coin = _coin;
}
function changeCoin(IERC20 _coin) public onlyOwner {
coin = _coin;
}
/** Method that used by user to deposit tokens.
* Check for reward if user deposited before than calculate and send them reward
* than transfer lp-tokens to contract and start staking
*/
function deposit(uint pid, uint256 amount) public {
User storage user = userInfo[pid][msg.sender];
require(amount.div(10 ** 18) >= 10, "Didn't reach minimal");
if (user.startDate == 0) {
user.startDate = block.timestamp;
user.lastTime = block.timestamp;
}
if (block.timestamp > (user.startDate + timeLock)) {
claim(pid);
// checking for rewards
}
user.totalDeposited = user.totalDeposited.add(amount);
pools[pid].totalSupplyLp = pools[pid].totalSupplyLp.add(amount);
pools[pid].lpToken.safeTransferFrom(address(msg.sender), address(this), amount);
emit Deposit(msg.sender, pid, amount);
}
/** Method that used by user to withdraw tokens.
* Check for reward if user deposited before than calculate and send them reward
* than transfer lp-tokens to user
*/
function withdraw(uint pid, uint256 amount) public {
User storage user = userInfo[pid][msg.sender];
require(user.totalDeposited >= amount, "BlfiNftTokenStaking: trying to withdraw more then are");
require(block.timestamp > (user.startDate + timeLock), "Cooldown for 15 days");
claim(pid);
// checking for rewards
user.totalDeposited = user.totalDeposited.sub(amount);
pools[pid].totalSupplyLp = pools[pid].totalSupplyLp.sub(amount);
pools[pid].lpToken.safeTransfer(address(msg.sender), amount);
emit Withdraw(msg.sender, pid, amount);
}
/** Emergency withdraw use only in case of emergency.
* Nullify all rewards and withdraw lp-tokens
*/
function emergencyWithdraw(uint pid) public {
User storage user = userInfo[pid][msg.sender];
require(block.timestamp > (user.startDate + timeLock), "Cooldown for 15 days");
uint amount = user.totalDeposited;
pools[pid].totalSupplyLp = pools[pid].totalSupplyLp.sub(amount);
pools[pid].lpToken.safeTransfer(address(msg.sender), amount);
user.totalDeposited = 0;
user.lastTime = 0;
emit EmergencyWithdraw(msg.sender, pid, amount);
}
/** Method that calculate user reward and withdraw it
* Calculate reward by missed epochs and withdraw eth
*/
function claim(uint pid) public {
User storage user = userInfo[pid][msg.sender];
require(block.timestamp > (user.startDate + timeLock), "Cooldown for 15 days");
uint amount = calcRewardWithoutPrecision(pid, msg.sender);
user.lastTime = block.timestamp;
safeCoinTransfer(msg.sender, amount.mul(10**18));
emit Claim(msg.sender, pid, amount.mul(10**18));
}
/**
* All admin functions
*/
/** add new lp-pool to staking (can be called from deployer) */
function add(IERC20 _lpToken) public onlyOwner {
pools.push(Pool({
lpToken : _lpToken,
totalSupplyLp : 0
}));
}
/** Emergency only. Withdraw eth from contract when something went wrong or for migration to new contract*/
function withdrawTokens(uint256 amount) public onlyOwner {
coin.transfer(msg.sender, amount);
}
/**
* View methods
*/
/** Return length of pools list */
function poolLength() external view returns (uint256) {
return pools.length;
}
function calcReward(uint pid, address user) public view returns (uint256){
User storage currentUser = userInfo[pid][user];
uint256 shares = currentUser.totalDeposited.div(10).div(10 ** 18);
uint price = getPricePerShare();
uint256 timeDifference = block.timestamp.sub(currentUser.lastTime);
uint256 reward = timeDifference.mul(10**18).div(price).mul(shares);
return reward;
}
function calcRewardWithoutPrecision(uint pid, address user) public view returns (uint256){
uint256 reward = calcReward(pid, user);
return reward.div(10 ** 18);
}
function getPricePerShare() public view returns (uint256){
return timeLock;
}
function safeCoinTransfer(address _to, uint256 _amount) internal {
uint256 bal = coin.balanceOf(address(this));
if (_amount > bal) {
coin.transfer(_to, bal);
} else {
coin.transfer(_to, _amount);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_coin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"calcReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"calcRewardWithoutPrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_coin","type":"address"}],"name":"changeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coin","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPricePerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint256","name":"totalSupplyLp","type":"uint256"},{"internalType":"contract IERC20","name":"lpToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"totalDeposited","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"lastTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526213c68060045534801561001757600080fd5b506040516123db3803806123db8339818101604052602081101561003a57600080fd5b8101908080519060200190929190505050600061005b61014060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610148565b600033905090565b612284806101576000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638543cc4d116100a2578063ac4afa3811610071578063ac4afa38146103e5578063d085835a14610444578063dfc6921d14610462578063e2bbb158146104c4578063f2fde38b146104fc57610116565b80638543cc4d1461029b57806385461f69146102df5780638da5cb5b1461034157806393f1a40b1461037557610116565b8063379607f5116100e9578063379607f5146101df5780633d68175c1461020d578063441a3e701461022b5780635312ea8e14610263578063715018a61461029157610116565b8063081e3eda1461011b5780630a3b0a4f1461013957806311df99951461017d578063315a095d146101b1575b600080fd5b610123610540565b6040518082815260200191505060405180910390f35b61017b6004803603602081101561014f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b005b6101856106c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd600480360360208110156101c757600080fd5b81019080803590602001909291905050506106e8565b005b61020b600480360360208110156101f557600080fd5b8101908080359060200190929190505050610882565b005b6102156109fc565b6040518082815260200191505060405180910390f35b6102616004803603604081101561024157600080fd5b810190808035906020019092919080359060200190929190505050610a06565b005b61028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610c6c565b005b610299610e6a565b005b6102dd600480360360208110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff0565b005b61032b600480360360408110156102f557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fc565b6040518082815260200191505060405180910390f35b6103496111ff565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c16004803603604081101561038b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611228565b60405180848152602001838152602001828152602001935050505060405180910390f35b610411600480360360208110156103fb57600080fd5b810190808035906020019092919050505061125f565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b61044c6112b0565b6040518082815260200191505060405180910390f35b6104ae6004803603604081101561047857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b6565b6040518082815260200191505060405180910390f35b6104fa600480360360408110156104da57600080fd5b8101908080359060200190929190803590602001909291905050506112e9565b005b61053e6004803603602081101561051257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611539565b005b6000600280549050905090565b610555611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026040518060400160405280600081526020018373ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106f0611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050506040513d602081101561086d57600080fd5b81019080805190602001909291905050505050565b60006003600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506004548160010154014211610953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b600061095f83336112b6565b905042826002018190555061098e33610989670de0b6b3a76400008461174c90919063ffffffff16565b6117d2565b823373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf76109e2670de0b6b3a76400008561174c90919063ffffffff16565b6040518082815260200191505060405180910390a3505050565b6000600454905090565b60006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015610ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061221a6035913960400191505060405180910390fd5b6004548160010154014211610b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b610b3d83610882565b610b54828260000154611a4b90919063ffffffff16565b8160000181905550610b8d8260028581548110610b6d57fe5b906000526020600020906002020160000154611a4b90919063ffffffff16565b60028481548110610b9a57fe5b906000526020600020906002020160000181905550610c18338360028681548110610bc157fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a959092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568846040518082815260200191505060405180910390a3505050565b60006003600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506004548160010154014211610d3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b600081600001549050610d778160028581548110610d5757fe5b906000526020600020906002020160000154611a4b90919063ffffffff16565b60028481548110610d8457fe5b906000526020600020906002020160000181905550610e02338260028681548110610dab57fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a959092919063ffffffff16565b6000826000018190555060008260020181905550823373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a3505050565b610e72611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ff8611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806003600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611185670de0b6b3a7640000611177600a8560000154611b3790919063ffffffff16565b611b3790919063ffffffff16565b905060006111916109fc565b905060006111ac846002015442611a4b90919063ffffffff16565b905060006111ef846111e1856111d3670de0b6b3a76400008761174c90919063ffffffff16565b611b3790919063ffffffff16565b61174c90919063ffffffff16565b9050809550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6002818154811061126c57fe5b90600052602060002090600202016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b60045481565b6000806112c384846110fc565b90506112e0670de0b6b3a764000082611b3790919063ffffffff16565b91505092915050565b60006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600a61135a670de0b6b3a764000084611b3790919063ffffffff16565b10156113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4469646e2774207265616368206d696e696d616c00000000000000000000000081525060200191505060405180910390fd5b6000816001015414156113ee574281600101819055504281600201819055505b6004548160010154014211156114085761140783610882565b5b61141f828260000154611b8190919063ffffffff16565b8160000181905550611458826002858154811061143857fe5b906000526020600020906002020160000154611b8190919063ffffffff16565b6002848154811061146557fe5b9060005260206000209060020201600001819055506114e53330846002878154811061148d57fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c09909392919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15846040518082815260200191505060405180910390a3505050565b611541611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611687576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121a96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60008083141561175f57600090506117cc565b600082840290508284828161177057fe5b04146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121cf6021913960400191505060405180910390fd5b809150505b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d602081101561188757600080fd5b810190808051906020019092919050505090508082111561197657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561193557600080fd5b505af1158015611949573d6000803e3d6000fd5b505050506040513d602081101561195f57600080fd5b810190808051906020019092919050505050611a46565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a0957600080fd5b505af1158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b8101908080519060200190929190505050505b505050565b6000611a8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cca565b905092915050565b611b328363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d8a565b505050565b6000611b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e79565b905092915050565b600080828401905083811015611bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611cc4846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d8a565b50505050565b6000838311158290611d77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d3c578082015181840152602081019050611d21565b50505050905090810190601f168015611d695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060611dec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f3f9092919063ffffffff16565b9050600081511115611e7457808060200190516020811015611e0d57600080fd5b8101908080519060200190929190505050611e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806121f0602a913960400191505060405180910390fd5b5b505050565b60008083118290611f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eea578082015181840152602081019050611ecf565b50505050905090810190601f168015611f175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f3157fe5b049050809150509392505050565b6060611f4e8484600085611f57565b90509392505050565b6060611f628561215d565b611fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106120245780518252602082019150602081019050602083039250612001565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612086576040519150601f19603f3d011682016040523d82523d6000602084013e61208b565b606091505b509150915081156120a0578092505050612155565b6000815111156120b35780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561211a5780820151818401526020810190506120ff565b50505050905090810190601f1680156121475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561219f57506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564426c66694e6674546f6b656e5374616b696e673a20747279696e6720746f207769746864726177206d6f7265207468656e20617265a2646970667358221220f0b69474f2e09141253e545d41d75e7fdc90567b8d062b41df9b6cd7cd01cebd64736f6c634300060c00330000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638543cc4d116100a2578063ac4afa3811610071578063ac4afa38146103e5578063d085835a14610444578063dfc6921d14610462578063e2bbb158146104c4578063f2fde38b146104fc57610116565b80638543cc4d1461029b57806385461f69146102df5780638da5cb5b1461034157806393f1a40b1461037557610116565b8063379607f5116100e9578063379607f5146101df5780633d68175c1461020d578063441a3e701461022b5780635312ea8e14610263578063715018a61461029157610116565b8063081e3eda1461011b5780630a3b0a4f1461013957806311df99951461017d578063315a095d146101b1575b600080fd5b610123610540565b6040518082815260200191505060405180910390f35b61017b6004803603602081101561014f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b005b6101856106c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101dd600480360360208110156101c757600080fd5b81019080803590602001909291905050506106e8565b005b61020b600480360360208110156101f557600080fd5b8101908080359060200190929190505050610882565b005b6102156109fc565b6040518082815260200191505060405180910390f35b6102616004803603604081101561024157600080fd5b810190808035906020019092919080359060200190929190505050610a06565b005b61028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610c6c565b005b610299610e6a565b005b6102dd600480360360208110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff0565b005b61032b600480360360408110156102f557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fc565b6040518082815260200191505060405180910390f35b6103496111ff565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103c16004803603604081101561038b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611228565b60405180848152602001838152602001828152602001935050505060405180910390f35b610411600480360360208110156103fb57600080fd5b810190808035906020019092919050505061125f565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b61044c6112b0565b6040518082815260200191505060405180910390f35b6104ae6004803603604081101561047857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b6565b6040518082815260200191505060405180910390f35b6104fa600480360360408110156104da57600080fd5b8101908080359060200190929190803590602001909291905050506112e9565b005b61053e6004803603602081101561051257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611539565b005b6000600280549050905090565b610555611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026040518060400160405280600081526020018373ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106f0611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050506040513d602081101561086d57600080fd5b81019080805190602001909291905050505050565b60006003600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506004548160010154014211610953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b600061095f83336112b6565b905042826002018190555061098e33610989670de0b6b3a76400008461174c90919063ffffffff16565b6117d2565b823373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf76109e2670de0b6b3a76400008561174c90919063ffffffff16565b6040518082815260200191505060405180910390a3505050565b6000600454905090565b60006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015610ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061221a6035913960400191505060405180910390fd5b6004548160010154014211610b34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b610b3d83610882565b610b54828260000154611a4b90919063ffffffff16565b8160000181905550610b8d8260028581548110610b6d57fe5b906000526020600020906002020160000154611a4b90919063ffffffff16565b60028481548110610b9a57fe5b906000526020600020906002020160000181905550610c18338360028681548110610bc157fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a959092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568846040518082815260200191505060405180910390a3505050565b60006003600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506004548160010154014211610d3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6f6c646f776e20666f72203135206461797300000000000000000000000081525060200191505060405180910390fd5b600081600001549050610d778160028581548110610d5757fe5b906000526020600020906002020160000154611a4b90919063ffffffff16565b60028481548110610d8457fe5b906000526020600020906002020160000181905550610e02338260028681548110610dab57fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a959092919063ffffffff16565b6000826000018190555060008260020181905550823373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a3505050565b610e72611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ff8611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806003600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611185670de0b6b3a7640000611177600a8560000154611b3790919063ffffffff16565b611b3790919063ffffffff16565b905060006111916109fc565b905060006111ac846002015442611a4b90919063ffffffff16565b905060006111ef846111e1856111d3670de0b6b3a76400008761174c90919063ffffffff16565b611b3790919063ffffffff16565b61174c90919063ffffffff16565b9050809550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6002818154811061126c57fe5b90600052602060002090600202016000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b60045481565b6000806112c384846110fc565b90506112e0670de0b6b3a764000082611b3790919063ffffffff16565b91505092915050565b60006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600a61135a670de0b6b3a764000084611b3790919063ffffffff16565b10156113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4469646e2774207265616368206d696e696d616c00000000000000000000000081525060200191505060405180910390fd5b6000816001015414156113ee574281600101819055504281600201819055505b6004548160010154014211156114085761140783610882565b5b61141f828260000154611b8190919063ffffffff16565b8160000181905550611458826002858154811061143857fe5b906000526020600020906002020160000154611b8190919063ffffffff16565b6002848154811061146557fe5b9060005260206000209060020201600001819055506114e53330846002878154811061148d57fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c09909392919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15846040518082815260200191505060405180910390a3505050565b611541611744565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611687576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121a96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60008083141561175f57600090506117cc565b600082840290508284828161177057fe5b04146117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121cf6021913960400191505060405180910390fd5b809150505b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d602081101561188757600080fd5b810190808051906020019092919050505090508082111561197657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561193557600080fd5b505af1158015611949573d6000803e3d6000fd5b505050506040513d602081101561195f57600080fd5b810190808051906020019092919050505050611a46565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611a0957600080fd5b505af1158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b8101908080519060200190929190505050505b505050565b6000611a8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cca565b905092915050565b611b328363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d8a565b505050565b6000611b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e79565b905092915050565b600080828401905083811015611bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611cc4846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d8a565b50505050565b6000838311158290611d77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d3c578082015181840152602081019050611d21565b50505050905090810190601f168015611d695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060611dec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f3f9092919063ffffffff16565b9050600081511115611e7457808060200190516020811015611e0d57600080fd5b8101908080519060200190929190505050611e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806121f0602a913960400191505060405180910390fd5b5b505050565b60008083118290611f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eea578082015181840152602081019050611ecf565b50505050905090810190601f168015611f175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f3157fe5b049050809150509392505050565b6060611f4e8484600085611f57565b90509392505050565b6060611f628561215d565b611fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106120245780518252602082019150602081019050602083039250612001565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612086576040519150601f19603f3d011682016040523d82523d6000602084013e61208b565b606091505b509150915081156120a0578092505050612155565b6000815111156120b35780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561211a5780820151818401526020810190506120ff565b50505050905090810190601f1680156121475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561219f57506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564426c66694e6674546f6b656e5374616b696e673a20747279696e6720746f207769746864726177206d6f7265207468656e20617265a2646970667358221220f0b69474f2e09141253e545d41d75e7fdc90567b8d062b41df9b6cd7cd01cebd64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _coin (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39705:6007:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44606:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44136:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40175:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44409:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43599:412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45344:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42200:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42955:510;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28810:148;;;:::i;:::-;;40968:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44706:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28168:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40332:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40251:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45152:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41265:741;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29113:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44606:92;44651:7;44678:5;:12;;;;44671:19;;44606:92;:::o;44136:152::-;28390:12;:10;:12::i;:::-;28380:22;;:6;;;;;;;;;;:22;;;28372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44194:5:::1;44205:74;;;;;;;;44266:1;44205:74;;;;44231:8;44205:74;;;;::::0;44194:86:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44136:152:::0;:::o;40175:18::-;;;;;;;;;;;;;:::o;44409:109::-;28390:12;:10;:12::i;:::-;28380:22;;:6;;;;;;;;;;:22;;;28372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44477:4:::1;;;;;;;;;;;:13;;;44491:10;44503:6;44477:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;44409:109:::0;:::o;43599:412::-;43642:17;43662:8;:13;43671:3;43662:13;;;;;;;;;;;:25;43676:10;43662:25;;;;;;;;;;;;;;;43642:45;;43742:8;;43725:4;:14;;;:25;43706:15;:45;43698:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43787:11;43801:43;43828:3;43833:10;43801:26;:43::i;:::-;43787:57;;43871:15;43855:4;:13;;:31;;;;43897:48;43914:10;43926:18;43937:6;43926;:10;;:18;;;;:::i;:::-;43897:16;:48::i;:::-;43979:3;43967:10;43961:42;;;43984:18;43995:6;43984;:10;;:18;;;;:::i;:::-;43961:42;;;;;;;;;;;;;;;;;;43599:412;;;:::o;45344:91::-;45393:7;45419:8;;45412:15;;45344:91;:::o;42200:628::-;42262:17;42282:8;:13;42291:3;42282:13;;;;;;;;;;;:25;42296:10;42282:25;;;;;;;;;;;;;;;42262:45;;42351:6;42328:4;:19;;;:29;;42320:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42470:8;;42453:4;:14;;;:25;42434:15;:45;42426:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42517:10;42523:3;42517:5;:10::i;:::-;42595:31;42619:6;42595:4;:19;;;:23;;:31;;;;:::i;:::-;42573:4;:19;;:53;;;;42664:36;42693:6;42664:5;42670:3;42664:10;;;;;;;;;;;;;;;;;;:24;;;:28;;:36;;;;:::i;:::-;42637:5;42643:3;42637:10;;;;;;;;;;;;;;;;;;:24;;:63;;;;42711:60;42751:10;42764:6;42711:5;42717:3;42711:10;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;:31;;;;:60;;;;;:::i;:::-;42808:3;42796:10;42787:33;;;42813:6;42787:33;;;;;;;;;;;;;;;;;;42200:628;;;:::o;42955:510::-;43010:17;43030:8;:13;43039:3;43030:13;;;;;;;;;;;:25;43044:10;43030:25;;;;;;;;;;;;;;;43010:45;;43110:8;;43093:4;:14;;;:25;43074:15;:45;43066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43157:11;43171:4;:19;;;43157:33;;43228:36;43257:6;43228:5;43234:3;43228:10;;;;;;;;;;;;;;;;;;:24;;;:28;;:36;;;;:::i;:::-;43201:5;43207:3;43201:10;;;;;;;;;;;;;;;;;;:24;;:63;;;;43275:60;43315:10;43328:6;43275:5;43281:3;43275:10;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;:31;;;;:60;;;;;:::i;:::-;43370:1;43348:4;:19;;:23;;;;43398:1;43382:4;:13;;:17;;;;43445:3;43433:10;43415:42;;;43450:6;43415:42;;;;;;;;;;;;;;;;;;42955:510;;;:::o;28810:148::-;28390:12;:10;:12::i;:::-;28380:22;;:6;;;;;;;;;;:22;;;28372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28917:1:::1;28880:40;;28901:6;::::0;::::1;;;;;;;;28880:40;;;;;;;;;;;;28948:1;28931:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;28810:148::o:0;40968:82::-;28390:12;:10;:12::i;:::-;28380:22;;:6;;;;;;;;;;:22;;;28372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41037:5:::1;41030:4;;:12;;;;;;;;;;;;;;;;;;40968:82:::0;:::o;44706:438::-;44771:7;44790:24;44817:8;:13;44826:3;44817:13;;;;;;;;;;;:19;44831:4;44817:19;;;;;;;;;;;;;;;44790:46;;44849:14;44866:48;44905:8;44866:34;44897:2;44866:11;:26;;;:30;;:34;;;;:::i;:::-;:38;;:48;;;;:::i;:::-;44849:65;;44927:10;44940:18;:16;:18::i;:::-;44927:31;;44969:22;44994:41;45014:11;:20;;;44994:15;:19;;:41;;;;:::i;:::-;44969:66;;45046:14;45063:49;45105:6;45063:37;45094:5;45063:26;45082:6;45063:14;:18;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;:41;;:49;;;;:::i;:::-;45046:66;;45130:6;45123:13;;;;;;;44706:438;;;;:::o;28168:79::-;28206:7;28233:6;;;;;;;;;;;28226:13;;28168:79;:::o;40332:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40251:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40401:33::-;;;;:::o;45152:184::-;45233:7;45252:14;45269:21;45280:3;45285:4;45269:10;:21::i;:::-;45252:38;;45308:20;45319:8;45308:6;:10;;:20;;;;:::i;:::-;45301:27;;;45152:184;;;;:::o;41265:741::-;41326:17;41346:8;:13;41355:3;41346:13;;;;;;;;;;;:25;41360:10;41346:25;;;;;;;;;;;;;;;41326:45;;41414:2;41390:20;41401:8;41390:6;:10;;:20;;;;:::i;:::-;:26;;41382:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41476:1;41458:4;:14;;;:19;41454:130;;;41511:15;41494:4;:14;;:32;;;;41557:15;41541:4;:13;;:31;;;;41454:130;41636:8;;41619:4;:14;;;:25;41600:15;:45;41596:125;;;41662:10;41668:3;41662:5;:10::i;:::-;41596:125;41753:31;41777:6;41753:4;:19;;;:23;;:31;;;;:::i;:::-;41731:4;:19;;:53;;;;41824:36;41853:6;41824:5;41830:3;41824:10;;;;;;;;;;;;;;;;;;:24;;;:28;;:36;;;;:::i;:::-;41797:5;41803:3;41797:10;;;;;;;;;;;;;;;;;;:24;;:63;;;;41871:79;41915:10;41936:4;41943:6;41871:5;41877:3;41871:10;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;:35;;;;:79;;;;;;:::i;:::-;41986:3;41974:10;41966:32;;;41991:6;41966:32;;;;;;;;;;;;;;;;;;41265:741;;;:::o;29113:244::-;28390:12;:10;:12::i;:::-;28380:22;;:6;;;;;;;;;;:22;;;28372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29222:1:::1;29202:22;;:8;:22;;;;29194:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29312:8;29283:38;;29304:6;::::0;::::1;;;;;;;;29283:38;;;;;;;;;;;;29341:8;29332:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;29113:244:::0;:::o;27302:106::-;27355:15;27390:10;27383:17;;27302:106;:::o;7587:471::-;7645:7;7895:1;7890;:6;7886:47;;;7920:1;7913:8;;;;7886:47;7945:9;7961:1;7957;:5;7945:17;;7990:1;7985;7981;:5;;;;;;:10;7973:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8049:1;8042:8;;;7587:471;;;;;:::o;45443:266::-;45519:11;45533:4;;;;;;;;;;;:14;;;45556:4;45533:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45519:43;;45587:3;45577:7;:13;45573:129;;;45607:4;;;;;;;;;;;:13;;;45621:3;45626;45607:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45573:129;;;45663:4;;;;;;;;;;;:13;;;45677:3;45682:7;45663:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45573:129;45443:266;;;:::o;6697:136::-;6755:7;6782:43;6786:1;6789;6782:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6775:50;;6697:136;;;;:::o;16872:177::-;16955:86;16975:5;17005:23;;;17030:2;17034:5;16982:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16955:19;:86::i;:::-;16872:177;;;:::o;8534:132::-;8592:7;8619:39;8623:1;8626;8619:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8612:46;;8534:132;;;;:::o;6233:181::-;6291:7;6311:9;6327:1;6323;:5;6311:17;;6352:1;6347;:6;;6339:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6405:1;6398:8;;;6233:181;;;;:::o;17057:205::-;17158:96;17178:5;17208:27;;;17237:4;17243:2;17247:5;17185:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17158:19;:96::i;:::-;17057:205;;;;:::o;7136:192::-;7222:7;7255:1;7250;:6;;7258:12;7242:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7282:9;7298:1;7294;:5;7282:17;;7319:1;7312:8;;;7136:192;;;;;:::o;19177:760::-;19601:23;19627:69;19655:4;19627:69;;;;;;;;;;;;;;;;;19635:5;19627:27;;;;:69;;;;;:::i;:::-;19601:95;;19731:1;19711:10;:17;:21;19707:223;;;19852:10;19841:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19833:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19707:223;19177:760;;;:::o;9162:278::-;9248:7;9280:1;9276;:5;9283:12;9268:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9307:9;9323:1;9319;:5;;;;;;9307:17;;9431:1;9424:8;;;9162:278;;;;;:::o;14418:196::-;14521:12;14553:53;14576:6;14584:4;14590:1;14593:12;14553:22;:53::i;:::-;14546:60;;14418:196;;;;;:::o;15795:978::-;15925:12;15958:18;15969:6;15958:10;:18::i;:::-;15950:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16084:12;16098:23;16125:6;:11;;16145:8;16155:4;16125:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16083:77;;;;16175:7;16171:595;;;16206:10;16199:17;;;;;;16171:595;16340:1;16320:10;:17;:21;16316:439;;;16583:10;16577:17;16644:15;16631:10;16627:2;16623:19;16616:44;16531:148;16726:12;16719:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15795:978;;;;;;;:::o;11305:617::-;11365:4;11627:16;11654:19;11676:66;11654:88;;;;11844:7;11832:20;11820:32;;11883:11;11871:8;:23;;:42;;;;;11910:3;11898:15;;:8;:15;;11871:42;11863:51;;;;11305:617;;;:::o
Swarm Source
ipfs://f0b69474f2e09141253e545d41d75e7fdc90567b8d062b41df9b6cd7cd01cebd
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,445.32
Net Worth in ETH
1.175514
Token Allocations
BLFI
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.00 | 5,666.842 | $0.00 |
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.