Latest 25 from a total of 311,656 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 14096661 | 58 days ago | IN | 0 MOVR | 0.00010624 | ||||
| Withdraw | 13506798 | 103 days ago | IN | 0 MOVR | 0.00010624 | ||||
| Withdraw | 13477078 | 106 days ago | IN | 0 MOVR | 0.00027219 | ||||
| Withdraw | 13470662 | 106 days ago | IN | 0 MOVR | 0.00112104 | ||||
| Emergency Withdr... | 11257787 | 277 days ago | IN | 0 MOVR | 0.00007622 | ||||
| Deposit | 11140475 | 286 days ago | IN | 0 MOVR | 0.00014091 | ||||
| Deposit | 10547463 | 328 days ago | IN | 0 MOVR | 0.00050983 | ||||
| Deposit | 10547463 | 328 days ago | IN | 0 MOVR | 0.00154855 | ||||
| Deposit | 10547460 | 328 days ago | IN | 0 MOVR | 0.00152945 | ||||
| Withdraw | 10547457 | 328 days ago | IN | 0 MOVR | 0.00172469 | ||||
| Deposit | 10009029 | 366 days ago | IN | 0 MOVR | 0.00014073 | ||||
| Withdraw | 9947325 | 370 days ago | IN | 0 MOVR | 0.00021187 | ||||
| Withdraw | 9916297 | 373 days ago | IN | 0 MOVR | 0.00007775 | ||||
| Withdraw | 9916257 | 373 days ago | IN | 0 MOVR | 0.00007775 | ||||
| Withdraw | 9916229 | 373 days ago | IN | 0 MOVR | 0.00021766 | ||||
| Withdraw | 9344299 | 413 days ago | IN | 0 MOVR | 0.00061794 | ||||
| Deposit | 9344279 | 413 days ago | IN | 0 MOVR | 0.00056996 | ||||
| Withdraw | 9228061 | 422 days ago | IN | 0 MOVR | 0.00063472 | ||||
| Withdraw | 9182406 | 425 days ago | IN | 0 MOVR | 0.00063472 | ||||
| Deposit | 9161649 | 426 days ago | IN | 0 MOVR | 0.0003302 | ||||
| Withdraw | 9161644 | 426 days ago | IN | 0 MOVR | 0.00084748 | ||||
| Withdraw | 9161641 | 426 days ago | IN | 0 MOVR | 0.00061706 | ||||
| Withdraw | 9118614 | 430 days ago | IN | 0 MOVR | 0.00084748 | ||||
| Deposit | 9073536 | 433 days ago | IN | 0 MOVR | 0.00056294 | ||||
| Withdraw | 9058113 | 434 days ago | IN | 0 MOVR | 0.00061706 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SolarDistributor
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2021-10-28
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Collection of functions related to the address type
*/
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 on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
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} 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");
(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");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return _verifyCallResult(success, returndata, 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");
(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.4._
*/
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.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(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
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
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'
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) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - 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
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface ISolarERC20 is IERC20 {
function mint(address to, uint256 amount) external;
}
contract SolarDistributor is Ownable, ReentrancyGuard {
// remember to change for mainnet deploy
address constant _trustedForwarder = 0x0D0b4862F5FfA3A47D04DDf0351356d20C830460; //TRUSTED FORWARDER
using SafeMath for uint256;
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
uint256 rewardLockedUp; // Reward locked up.
uint256 nextHarvestUntil; // When can the user harvest again.
}
// Info of each pool.
struct PoolInfo {
IERC20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. Solar to distribute per block.
uint256 lastRewardBlock; // Last block number that Solar distribution occurs.
uint256 accSolarPerShare; // Accumulated Solar per share, times 1e12. See below.
uint16 depositFeeBP; // Deposit fee in basis points
uint256 harvestInterval; // Harvest interval in seconds
uint256 totalLp; // Total token in Pool
}
ISolarERC20 public solar;
// The operator can only update EmissionRate and AllocPoint to protect tokenomics
//i.e some wrong setting and a pools get too much allocation accidentally
address private _operator;
// Dev address.
address public devAddress;
// Deposit Fee address
address public feeAddress;
// Solar tokens created per block
uint256 public solarPerBlock;
// Max harvest interval: 14 days
uint256 public constant MAXIMUM_HARVEST_INTERVAL = 14 days;
// Maximum deposit fee rate: 10%
uint16 public constant MAXIMUM_DEPOSIT_FEE_RATE = 1000;
// Info of each pool
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(uint256 => mapping(address => UserInfo)) public userInfo;
// Total allocation points. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block number when Solar mining starts.
uint256 public startBlock;
// Total locked up rewards
uint256 public totalLockedUpRewards;
// Total Solar in Solar Pools (can be multiple pools)
uint256 public totalSolarInPools = 0;
// Control support for EIP-2771 Meta Transactions
bool public metaTxnsEnabled = false;
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 EmissionRateUpdated(address indexed caller, uint256 previousAmount, uint256 newAmount);
event RewardLockedUp(address indexed user, uint256 indexed pid, uint256 amountLockedUp);
event OperatorTransferred(address indexed previousOperator, address indexed newOperator);
event DevAddressChanged(address indexed caller, address oldAddress, address newAddress);
event FeeAddressChanged(address indexed caller, address oldAddress, address newAddress);
event AllocPointsUpdated(address indexed caller, uint256 previousAmount, uint256 newAmount);
event MetaTxnsEnabled(address indexed caller);
event MetaTxnsDisabled(address indexed caller);
modifier onlyOperator() {
require(_operator == msg.sender, "Operator: caller is not the operator");
_;
}
constructor(
ISolarERC20 _solar,
uint256 _solarPerBlock
) {
//StartBlock always many years later from contract construct, will be set later in StartFarming function
startBlock = block.number + (10 * 365 * 24 * 60 * 60);
solar = _solar;
solarPerBlock = _solarPerBlock;
devAddress = msg.sender;
feeAddress = msg.sender;
_operator = msg.sender;
emit OperatorTransferred(address(0), _operator);
}
function isTrustedForwarder(address forwarder) public view virtual returns (bool) {
return metaTxnsEnabled && forwarder == _trustedForwarder;
}
function _msgSender() internal view virtual override returns (address sender) {
if (isTrustedForwarder(msg.sender)) {
// The assembly code is more direct than the Solidity version using `abi.decode`.
assembly {
sender := shr(96, calldataload(sub(calldatasize(), 20)))
}
} else {
return super._msgSender();
}
}
function _msgData() internal view virtual override returns (bytes calldata) {
if (isTrustedForwarder(msg.sender)) {
return msg.data[:msg.data.length - 20];
} else {
return super._msgData();
}
}
function operator() public view returns (address) {
return _operator;
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) {
return _to.sub(_from);
}
function transferOperator(address newOperator) public onlyOperator {
require(newOperator != address(0), "TransferOperator: new operator is the zero address");
emit OperatorTransferred(_operator, newOperator);
_operator = newOperator;
}
// Set farming start, can call only once
function startFarming() public onlyOwner {
require(block.number < startBlock, "Error::Farm started already");
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
PoolInfo storage pool = poolInfo[pid];
pool.lastRewardBlock = block.number;
}
startBlock = block.number;
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
// Add a new lp to the pool. Can only be called by the owner.
// Can add multiple pool with same lp token without messing up rewards, because each pool's balance is tracked using its own totalLp
function add(
uint256 _allocPoint,
IERC20 _lpToken,
uint16 _depositFeeBP,
uint256 _harvestInterval,
bool _withUpdate
) public onlyOwner {
require(_depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "add: deposit fee too high");
require(_harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "add: invalid harvest interval");
if (_withUpdate) {
massUpdatePools();
}
uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo.push(PoolInfo({lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accSolarPerShare: 0, depositFeeBP: _depositFeeBP, harvestInterval: _harvestInterval, totalLp: 0}));
}
// Update the given pool's Solar allocation point and deposit fee. Can only be called by the owner.
function set(
uint256 _pid,
uint256 _allocPoint,
uint16 _depositFeeBP,
uint256 _harvestInterval,
bool _withUpdate
) public onlyOwner {
require(_depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "set: deposit fee too high");
require(_harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "set: invalid harvest interval");
if (_withUpdate) {
massUpdatePools();
}
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
poolInfo[_pid].allocPoint = _allocPoint;
poolInfo[_pid].depositFeeBP = _depositFeeBP;
poolInfo[_pid].harvestInterval = _harvestInterval;
}
// View function to see pending Solar on frontend.
function pendingSolar(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accSolarPerShare = pool.accSolarPerShare;
uint256 lpSupply = pool.lpToken.balanceOf(address(this));
if (block.number > pool.lastRewardBlock && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 solarReward = multiplier.mul(solarPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
accSolarPerShare = accSolarPerShare.add(solarReward.mul(1e12).div(lpSupply));
}
uint256 pending = user.amount.mul(accSolarPerShare).div(1e12).sub(user.rewardDebt);
return pending.add(user.rewardLockedUp);
}
// View function to see if user can harvest Solar.
function canHarvest(uint256 _pid, address _user) public view returns (bool) {
UserInfo storage user = userInfo[_pid][_user];
return block.number >= startBlock && block.timestamp >= user.nextHarvestUntil;
}
// Update reward vairables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.number <= pool.lastRewardBlock) {
return;
}
uint256 lpSupply = pool.totalLp;
if (lpSupply == 0 || pool.allocPoint == 0) {
pool.lastRewardBlock = block.number;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
uint256 solarReward =
multiplier.mul(solarPerBlock).mul(pool.allocPoint).div(
totalAllocPoint
);
solar.mint(devAddress, solarReward.div(10));
solar.mint(address(this), solarReward);
pool.accSolarPerShare = pool.accSolarPerShare.add(
solarReward.mul(1e12).div(pool.totalLp)
);
pool.lastRewardBlock = block.number;
}
// Deposit LP tokens to MasterChef for Solar allocation.
function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
require(block.number >= startBlock, "SolarDistributor: Can not deposit before start");
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_msgSender()];
updatePool(_pid);
payOrLockupPendingSolar(_pid);
if (_amount > 0) {
uint256 beforeDeposit = pool.lpToken.balanceOf(address(this));
pool.lpToken.safeTransferFrom(_msgSender(), address(this), _amount);
uint256 afterDeposit = pool.lpToken.balanceOf(address(this));
_amount = afterDeposit.sub(beforeDeposit);
if (pool.depositFeeBP > 0) {
uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000);
pool.lpToken.safeTransfer(feeAddress, depositFee);
_amount = _amount.sub(depositFee);
}
user.amount = user.amount.add(_amount);
pool.totalLp = pool.totalLp.add(_amount);
if (address(pool.lpToken) == address(solar)) {
totalSolarInPools = totalSolarInPools.add(_amount);
}
}
user.rewardDebt = user.amount.mul(pool.accSolarPerShare).div(1e12);
emit Deposit(_msgSender(), _pid, _amount);
}
// Withdraw tokens
function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_msgSender()];
//this will make sure that user can only withdraw from his pool
require(user.amount >= _amount, "Withdraw: User amount not enough");
//Cannot withdraw more than pool's balance
require(pool.totalLp >= _amount, "Withdraw: Pool total not enough");
updatePool(_pid);
payOrLockupPendingSolar(_pid);
if (_amount > 0) {
user.amount = user.amount.sub(_amount);
pool.totalLp = pool.totalLp.sub(_amount);
if (address(pool.lpToken) == address(solar)) {
totalSolarInPools = totalSolarInPools.sub(_amount);
}
pool.lpToken.safeTransfer(_msgSender(), _amount);
}
user.rewardDebt = user.amount.mul(pool.accSolarPerShare).div(1e12);
emit Withdraw(_msgSender(), _pid, _amount);
}
// Withdraw without caring about rewards. EMERGENCY ONLY.
function emergencyWithdraw(uint256 _pid) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_msgSender()];
uint256 amount = user.amount;
//Cannot withdraw more than pool's balance
require(pool.totalLp >= amount, "EmergencyWithdraw: Pool total not enough");
user.amount = 0;
user.rewardDebt = 0;
user.rewardLockedUp = 0;
user.nextHarvestUntil = 0;
pool.totalLp = pool.totalLp.sub(amount);
if (address(pool.lpToken) == address(solar)) {
totalSolarInPools = totalSolarInPools.sub(amount);
}
pool.lpToken.safeTransfer(_msgSender(), amount);
emit EmergencyWithdraw(_msgSender(), _pid, amount);
}
// Pay or lockup pending Solar.
function payOrLockupPendingSolar(uint256 _pid) internal {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_msgSender()];
if (user.nextHarvestUntil == 0 && block.number >= startBlock) {
user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
}
uint256 pending = user.amount.mul(pool.accSolarPerShare).div(1e12).sub(user.rewardDebt);
if (canHarvest(_pid, _msgSender())) {
if (pending > 0 || user.rewardLockedUp > 0) {
uint256 totalRewards = pending.add(user.rewardLockedUp);
// reset lockup
totalLockedUpRewards = totalLockedUpRewards.sub(user.rewardLockedUp);
user.rewardLockedUp = 0;
user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
// send rewards
safeSolarTransfer(_msgSender(), totalRewards);
}
} else if (pending > 0) {
user.rewardLockedUp = user.rewardLockedUp.add(pending);
totalLockedUpRewards = totalLockedUpRewards.add(pending);
emit RewardLockedUp(_msgSender(), _pid, pending);
}
}
// Safe Solar transfer function, just in case if rounding error causes pool do not have enough Solar.
function safeSolarTransfer(address _to, uint256 _amount) internal {
if (solar.balanceOf(address(this)) > totalSolarInPools) {
//SolarBal = total Solar in SolarDistributor - total Solar in Solar pools, this will make sure that SolarDistributor never transfer rewards from deposited Solar pools
uint256 SolarBal = solar.balanceOf(address(this)).sub(totalSolarInPools);
if (_amount >= SolarBal) {
solar.transfer(_to, SolarBal);
} else if (_amount > 0) {
solar.transfer(_to, _amount);
}
}
}
// Update dev address by the previous dev.
function setDevAddress(address _devAddress) public {
require(_msgSender() == devAddress, "setDevAddress: FORBIDDEN");
require(_devAddress != address(0), "setDevAddress: ZERO");
emit DevAddressChanged(_msgSender(), devAddress, _devAddress);
devAddress = _devAddress;
}
function setFeeAddress(address _feeAddress) public {
require(_msgSender() == feeAddress, "setFeeAddress: FORBIDDEN");
require(_feeAddress != address(0), "setFeeAddress: ZERO");
emit FeeAddressChanged(_msgSender(), feeAddress, _feeAddress);
feeAddress = _feeAddress;
}
// Pancake has to add hidden dummy pools in order to alter the emission, here we make it simple and transparent to all.
function updateEmissionRate(uint256 _solarPerBlock) public onlyOperator {
massUpdatePools();
emit EmissionRateUpdated(msg.sender, solarPerBlock, _solarPerBlock);
solarPerBlock = _solarPerBlock;
}
function updateAllocPoint(
uint256 _pid,
uint256 _allocPoint,
bool _withUpdate
) public onlyOperator {
if (_withUpdate) {
massUpdatePools();
}
emit AllocPointsUpdated(_msgSender(), poolInfo[_pid].allocPoint, _allocPoint);
totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
poolInfo[_pid].allocPoint = _allocPoint;
}
// Enable support for meta transactions
function enableMetaTxns() public onlyOperator {
require(!metaTxnsEnabled, "Meta transactions are already enabled");
metaTxnsEnabled = true;
emit MetaTxnsEnabled(_msgSender());
}
// Disable support for meta transactions
function disableMetaTxns() public onlyOperator {
require(metaTxnsEnabled, "Meta transactions are already disabled");
metaTxnsEnabled = false;
emit MetaTxnsDisabled(_msgSender());
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ISolarERC20","name":"_solar","type":"address"},{"internalType":"uint256","name":"_solarPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"AllocPointsUpdated","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":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"DevAddressChanged","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":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EmissionRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"FeeAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","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":[],"name":"MAXIMUM_DEPOSIT_FEE_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_HARVEST_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMetaTxns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMetaTxns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metaTxnsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingSolar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accSolarPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"totalLp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"solar","outputs":[{"internalType":"contract ISolarERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"solarPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startFarming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSolarInPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"updateAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_solarPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","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"}]Contract Creation Code
608060405260006009819055600c55600d805460ff191690553480156200002557600080fd5b5060405162003a8338038062003a838339810160408190526200004891620001ba565b6200005c62000056620000f0565b6200012e565b6001805562000070436312cc0300620001f4565b600a55600280546001600160a01b038085166001600160a01b031992831617909255600683905560048054821633908117909155600580548316821790556003805490921617908190556040519116906000907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed908290a3505062000219565b6000620000fd336200017e565b1562000113575060131936013560601c6200012b565b62000128620001b660201b62002b651760201c565b90505b90565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600d5460009060ff168015620001b057506001600160a01b038216730d0b4862f5ffa3a47d04ddf0351356d20c830460145b92915050565b3390565b60008060408385031215620001cd578182fd5b82516001600160a01b0381168114620001e4578283fd5b6020939093015192949293505050565b600082198211156200021457634e487b7160e01b81526011600452602481fd5b500190565b61385a80620002296000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063578bb42d11610160578063a8c95dc0116100d8578063d761595c1161008c578063e2bbb15811610071578063e2bbb1581461059f578063e6fa6d6d146105b2578063f2fde38b146105d257610277565b8063d761595c1461058c578063de73149d1461059557610277565b8063afbcfea1116100bd578063afbcfea11461055e578063bde4aeca14610566578063d0d41fe11461057957610277565b8063a8c95dc01461053e578063af018de81461054b57610277565b8063812c64f11161012f5780638da5cb5b116101145780638da5cb5b146104ad5780638dbb1e3a146104cb57806393f1a40b146104de57610277565b8063812c64f11461047e5780638705fcd41461049a57610277565b8063578bb42d14610453578063630b5ba11461045b5780636f22d2c214610463578063715018a61461047657610277565b80633cb5ba9e116101f357806348cd4cb1116101c25780635312ea8e116101a75780635312ea8e1461040f578063570ca73514610422578063572b6c051461044057610277565b806348cd4cb1146103f357806351eb05a6146103fc57610277565b80633cb5ba9e146103ae57806341275358146103b7578063441a3e70146103d7578063474fa630146103ea57610277565b806317caf6f11161024a57806329605e771161022f57806329605e77146103335780632e6c998d146103465780633ad10ef61461036957610277565b806317caf6f1146103175780632143e5451461032057610277565b8063081e3eda1461027c57806308383640146102975780630ba84cd2146102a15780631526fe27146102b4575b600080fd5b6102846105e5565b6040519081526020015b60405180910390f35b61029f6105ec565b005b61029f6102af36600461350c565b61079d565b6102c76102c236600461350c565b61088e565b6040805173ffffffffffffffffffffffffffffffffffffffff9098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e00161028e565b61028460095481565b61029f61032e366004613620565b6108f8565b61029f6103413660046134d4565b610c1a565b61035961035436600461353c565b610df1565b604051901515815260200161028e565b6004546103899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028e565b61028460065481565b6005546103899073ffffffffffffffffffffffffffffffffffffffff1681565b61029f6103e53660046135c7565b610e3e565b610284600b5481565b610284600a5481565b61029f61040a36600461350c565b611150565b61029f61041d36600461350c565b61138e565b60035473ffffffffffffffffffffffffffffffffffffffff16610389565b61035961044e3660046134d4565b611602565b61029f611648565b61029f6117f8565b61028461047136600461353c565b611823565b61029f6119fd565b6104876103e881565b60405161ffff909116815260200161028e565b61029f6104a83660046134d4565b611ac3565b60005473ffffffffffffffffffffffffffffffffffffffff16610389565b6102846104d93660046135c7565b611c86565b61051e6104ec36600461353c565b600860209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161028e565b600d546103599060ff1681565b61029f61055936600461356b565b611c99565b61029f612034565b61029f6105743660046135e8565b6121d6565b61029f6105873660046134d4565b6123d1565b610284600c5481565b6102846212750081565b61029f6105ad3660046135c7565b612594565b6002546103899073ffffffffffffffffffffffffffffffffffffffff1681565b61029f6105e03660046134d4565b6129ff565b6007545b90565b60035473ffffffffffffffffffffffffffffffffffffffff163314610697576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600d5460ff16610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d657461207472616e73616374696f6e732061726520616c726561647920646960448201527f7361626c65640000000000000000000000000000000000000000000000000000606482015260840161068e565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610759612b69565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b60035473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b61084b6117f8565b600654604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600655565b6007818154811061089e57600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015473ffffffffffffffffffffffffffffffffffffffff909516965092949193909261ffff16919087565b610900612b69565b73ffffffffffffffffffffffffffffffffffffffff1661093560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b6103e861ffff84161115610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f206869676800000000000000604482015260640161068e565b62127500821115610a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161068e565b8015610a9d57610a9d6117f8565b610b0784610b0160078881548110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160010154600954612bad90919063ffffffff16565b90612bb9565b6009819055508360078681548110610b48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600101819055508260078681548110610b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160040160006101000a81548161ffff021916908361ffff1602179055508160078681548110610bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600501819055505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b73ffffffffffffffffffffffffffffffffffffffff8116610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f5472616e736665724f70657261746f723a206e6577206f70657261746f72206960448201527f7320746865207a65726f20616464726573730000000000000000000000000000606482015260840161068e565b60035460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a3600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684529091528120600a544310801590610e36575080600301544210155b949350505050565b60026001541415610eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b6002600181905550600060078381548110610eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320868452600890915260408320600790920201925081610f16612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57697468647261773a205573657220616d6f756e74206e6f7420656e6f756768604482015260640161068e565b828260060154101561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f57697468647261773a20506f6f6c20746f74616c206e6f7420656e6f75676800604482015260640161068e565b61103784611150565b61104084612bc5565b82156110c85780546110529084612bad565b815560068201546110639084612bad565b6006830155600254825473ffffffffffffffffffffffffffffffffffffffff9081169116141561109e57600c5461109a9084612bad565b600c555b6110c86110a9612b69565b835473ffffffffffffffffffffffffffffffffffffffff169085612de2565b600382015481546110e99164e8d4a51000916110e391612ebb565b90612ec7565b6001820155836110f7612b69565b73ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688560405161113e91815260200190565b60405180910390a35050600180555050565b60006007828154811061118c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600702019050806002015443116111ad575061138b565b60068101548015806111c157506001820154155b156111d357504360029091015561138b565b60006111e3836002015443611c86565b905060006112106009546110e3866001015461120a60065487612ebb90919063ffffffff16565b90612ebb565b60025460045491925073ffffffffffffffffffffffffffffffffffffffff908116916340c10f19911661124484600a612ec7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156112af57600080fd5b505af11580156112c3573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401600060405180830381600087803b15801561133957600080fd5b505af115801561134d573d6000803e3d6000fd5b5050506006850154611378915061136d906110e38464e8d4a51000612ebb565b600386015490612bb9565b6003850155505043600290920191909155505b50565b600260015414156113fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b600260018190555060006007828154811061143f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600890915260408320600790920201925081611466612b69565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000208054600684015491925090811115611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f456d657267656e637957697468647261773a20506f6f6c20746f74616c206e6f60448201527f7420656e6f756768000000000000000000000000000000000000000000000000606482015260840161068e565b600080835560018301819055600283018190556003830155600683015461154d9082612bad565b6006840155600254835473ffffffffffffffffffffffffffffffffffffffff9081169116141561158857600c546115849082612bad565b600c555b6115b2611593612b69565b845473ffffffffffffffffffffffffffffffffffffffff169083612de2565b836115bb612b69565b73ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958360405161113e91815260200190565b600d5460009060ff168015611640575073ffffffffffffffffffffffffffffffffffffffff8216730d0b4862f5ffa3a47d04ddf0351356d20c830460145b90505b919050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146116ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b600d5460ff1615611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d657461207472616e73616374696f6e732061726520616c726561647920656e60448201527f61626c6564000000000000000000000000000000000000000000000000000000606482015260840161068e565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556117b4612b69565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b60075460005b8181101561181f5761180f81611150565b6118188161378c565b90506117fe565b5050565b60008060078481548110611860577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832087845260088252604080852073ffffffffffffffffffffffffffffffffffffffff898116875293528085206007949094029091016003810154815492517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291965093949291909116906370a082319060240160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190613524565b905083600201544311801561194857508015155b156119a857600061195d856002015443611c86565b905060006119846009546110e3886001015461120a60065487612ebb90919063ffffffff16565b90506119a361199c846110e38464e8d4a51000612ebb565b8590612bb9565b935050505b60006119d884600101546119d264e8d4a510006110e3878960000154612ebb90919063ffffffff16565b90612bad565b90506119f1846002015482612bb990919063ffffffff16565b98975050505050505050565b611a05612b69565b73ffffffffffffffffffffffffffffffffffffffff16611a3a60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b611ac16000612ed3565b565b60055473ffffffffffffffffffffffffffffffffffffffff16611ae4612b69565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f736574466565416464726573733a20464f5242494444454e0000000000000000604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff8116611bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f736574466565416464726573733a205a45524f00000000000000000000000000604482015260640161068e565b611be6612b69565b6005546040805173ffffffffffffffffffffffffffffffffffffffff9283168152848316602082015292909116917f6690a53895b5691c039238b384bd857e65c42adcc727775381e02cb90a122613910160405180910390a2600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611c928284612bad565b9392505050565b611ca1612b69565b73ffffffffffffffffffffffffffffffffffffffff16611cd660005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b6103e861ffff84161115611dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f206869676800000000000000604482015260640161068e565b62127500821115611e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161068e565b8015611e3e57611e3e6117f8565b6000600a544311611e5157600a54611e53565b435b600954909150611e639087612bb9565b6009556040805160e08101825273ffffffffffffffffffffffffffffffffffffffff96871681526020810197885290810191825260006060820181815261ffff9687166080840190815260a0840196875260c08401838152600780546001810182559481905294517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889490950293840180547fffffffffffffffffffffffff00000000000000000000000000000000000000001695909a169490941790985597517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68982015591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a83015595517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b82015593517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190941617909255517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68d8301555090517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68e90910155565b61203c612b69565b73ffffffffffffffffffffffffffffffffffffffff1661207160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b600a544310612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4572726f723a3a4661726d207374617274656420616c72656164790000000000604482015260640161068e565b60075460005b818110156121ce576000600782815481106121a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201905043816002018190555050806121c79061378c565b905061215f565b505043600a55565b60035473ffffffffffffffffffffffffffffffffffffffff16331461227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b801561228a5761228a6117f8565b612292612b69565b73ffffffffffffffffffffffffffffffffffffffff167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef360078581548110612303577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600101548460405161232d929190918252602082015260400190565b60405180910390a261237682610b0160078681548110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60098190555081600784815481106123b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160010181905550505050565b60045473ffffffffffffffffffffffffffffffffffffffff166123f2612b69565b73ffffffffffffffffffffffffffffffffffffffff161461246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f736574446576416464726573733a20464f5242494444454e0000000000000000604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff81166124ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f736574446576416464726573733a205a45524f00000000000000000000000000604482015260640161068e565b6124f4612b69565b6004546040805173ffffffffffffffffffffffffffffffffffffffff9283168152848316602082015292909116917fd36d63f6c513a911d7912853de740af476b0fbb569aa769e1a4f5bfa37a325c4910160405180910390a2600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60026001541415612601576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b6002600155600a54431015612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f536f6c61724469737472696275746f723a2043616e206e6f74206465706f736960448201527f74206265666f7265207374617274000000000000000000000000000000000000606482015260840161068e565b6000600783815481106126d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083208684526008909152604083206007909202019250816126fb612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061274084611150565b61274984612bc5565b821561298f5781546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b1580156127b857600080fd5b505afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f09190613524565b905061281d6127fd612b69565b845473ffffffffffffffffffffffffffffffffffffffff16903087612f48565b82546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128be9190613524565b90506128ca8183612bad565b600485015490955061ffff16156129345760048401546000906128fa90612710906110e390899061ffff16612ebb565b60055486549192506129269173ffffffffffffffffffffffffffffffffffffffff908116911683612de2565b6129308682612bad565b9550505b82546129409086612bb9565b835560068401546129519086612bb9565b6006850155600254845473ffffffffffffffffffffffffffffffffffffffff9081169116141561298c57600c546129889086612bb9565b600c555b50505b600382015481546129aa9164e8d4a51000916110e391612ebb565b6001820155836129b8612b69565b73ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158560405161113e91815260200190565b612a07612b69565b73ffffffffffffffffffffffffffffffffffffffff16612a3c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff8116612b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161068e565b61138b81612ed3565b3390565b6000612b7433611602565b15612ba657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c6105e9565b50336105e9565b6000611c928284613749565b6000611c9282846136bb565b600060078281548110612c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600890915260408320600790920201925081612c28612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600301546000148015612c7a5750600a544310155b15612c95576005820154612c8f904290612bb9565b60038201555b6000612cc382600101546119d264e8d4a510006110e387600301548760000154612ebb90919063ffffffff16565b9050612cd184610354612b69565b15612d59576000811180612ce9575060008260020154115b15612d54576000612d07836002015483612bb990919063ffffffff16565b9050612d228360020154600b54612bad90919063ffffffff16565b600b55600060028401556005840154612d3c904290612bb9565b6003840155612d52612d4c612b69565b82612fa6565b505b612ddc565b8015612ddc576002820154612d6e9082612bb9565b6002830155600b54612d809082612bb9565b600b5583612d8c612b69565b73ffffffffffffffffffffffffffffffffffffffff167fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c183604051612dd391815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612eb69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261326a565b505050565b6000611c92828461370c565b6000611c9282846136d3565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612ddc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612e34565b600c546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b15801561301257600080fd5b505afa158015613026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304a9190613524565b111561181f57600c546002546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000926130fd92909173ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b1580156130c557600080fd5b505afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d29190613524565b90508082106131b8576002546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b291906134f0565b50612eb6565b8115612eb6576002546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc91906134f0565b60006132cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166133769092919063ffffffff16565b805190915015612eb657808060200190518101906132ea91906134f0565b612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161068e565b6060610e36848460008585843b6133e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161068e565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613412919061364e565b60006040518083038185875af1925050503d806000811461344f576040519150601f19603f3d011682016040523d82523d6000602084013e613454565b606091505b509150915061346482828661346f565b979650505050505050565b6060831561347e575081611c92565b82511561348e5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068e919061366a565b803561ffff8116811461164357600080fd5b6000602082840312156134e5578081fd5b8135611c92816137f4565b600060208284031215613501578081fd5b8151611c9281613816565b60006020828403121561351d578081fd5b5035919050565b600060208284031215613535578081fd5b5051919050565b6000806040838503121561354e578081fd5b823591506020830135613560816137f4565b809150509250929050565b600080600080600060a08688031215613582578081fd5b853594506020860135613594816137f4565b93506135a2604087016134c2565b92506060860135915060808601356135b981613816565b809150509295509295909350565b600080604083850312156135d9578182fd5b50508035926020909101359150565b6000806000606084860312156135fc578283fd5b8335925060208401359150604084013561361581613816565b809150509250925092565b600080600080600060a08688031215613637578081fd5b85359450602086013593506135a2604087016134c2565b60008251613660818460208701613760565b9190910192915050565b6000602082528251806020840152613689816040850160208701613760565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156136ce576136ce6137c5565b500190565b600082613707577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613744576137446137c5565b500290565b60008282101561375b5761375b6137c5565b500390565b60005b8381101561377b578181015183820152602001613763565b83811115612ddc5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137be576137be6137c5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461138b57600080fd5b801515811461138b57600080fdfea26469706673582212209badfedeb75e26b4df904683037605f9ddf048823d62c357a0b924111ad8433764736f6c634300080200330000000000000000000000006bd193ee6d2104f14f94e2ca6efefae561a4334b00000000000000000000000000000000000000000000000340aad21b3b700000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063578bb42d11610160578063a8c95dc0116100d8578063d761595c1161008c578063e2bbb15811610071578063e2bbb1581461059f578063e6fa6d6d146105b2578063f2fde38b146105d257610277565b8063d761595c1461058c578063de73149d1461059557610277565b8063afbcfea1116100bd578063afbcfea11461055e578063bde4aeca14610566578063d0d41fe11461057957610277565b8063a8c95dc01461053e578063af018de81461054b57610277565b8063812c64f11161012f5780638da5cb5b116101145780638da5cb5b146104ad5780638dbb1e3a146104cb57806393f1a40b146104de57610277565b8063812c64f11461047e5780638705fcd41461049a57610277565b8063578bb42d14610453578063630b5ba11461045b5780636f22d2c214610463578063715018a61461047657610277565b80633cb5ba9e116101f357806348cd4cb1116101c25780635312ea8e116101a75780635312ea8e1461040f578063570ca73514610422578063572b6c051461044057610277565b806348cd4cb1146103f357806351eb05a6146103fc57610277565b80633cb5ba9e146103ae57806341275358146103b7578063441a3e70146103d7578063474fa630146103ea57610277565b806317caf6f11161024a57806329605e771161022f57806329605e77146103335780632e6c998d146103465780633ad10ef61461036957610277565b806317caf6f1146103175780632143e5451461032057610277565b8063081e3eda1461027c57806308383640146102975780630ba84cd2146102a15780631526fe27146102b4575b600080fd5b6102846105e5565b6040519081526020015b60405180910390f35b61029f6105ec565b005b61029f6102af36600461350c565b61079d565b6102c76102c236600461350c565b61088e565b6040805173ffffffffffffffffffffffffffffffffffffffff9098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e00161028e565b61028460095481565b61029f61032e366004613620565b6108f8565b61029f6103413660046134d4565b610c1a565b61035961035436600461353c565b610df1565b604051901515815260200161028e565b6004546103899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028e565b61028460065481565b6005546103899073ffffffffffffffffffffffffffffffffffffffff1681565b61029f6103e53660046135c7565b610e3e565b610284600b5481565b610284600a5481565b61029f61040a36600461350c565b611150565b61029f61041d36600461350c565b61138e565b60035473ffffffffffffffffffffffffffffffffffffffff16610389565b61035961044e3660046134d4565b611602565b61029f611648565b61029f6117f8565b61028461047136600461353c565b611823565b61029f6119fd565b6104876103e881565b60405161ffff909116815260200161028e565b61029f6104a83660046134d4565b611ac3565b60005473ffffffffffffffffffffffffffffffffffffffff16610389565b6102846104d93660046135c7565b611c86565b61051e6104ec36600461353c565b600860209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161028e565b600d546103599060ff1681565b61029f61055936600461356b565b611c99565b61029f612034565b61029f6105743660046135e8565b6121d6565b61029f6105873660046134d4565b6123d1565b610284600c5481565b6102846212750081565b61029f6105ad3660046135c7565b612594565b6002546103899073ffffffffffffffffffffffffffffffffffffffff1681565b61029f6105e03660046134d4565b6129ff565b6007545b90565b60035473ffffffffffffffffffffffffffffffffffffffff163314610697576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600d5460ff16610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d657461207472616e73616374696f6e732061726520616c726561647920646960448201527f7361626c65640000000000000000000000000000000000000000000000000000606482015260840161068e565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610759612b69565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b60035473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b61084b6117f8565b600654604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600655565b6007818154811061089e57600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015473ffffffffffffffffffffffffffffffffffffffff909516965092949193909261ffff16919087565b610900612b69565b73ffffffffffffffffffffffffffffffffffffffff1661093560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b6103e861ffff84161115610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f206869676800000000000000604482015260640161068e565b62127500821115610a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161068e565b8015610a9d57610a9d6117f8565b610b0784610b0160078881548110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160010154600954612bad90919063ffffffff16565b90612bb9565b6009819055508360078681548110610b48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600101819055508260078681548110610b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160040160006101000a81548161ffff021916908361ffff1602179055508160078681548110610bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600501819055505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b73ffffffffffffffffffffffffffffffffffffffff8116610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f5472616e736665724f70657261746f723a206e6577206f70657261746f72206960448201527f7320746865207a65726f20616464726573730000000000000000000000000000606482015260840161068e565b60035460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed90600090a3600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684529091528120600a544310801590610e36575080600301544210155b949350505050565b60026001541415610eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b6002600181905550600060078381548110610eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320868452600890915260408320600790920201925081610f16612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610fc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f57697468647261773a205573657220616d6f756e74206e6f7420656e6f756768604482015260640161068e565b828260060154101561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f57697468647261773a20506f6f6c20746f74616c206e6f7420656e6f75676800604482015260640161068e565b61103784611150565b61104084612bc5565b82156110c85780546110529084612bad565b815560068201546110639084612bad565b6006830155600254825473ffffffffffffffffffffffffffffffffffffffff9081169116141561109e57600c5461109a9084612bad565b600c555b6110c86110a9612b69565b835473ffffffffffffffffffffffffffffffffffffffff169085612de2565b600382015481546110e99164e8d4a51000916110e391612ebb565b90612ec7565b6001820155836110f7612b69565b73ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688560405161113e91815260200190565b60405180910390a35050600180555050565b60006007828154811061118c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600702019050806002015443116111ad575061138b565b60068101548015806111c157506001820154155b156111d357504360029091015561138b565b60006111e3836002015443611c86565b905060006112106009546110e3866001015461120a60065487612ebb90919063ffffffff16565b90612ebb565b60025460045491925073ffffffffffffffffffffffffffffffffffffffff908116916340c10f19911661124484600a612ec7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156112af57600080fd5b505af11580156112c3573d6000803e3d6000fd5b50506002546040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff90911692506340c10f199150604401600060405180830381600087803b15801561133957600080fd5b505af115801561134d573d6000803e3d6000fd5b5050506006850154611378915061136d906110e38464e8d4a51000612ebb565b600386015490612bb9565b6003850155505043600290920191909155505b50565b600260015414156113fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b600260018190555060006007828154811061143f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600890915260408320600790920201925081611466612b69565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000208054600684015491925090811115611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f456d657267656e637957697468647261773a20506f6f6c20746f74616c206e6f60448201527f7420656e6f756768000000000000000000000000000000000000000000000000606482015260840161068e565b600080835560018301819055600283018190556003830155600683015461154d9082612bad565b6006840155600254835473ffffffffffffffffffffffffffffffffffffffff9081169116141561158857600c546115849082612bad565b600c555b6115b2611593612b69565b845473ffffffffffffffffffffffffffffffffffffffff169083612de2565b836115bb612b69565b73ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05958360405161113e91815260200190565b600d5460009060ff168015611640575073ffffffffffffffffffffffffffffffffffffffff8216730d0b4862f5ffa3a47d04ddf0351356d20c830460145b90505b919050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146116ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b600d5460ff1615611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d657461207472616e73616374696f6e732061726520616c726561647920656e60448201527f61626c6564000000000000000000000000000000000000000000000000000000606482015260840161068e565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556117b4612b69565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b60075460005b8181101561181f5761180f81611150565b6118188161378c565b90506117fe565b5050565b60008060078481548110611860577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832087845260088252604080852073ffffffffffffffffffffffffffffffffffffffff898116875293528085206007949094029091016003810154815492517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291965093949291909116906370a082319060240160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190613524565b905083600201544311801561194857508015155b156119a857600061195d856002015443611c86565b905060006119846009546110e3886001015461120a60065487612ebb90919063ffffffff16565b90506119a361199c846110e38464e8d4a51000612ebb565b8590612bb9565b935050505b60006119d884600101546119d264e8d4a510006110e3878960000154612ebb90919063ffffffff16565b90612bad565b90506119f1846002015482612bb990919063ffffffff16565b98975050505050505050565b611a05612b69565b73ffffffffffffffffffffffffffffffffffffffff16611a3a60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b611ac16000612ed3565b565b60055473ffffffffffffffffffffffffffffffffffffffff16611ae4612b69565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f736574466565416464726573733a20464f5242494444454e0000000000000000604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff8116611bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f736574466565416464726573733a205a45524f00000000000000000000000000604482015260640161068e565b611be6612b69565b6005546040805173ffffffffffffffffffffffffffffffffffffffff9283168152848316602082015292909116917f6690a53895b5691c039238b384bd857e65c42adcc727775381e02cb90a122613910160405180910390a2600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611c928284612bad565b9392505050565b611ca1612b69565b73ffffffffffffffffffffffffffffffffffffffff16611cd660005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b6103e861ffff84161115611dc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f206869676800000000000000604482015260640161068e565b62127500821115611e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c000000604482015260640161068e565b8015611e3e57611e3e6117f8565b6000600a544311611e5157600a54611e53565b435b600954909150611e639087612bb9565b6009556040805160e08101825273ffffffffffffffffffffffffffffffffffffffff96871681526020810197885290810191825260006060820181815261ffff9687166080840190815260a0840196875260c08401838152600780546001810182559481905294517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889490950293840180547fffffffffffffffffffffffff00000000000000000000000000000000000000001695909a169490941790985597517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68982015591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a83015595517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b82015593517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190941617909255517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68d8301555090517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68e90910155565b61203c612b69565b73ffffffffffffffffffffffffffffffffffffffff1661207160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146120ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b600a544310612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4572726f723a3a4661726d207374617274656420616c72656164790000000000604482015260640161068e565b60075460005b818110156121ce576000600782815481106121a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201905043816002018190555050806121c79061378c565b905061215f565b505043600a55565b60035473ffffffffffffffffffffffffffffffffffffffff16331461227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657260448201527f61746f7200000000000000000000000000000000000000000000000000000000606482015260840161068e565b801561228a5761228a6117f8565b612292612b69565b73ffffffffffffffffffffffffffffffffffffffff167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef360078581548110612303577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060070201600101548460405161232d929190918252602082015260400190565b60405180910390a261237682610b0160078681548110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60098190555081600784815481106123b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906007020160010181905550505050565b60045473ffffffffffffffffffffffffffffffffffffffff166123f2612b69565b73ffffffffffffffffffffffffffffffffffffffff161461246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f736574446576416464726573733a20464f5242494444454e0000000000000000604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff81166124ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f736574446576416464726573733a205a45524f00000000000000000000000000604482015260640161068e565b6124f4612b69565b6004546040805173ffffffffffffffffffffffffffffffffffffffff9283168152848316602082015292909116917fd36d63f6c513a911d7912853de740af476b0fbb569aa769e1a4f5bfa37a325c4910160405180910390a2600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60026001541415612601576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161068e565b6002600155600a54431015612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f536f6c61724469737472696275746f723a2043616e206e6f74206465706f736960448201527f74206265666f7265207374617274000000000000000000000000000000000000606482015260840161068e565b6000600783815481106126d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083208684526008909152604083206007909202019250816126fb612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061274084611150565b61274984612bc5565b821561298f5781546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b1580156127b857600080fd5b505afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f09190613524565b905061281d6127fd612b69565b845473ffffffffffffffffffffffffffffffffffffffff16903087612f48565b82546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128be9190613524565b90506128ca8183612bad565b600485015490955061ffff16156129345760048401546000906128fa90612710906110e390899061ffff16612ebb565b60055486549192506129269173ffffffffffffffffffffffffffffffffffffffff908116911683612de2565b6129308682612bad565b9550505b82546129409086612bb9565b835560068401546129519086612bb9565b6006850155600254845473ffffffffffffffffffffffffffffffffffffffff9081169116141561298c57600c546129889086612bb9565b600c555b50505b600382015481546129aa9164e8d4a51000916110e391612ebb565b6001820155836129b8612b69565b73ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158560405161113e91815260200190565b612a07612b69565b73ffffffffffffffffffffffffffffffffffffffff16612a3c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068e565b73ffffffffffffffffffffffffffffffffffffffff8116612b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161068e565b61138b81612ed3565b3390565b6000612b7433611602565b15612ba657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c6105e9565b50336105e9565b6000611c928284613749565b6000611c9282846136bb565b600060078281548110612c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320858452600890915260408320600790920201925081612c28612b69565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600301546000148015612c7a5750600a544310155b15612c95576005820154612c8f904290612bb9565b60038201555b6000612cc382600101546119d264e8d4a510006110e387600301548760000154612ebb90919063ffffffff16565b9050612cd184610354612b69565b15612d59576000811180612ce9575060008260020154115b15612d54576000612d07836002015483612bb990919063ffffffff16565b9050612d228360020154600b54612bad90919063ffffffff16565b600b55600060028401556005840154612d3c904290612bb9565b6003840155612d52612d4c612b69565b82612fa6565b505b612ddc565b8015612ddc576002820154612d6e9082612bb9565b6002830155600b54612d809082612bb9565b600b5583612d8c612b69565b73ffffffffffffffffffffffffffffffffffffffff167fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c183604051612dd391815260200190565b60405180910390a35b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612eb69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261326a565b505050565b6000611c92828461370c565b6000611c9282846136d3565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612ddc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612e34565b600c546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b15801561301257600080fd5b505afa158015613026573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304a9190613524565b111561181f57600c546002546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000926130fd92909173ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b1580156130c557600080fd5b505afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d29190613524565b90508082106131b8576002546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561317a57600080fd5b505af115801561318e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b291906134f0565b50612eb6565b8115612eb6576002546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc91906134f0565b60006132cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166133769092919063ffffffff16565b805190915015612eb657808060200190518101906132ea91906134f0565b612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161068e565b6060610e36848460008585843b6133e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161068e565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613412919061364e565b60006040518083038185875af1925050503d806000811461344f576040519150601f19603f3d011682016040523d82523d6000602084013e613454565b606091505b509150915061346482828661346f565b979650505050505050565b6060831561347e575081611c92565b82511561348e5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068e919061366a565b803561ffff8116811461164357600080fd5b6000602082840312156134e5578081fd5b8135611c92816137f4565b600060208284031215613501578081fd5b8151611c9281613816565b60006020828403121561351d578081fd5b5035919050565b600060208284031215613535578081fd5b5051919050565b6000806040838503121561354e578081fd5b823591506020830135613560816137f4565b809150509250929050565b600080600080600060a08688031215613582578081fd5b853594506020860135613594816137f4565b93506135a2604087016134c2565b92506060860135915060808601356135b981613816565b809150509295509295909350565b600080604083850312156135d9578182fd5b50508035926020909101359150565b6000806000606084860312156135fc578283fd5b8335925060208401359150604084013561361581613816565b809150509250925092565b600080600080600060a08688031215613637578081fd5b85359450602086013593506135a2604087016134c2565b60008251613660818460208701613760565b9190910192915050565b6000602082528251806020840152613689816040850160208701613760565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156136ce576136ce6137c5565b500190565b600082613707577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613744576137446137c5565b500290565b60008282101561375b5761375b6137c5565b500390565b60005b8381101561377b578181015183820152602001613763565b83811115612ddc5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137be576137be6137c5565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461138b57600080fd5b801515811461138b57600080fdfea26469706673582212209badfedeb75e26b4df904683037605f9ddf048823d62c357a0b924111ad8433764736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006bd193ee6d2104f14f94e2ca6efefae561a4334b00000000000000000000000000000000000000000000000340aad21b3b700000
-----Decoded View---------------
Arg [0] : _solar (address): 0x6bD193Ee6D2104F14F94E2cA6efefae561A4334B
Arg [1] : _solarPerBlock (uint256): 60000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bd193ee6d2104f14f94e2ca6efefae561a4334b
Arg [1] : 00000000000000000000000000000000000000000000000340aad21b3b700000
Deployed Bytecode Sourcemap
27018:17622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32923:95;;;:::i;:::-;;;15362:25:1;;;15350:2;15335:18;32923:95:0;;;;;;;;44423:214;;;:::i;:::-;;43422:229;;;;;;:::i;:::-;;:::i;28865:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;5328:42:1;5316:55;;;5298:74;;5403:2;5388:18;;5381:34;;;;5431:18;;;5424:34;;;;5489:2;5474:18;;5467:34;;;;5550:6;5538:19;5532:3;5517:19;;5510:48;5589:3;5574:19;;5567:35;5633:3;5618:19;;5611:35;5285:3;5270:19;28865:26:0;5252:400:1;29110:34:0;;;;;;34158:705;;;;;;:::i;:::-;;:::i;32219:267::-;;;;;;:::i;:::-;;:::i;35824:228::-;;;;;;:::i;:::-;;:::i;:::-;;;4945:14:1;;4938:22;4920:41;;4908:2;4893:18;35824:228:0;4875:92:1;28461:25:0;;;;;;;;;;;;3688:42:1;3676:55;;;3658:74;;3646:2;3631:18;28461:25:0;3613:125:1;28596:28:0;;;;;;28523:25;;;;;;;;;38706:1031;;;;;;:::i;:::-;;:::i;29270:35::-;;;;;;29204:25;;;;;;36391:877;;;;;;:::i;:::-;;:::i;39808:792::-;;;;;;:::i;:::-;;:::i;31929:85::-;31997:9;;;;31929:85;;31087:157;;;;;;:::i;:::-;;:::i;44158:211::-;;;:::i;36135:180::-;;;:::i;34927:833::-;;;;;;:::i;:::-;;:::i;16748:94::-;;;:::i;28776:54::-;;28826:4;28776:54;;;;;15197:6:1;15185:19;;;15167:38;;15155:2;15140:18;28776:54:0;15122:89:1;42977:312:0;;;;;;:::i;:::-;;:::i;16097:87::-;16143:7;16170:6;;;16097:87;;32090:121;;;;;;:::i;:::-;;:::i;28949:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15882:25:1;;;15938:2;15923:18;;15916:34;;;;15966:18;;;15959:34;16024:2;16009:18;;16002:34;15869:3;15854:19;28949:64:0;15836:206:1;29473:35:0;;;;;;;;;33231:814;;;;;;:::i;:::-;;:::i;32540:375::-;;;:::i;43659:446::-;;;;;;:::i;:::-;;:::i;42657:312::-;;;;;;:::i;:::-;;:::i;29373:36::-;;;;;;28671:58;;28722:7;28671:58;;37338:1336;;;;;;:::i;:::-;;:::i;28207:24::-;;;;;;;;;16997:192;;;;;;:::i;:::-;;:::i;32923:95::-;32995:8;:15;32923:95;;:::o;44423:214::-;30491:9;;:23;:9;30504:10;30491:23;30483:72;;;;;;;14820:2:1;30483:72:0;;;14802:21:1;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:6;14949:18;;;14942:34;14993:19;;30483:72:0;;;;;;;;;44489:15:::1;::::0;::::1;;44481:66;;;::::0;::::1;::::0;;9096:2:1;44481:66:0::1;::::0;::::1;9078:21:1::0;9135:2;9115:18;;;9108:30;9174:34;9154:18;;;9147:62;9245:8;9225:18;;;9218:36;9271:19;;44481:66:0::1;9068:228:1::0;44481:66:0::1;44560:15;:23:::0;;;::::1;::::0;;44616:12:::1;:10;:12::i;:::-;44599:30;;;;;;;;;;;;44423:214::o:0;43422:229::-;30491:9;;:23;:9;30504:10;30491:23;30483:72;;;;;;;14820:2:1;30483:72:0;;;14802:21:1;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:6;14949:18;;;14942:34;14993:19;;30483:72:0;14792:226:1;30483:72:0;43505:17:::1;:15;:17::i;:::-;43572:13;::::0;43540:62:::1;::::0;;15572:25:1;;;15628:2;15613:18;;15606:34;;;43560:10:0::1;::::0;43540:62:::1;::::0;15545:18:1;43540:62:0::1;;;;;;;43613:13;:30:::0;43422:229::o;28865:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28865:26:0;;;;;;;;;;;:::o;34158:705::-;16328:12;:10;:12::i;:::-;16317:23;;:7;16143;16170:6;;;16097:87;;16317:7;:23;;;16309:68;;;;;;;11031:2:1;16309:68:0;;;11013:21:1;;;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;11161:18;;16309:68:0;11003:182:1;16309:68:0;28826:4:::1;34360:41;::::0;::::1;;;34352:79;;;::::0;::::1;::::0;;6557:2:1;34352:79:0::1;::::0;::::1;6539:21:1::0;6596:2;6576:18;;;6569:30;6635:27;6615:18;;;6608:55;6680:18;;34352:79:0::1;6529:175:1::0;34352:79:0::1;28722:7;34450:16;:44;;34442:86;;;::::0;::::1;::::0;;11798:2:1;34442:86:0::1;::::0;::::1;11780:21:1::0;11837:2;11817:18;;;11810:30;11876:31;11856:18;;;11849:59;11925:18;;34442:86:0::1;11770:179:1::0;34442:86:0::1;34543:11;34539:61;;;34571:17;:15;:17::i;:::-;34628:63;34679:11;34628:46;34648:8;34657:4;34648:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;34628:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;34610:15;:81;;;;34730:11;34702:8;34711:4;34702:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:39;;;;34782:13;34752:8;34761:4;34752:14;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;34839:16;34806:8;34815:4;34806:14;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;:49;;;;34158:705:::0;;;;;:::o;32219:267::-;30491:9;;:23;:9;30504:10;30491:23;30483:72;;;;;;;14820:2:1;30483:72:0;;;14802:21:1;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:6;14949:18;;;14942:34;14993:19;;30483:72:0;14792:226:1;30483:72:0;32305:25:::1;::::0;::::1;32297:88;;;::::0;::::1;::::0;;13276:2:1;32297:88:0::1;::::0;::::1;13258:21:1::0;13315:2;13295:18;;;13288:30;13354:34;13334:18;;;13327:62;13425:20;13405:18;;;13398:48;13463:19;;32297:88:0::1;13248:240:1::0;32297:88:0::1;32421:9;::::0;32401:43:::1;::::0;::::1;::::0;;::::1;::::0;32421:9:::1;::::0;32401:43:::1;::::0;32421:9:::1;::::0;32401:43:::1;32455:9;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;32219:267::o;35824:228::-;35894:4;35935:14;;;:8;:14;;;;;;;;:21;;;;;;;;;;35990:10;;35974:12;:26;;;;:70;;;36023:4;:21;;;36004:15;:40;;35974:70;35967:77;35824:228;-1:-1:-1;;;;35824:228:0:o;38706:1031::-;19032:1;19628:7;;:19;;19620:63;;;;;;;14460:2:1;19620:63:0;;;14442:21:1;14499:2;14479:18;;;14472:30;14538:33;14518:18;;;14511:61;14589:18;;19620:63:0;14432:181:1;19620:63:0;19032:1;19761:7;:18;;;;38786:21:::1;38810:8;38819:4;38810:14;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;38859;;;:8:::1;:14:::0;;;;;;38810::::1;::::0;;::::1;;::::0;-1:-1:-1;38810:14:0;38874:12:::1;:10;:12::i;:::-;38859:28;;;;;;;;;;;;;;;38835:52;;38996:7;38981:4;:11;;;:22;;38973:67;;;::::0;::::1;::::0;;6911:2:1;38973:67:0::1;::::0;::::1;6893:21:1::0;;;6930:18;;;6923:30;6989:34;6969:18;;;6962:62;7041:18;;38973:67:0::1;6883:182:1::0;38973:67:0::1;39129:7;39113:4;:12;;;:23;;39105:67;;;::::0;::::1;::::0;;8388:2:1;39105:67:0::1;::::0;::::1;8370:21:1::0;8427:2;8407:18;;;8400:30;8466:33;8446:18;;;8439:61;8517:18;;39105:67:0::1;8360:181:1::0;39105:67:0::1;39185:16;39196:4;39185:10;:16::i;:::-;39214:29;39238:4;39214:23;:29::i;:::-;39260:11:::0;;39256:344:::1;;39302:11:::0;;:24:::1;::::0;39318:7;39302:15:::1;:24::i;:::-;39288:38:::0;;39356:12:::1;::::0;::::1;::::0;:25:::1;::::0;39373:7;39356:16:::1;:25::i;:::-;39341:12;::::0;::::1;:40:::0;39433:5:::1;::::0;39408:12;;39433:5:::1;39408:12:::0;;::::1;39433:5:::0;::::1;39400:39;39396:130;;;39480:17;::::0;:30:::1;::::0;39502:7;39480:21:::1;:30::i;:::-;39460:17;:50:::0;39396:130:::1;39540:48;39566:12;:10;:12::i;:::-;39540::::0;;::::1;;::::0;39580:7;39540:25:::1;:48::i;:::-;39644:21;::::0;::::1;::::0;39628:11;;:48:::1;::::0;39671:4:::1;::::0;39628:38:::1;::::0;:15:::1;:38::i;:::-;:42:::0;::::1;:48::i;:::-;39610:15;::::0;::::1;:66:::0;39715:4;39701:12:::1;:10;:12::i;:::-;39692:37;;;39721:7;39692:37;;;;15362:25:1::0;;15350:2;15335:18;;15317:76;39692:37:0::1;;;;;;;;-1:-1:-1::0;;18988:1:0;19940:22;;-1:-1:-1;;38706:1031:0:o;36391:877::-;36443:21;36467:8;36476:4;36467:14;;;;;;;;;;;;;;;;;;;;;;;;;;36443:38;;36512:4;:20;;;36496:12;:36;36492:75;;36549:7;;;36492:75;36598:12;;;;36625:13;;;:37;;-1:-1:-1;36642:15:0;;;;:20;36625:37;36621:126;;;-1:-1:-1;36702:12:0;36679:20;;;;:35;36729:7;;36621:126;36759:18;36780:49;36794:4;:20;;;36816:12;36780:13;:49::i;:::-;36759:70;;36840:19;36875:103;36948:15;;36875:50;36909:4;:15;;;36875:29;36890:13;;36875:10;:14;;:29;;;;:::i;:::-;:33;;:50::i;:103::-;36991:5;;37002:10;;36840:138;;-1:-1:-1;36991:5:0;;;;;:10;;37002;37014:19;36840:138;37030:2;37014:15;:19::i;:::-;36991:43;;;;;;;;;;4682:42:1;4670:55;;;36991:43:0;;;4652:74:1;4742:18;;;4735:34;4625:18;;36991:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37045:5:0;;:38;;;;;37064:4;37045:38;;;4652:74:1;4742:18;;;4735:34;;;37045:5:0;;;;;-1:-1:-1;37045:10:0;;-1:-1:-1;4625:18:1;;37045:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37186:12:0;;;;37120:90;;-1:-1:-1;37160:39:0;;:21;:11;37176:4;37160:15;:21::i;:39::-;37120:21;;;;;:25;:90::i;:::-;37096:21;;;:114;-1:-1:-1;;37244:12:0;37221:20;;;;:35;;;;-1:-1:-1;36391:877:0;;:::o;39808:792::-;19032:1;19628:7;;:19;;19620:63;;;;;;;14460:2:1;19620:63:0;;;14442:21:1;14499:2;14479:18;;;14472:30;14538:33;14518:18;;;14511:61;14589:18;;19620:63:0;14432:181:1;19620:63:0;19032:1;19761:7;:18;;;;39880:21:::1;39904:8;39913:4;39904:14;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;39953;;;:8:::1;:14:::0;;;;;;39904::::1;::::0;;::::1;;::::0;-1:-1:-1;39904:14:0;39968:12:::1;:10;:12::i;:::-;39953:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39953:28:0;40009:11;;40093:12:::1;::::0;::::1;::::0;39953:28;;-1:-1:-1;40009:11:0;40093:22;-1:-1:-1;40093:22:0::1;40085:75;;;::::0;::::1;::::0;;12156:2:1;40085:75:0::1;::::0;::::1;12138:21:1::0;12195:2;12175:18;;;12168:30;12234:34;12214:18;;;12207:62;12305:10;12285:18;;;12278:38;12333:19;;40085:75:0::1;12128:230:1::0;40085:75:0::1;40187:1;40173:15:::0;;;40199::::1;::::0;::::1;:19:::0;;;40229::::1;::::0;::::1;:23:::0;;;40263:21:::1;::::0;::::1;:25:::0;40314:12:::1;::::0;::::1;::::0;:24:::1;::::0;40331:6;40314:16:::1;:24::i;:::-;40299:12;::::0;::::1;:39:::0;40388:5:::1;::::0;40363:12;;40388:5:::1;40363:12:::0;;::::1;40388:5:::0;::::1;40355:39;40351:121;;;40431:17;::::0;:29:::1;::::0;40453:6;40431:21:::1;:29::i;:::-;40411:17;:49:::0;40351:121:::1;40482:47;40508:12;:10;:12::i;:::-;40482::::0;;::::1;;::::0;40522:6;40482:25:::1;:47::i;:::-;40579:4;40565:12;:10;:12::i;:::-;40547:45;;;40585:6;40547:45;;;;15362:25:1::0;;15350:2;15335:18;;15317:76;31087:157:0;31187:15;;31163:4;;31187:15;;:49;;;;-1:-1:-1;31206:30:0;;;27164:42;31206:30;31187:49;31180:56;;31087:157;;;;:::o;44158:211::-;30491:9;;:23;:9;30504:10;30491:23;30483:72;;;;;;;14820:2:1;30483:72:0;;;14802:21:1;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:6;14949:18;;;14942:34;14993:19;;30483:72:0;14792:226:1;30483:72:0;44224:15:::1;::::0;::::1;;44223:16;44215:66;;;::::0;::::1;::::0;;11392:2:1;44215:66:0::1;::::0;::::1;11374:21:1::0;11431:2;11411:18;;;11404:30;11470:34;11450:18;;;11443:62;11541:7;11521:18;;;11514:35;11566:19;;44215:66:0::1;11364:227:1::0;44215:66:0::1;44294:15;:22:::0;;;::::1;44312:4;44294:22;::::0;;44348:12:::1;:10;:12::i;:::-;44332:29;;;;;;;;;;;;44158:211::o:0;36135:180::-;36197:8;:15;36180:14;36223:85;36251:6;36245:3;:12;36223:85;;;36281:15;36292:3;36281:10;:15::i;:::-;36259:5;;;:::i;:::-;;;36223:85;;;;36135:180;:::o;34927:833::-;35001:7;35021:21;35045:8;35054:4;35045:14;;;;;;;;;;;;;;;;;;;;;;;;35094;;;:8;:14;;;;;;:21;;;;;;;;;;;35045:14;;;;;;;;35153:21;;;;35204:12;;:37;;;;;35235:4;35204:37;;;3658:74:1;35045:14:0;;-1:-1:-1;35094:21:0;;35045:14;35204:12;;;;;:22;;3631:18:1;;35204:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35185:56;;35273:4;:20;;;35258:12;:35;:52;;;;-1:-1:-1;35297:13:0;;;35258:52;35254:354;;;35327:18;35348:49;35362:4;:20;;;35384:12;35348:13;:49::i;:::-;35327:70;;35412:19;35434:71;35489:15;;35434:50;35468:4;:15;;;35434:29;35449:13;;35434:10;:14;;:29;;;;:::i;:71::-;35412:93;-1:-1:-1;35539:57:0;35560:35;35586:8;35560:21;35412:93;35576:4;35560:15;:21::i;:35::-;35539:16;;:20;:57::i;:::-;35520:76;;35254:354;;;35620:15;35638:64;35686:4;:15;;;35638:43;35676:4;35638:33;35654:16;35638:4;:11;;;:15;;:33;;;;:::i;:43::-;:47;;:64::i;:::-;35620:82;;35720:32;35732:4;:19;;;35720:7;:11;;:32;;;;:::i;:::-;35713:39;34927:833;-1:-1:-1;;;;;;;;34927:833:0:o;16748:94::-;16328:12;:10;:12::i;:::-;16317:23;;:7;16143;16170:6;;;16097:87;;16317:7;:23;;;16309:68;;;;;;;11031:2:1;16309:68:0;;;11013:21:1;;;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;11161:18;;16309:68:0;11003:182:1;16309:68:0;16813:21:::1;16831:1;16813:9;:21::i;:::-;16748:94::o:0;42977:312::-;43063:10;;;;43047:12;:10;:12::i;:::-;:26;;;43039:63;;;;;;;12923:2:1;43039:63:0;;;12905:21:1;12962:2;12942:18;;;12935:30;13001:26;12981:18;;;12974:54;13045:18;;43039:63:0;12895:174:1;43039:63:0;43121:25;;;43113:57;;;;;;;9503:2:1;43113:57:0;;;9485:21:1;9542:2;9522:18;;;9515:30;9581:21;9561:18;;;9554:49;9620:18;;43113:57:0;9475:169:1;43113:57:0;43206:12;:10;:12::i;:::-;43220:10;;43188:56;;;;43220:10;;;3978:34:1;;4048:15;;;4043:2;4028:18;;4021:43;43188:56:0;;;;;;;3890:18:1;43188:56:0;;;;;;;43257:10;:24;;;;;;;;;;;;;;;42977:312::o;32090:121::-;32162:7;32189:14;:3;32197:5;32189:7;:14::i;:::-;32182:21;32090:121;-1:-1:-1;;;32090:121:0:o;33231:814::-;16328:12;:10;:12::i;:::-;16317:23;;:7;16143;16170:6;;;16097:87;;16317:7;:23;;;16309:68;;;;;;;11031:2:1;16309:68:0;;;11013:21:1;;;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;11161:18;;16309:68:0;11003:182:1;16309:68:0;28826:4:::1;33436:41;::::0;::::1;;;33428:79;;;::::0;::::1;::::0;;14106:2:1;33428:79:0::1;::::0;::::1;14088:21:1::0;14145:2;14125:18;;;14118:30;14184:27;14164:18;;;14157:55;14229:18;;33428:79:0::1;14078:175:1::0;33428:79:0::1;28722:7;33526:16;:44;;33518:86;;;::::0;::::1;::::0;;9851:2:1;33518:86:0::1;::::0;::::1;9833:21:1::0;9890:2;9870:18;;;9863:30;9929:31;9909:18;;;9902:59;9978:18;;33518:86:0::1;9823:179:1::0;33518:86:0::1;33619:11;33615:61;;;33647:17;:15;:17::i;:::-;33686:23;33727:10;;33712:12;:25;:53;;33755:10;;33712:53;;;33740:12;33712:53;33794:15;::::0;33686:79;;-1:-1:-1;33794:32:0::1;::::0;33814:11;33794:19:::1;:32::i;:::-;33776:15;:50:::0;33851:185:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;33851:185:0;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;33837:8:::1;:200:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;::::1;;::::0;;;;;;;;-1:-1:-1;33837:200:0;;;;;;;33231:814::o;32540:375::-;16328:12;:10;:12::i;:::-;16317:23;;:7;16143;16170:6;;;16097:87;;16317:7;:23;;;16309:68;;;;;;;11031:2:1;16309:68:0;;;11013:21:1;;;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;11161:18;;16309:68:0;11003:182:1;16309:68:0;32615:10:::1;;32600:12;:25;32592:65;;;::::0;::::1;::::0;;8032:2:1;32592:65:0::1;::::0;::::1;8014:21:1::0;8071:2;8051:18;;;8044:30;8110:29;8090:18;;;8083:57;8157:18;;32592:65:0::1;8004:177:1::0;32592:65:0::1;32687:8;:15:::0;32670:14:::1;32713:157;32741:6;32735:3;:12;32713:157;;;32771:21;32795:8;32804:3;32795:13;;;;;;;;;;;;;;;;;;;;;;;;;;32771:37;;32846:12;32823:4;:20;;:35;;;;32713:157;32749:5;;;;:::i;:::-;;;32713:157;;;-1:-1:-1::0;;32895:12:0::1;32882:10;:25:::0;32540:375::o;43659:446::-;30491:9;;:23;:9;30504:10;30491:23;30483:72;;;;;;;14820:2:1;30483:72:0;;;14802:21:1;14859:2;14839:18;;;14832:30;14898:34;14878:18;;;14871:62;14969:6;14949:18;;;14942:34;14993:19;;30483:72:0;14792:226:1;30483:72:0;43807:11:::1;43803:61;;;43835:17;:15;:17::i;:::-;43900:12;:10;:12::i;:::-;43881:72;;;43914:8;43923:4;43914:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;43941:11;43881:72;;;;;;15572:25:1::0;;;15628:2;15613:18;;15606:34;15560:2;15545:18;;15527:119;43881:72:0::1;;;;;;;;43984:63;44035:11;43984:46;44004:8;44013:4;44004:14;;;;;;;;;;;;;;;43984:63;43966:15;:81;;;;44086:11;44058:8;44067:4;44058:14;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:39;;;;43659:446:::0;;;:::o;42657:312::-;42743:10;;;;42727:12;:10;:12::i;:::-;:26;;;42719:63;;;;;;;7272:2:1;42719:63:0;;;7254:21:1;7311:2;7291:18;;;7284:30;7350:26;7330:18;;;7323:54;7394:18;;42719:63:0;7244:174:1;42719:63:0;42801:25;;;42793:57;;;;;;;8748:2:1;42793:57:0;;;8730:21:1;8787:2;8767:18;;;8760:30;8826:21;8806:18;;;8799:49;8865:18;;42793:57:0;8720:169:1;42793:57:0;42886:12;:10;:12::i;:::-;42900:10;;42868:56;;;;42900:10;;;3978:34:1;;4048:15;;;4043:2;4028:18;;4021:43;42868:56:0;;;;;;;3890:18:1;42868:56:0;;;;;;;42937:10;:24;;;;;;;;;;;;;;;42657:312::o;37338:1336::-;19032:1;19628:7;;:19;;19620:63;;;;;;;14460:2:1;19620:63:0;;;14442:21:1;14499:2;14479:18;;;14472:30;14538:33;14518:18;;;14511:61;14589:18;;19620:63:0;14432:181:1;19620:63:0;19032:1;19761:7;:18;37441:10:::1;::::0;37425:12:::1;:26;;37417:85;;;::::0;::::1;::::0;;10616:2:1;37417:85:0::1;::::0;::::1;10598:21:1::0;10655:2;10635:18;;;10628:30;10694:34;10674:18;;;10667:62;10765:16;10745:18;;;10738:44;10799:19;;37417:85:0::1;10588:236:1::0;37417:85:0::1;37515:21;37539:8;37548:4;37539:14;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;37588;;;:8:::1;:14:::0;;;;;;37539::::1;::::0;;::::1;;::::0;-1:-1:-1;37539:14:0;37603:12:::1;:10;:12::i;:::-;37588:28;;;;;;;;;;;;;;;37564:52;;37629:16;37640:4;37629:10;:16::i;:::-;37658:29;37682:4;37658:23;:29::i;:::-;37704:11:::0;;37700:838:::1;;37756:12:::0;;:37:::1;::::0;;;;37787:4:::1;37756:37;::::0;::::1;3658:74:1::0;37732:21:0::1;::::0;37756:12:::1;;::::0;:22:::1;::::0;3631:18:1;;37756:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37732:61;;37808:67;37838:12;:10;:12::i;:::-;37808::::0;;::::1;;::::0;37860:4:::1;37867:7:::0;37808:29:::1;:67::i;:::-;37913:12:::0;;:37:::1;::::0;;;;37944:4:::1;37913:37;::::0;::::1;3658:74:1::0;37890:20:0::1;::::0;37913:12:::1;;::::0;:22:::1;::::0;3631:18:1;;37913:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37890:60:::0;-1:-1:-1;37977:31:0::1;37890:60:::0;37994:13;37977:16:::1;:31::i;:::-;38029:17;::::0;::::1;::::0;37967:41;;-1:-1:-1;38029:17:0::1;;:21:::0;38025:246:::1;;38104:17;::::0;::::1;::::0;38071:18:::1;::::0;38092:41:::1;::::0;38127:5:::1;::::0;38092:30:::1;::::0;:7;;38104:17:::1;;38092:11;:30::i;:41::-;38178:10;::::0;38152:12;;38071:62;;-1:-1:-1;38152:49:0::1;::::0;38178:10:::1;38152:12:::0;;::::1;::::0;38178:10:::1;38071:62:::0;38152:25:::1;:49::i;:::-;38232:23;:7:::0;38244:10;38232:11:::1;:23::i;:::-;38222:33;;38025:246;;38301:11:::0;;:24:::1;::::0;38317:7;38301:15:::1;:24::i;:::-;38287:38:::0;;38355:12:::1;::::0;::::1;::::0;:25:::1;::::0;38372:7;38355:16:::1;:25::i;:::-;38340:12;::::0;::::1;:40:::0;38434:5:::1;::::0;38409:12;;38434:5:::1;38409:12:::0;;::::1;38434:5:::0;::::1;38401:39;38397:130;;;38481:17;::::0;:30:::1;::::0;38503:7;38481:21:::1;:30::i;:::-;38461:17;:50:::0;38397:130:::1;37700:838;;;38582:21;::::0;::::1;::::0;38566:11;;:48:::1;::::0;38609:4:::1;::::0;38566:38:::1;::::0;:15:::1;:38::i;:48::-;38548:15;::::0;::::1;:66:::0;38652:4;38638:12:::1;:10;:12::i;:::-;38630:36;;;38658:7;38630:36;;;;15362:25:1::0;;15350:2;15335:18;;15317:76;16997:192:0;16328:12;:10;:12::i;:::-;16317:23;;:7;16143;16170:6;;;16097:87;;16317:7;:23;;;16309:68;;;;;;;11031:2:1;16309:68:0;;;11013:21:1;;;11050:18;;;11043:30;11109:34;11089:18;;;11082:62;11161:18;;16309:68:0;11003:182:1;16309:68:0;17086:22:::1;::::0;::::1;17078:73;;;::::0;::::1;::::0;;7625:2:1;17078:73:0::1;::::0;::::1;7607:21:1::0;7664:2;7644:18;;;7637:30;7703:34;7683:18;;;7676:62;7774:8;7754:18;;;7747:36;7800:19;;17078:73:0::1;7597:228:1::0;17078:73:0::1;17162:19;17172:8;17162:9;:19::i;14969:98::-:0;15049:10;14969:98;:::o;31252:410::-;31314:14;31345:30;31364:10;31345:18;:30::i;:::-;31341:314;;;-1:-1:-1;31546:23:0;31550:14;31546:23;31533:37;31529:2;31525:46;31496:90;;;-1:-1:-1;15049:10:0;31618:25;;23061:98;23119:7;23146:5;23150:1;23146;:5;:::i;22680:98::-;22738:7;22765:5;22769:1;22765;:5;:::i;40645:1233::-;40712:21;40736:8;40745:4;40736:14;;;;;;;;;;;;;;;;;;;;;;;;40785;;;:8;:14;;;;;;40736;;;;;;-1:-1:-1;40736:14:0;40800:12;:10;:12::i;:::-;40785:28;;;;;;;;;;;;;;;40761:52;;40830:4;:21;;;40855:1;40830:26;:56;;;;;40876:10;;40860:12;:26;;40830:56;40826:154;;;40947:20;;;;40927:41;;:15;;:19;:41::i;:::-;40903:21;;;:65;40826:154;40992:15;41010:69;41063:4;:15;;;41010:48;41053:4;41010:38;41026:4;:21;;;41010:4;:11;;;:15;;:38;;;;:::i;:69::-;40992:87;;41094:30;41105:4;41111:12;:10;:12::i;41094:30::-;41090:781;;;41155:1;41145:7;:11;:38;;;;41182:1;41160:4;:19;;;:23;41145:38;41141:481;;;41204:20;41227:32;41239:4;:19;;;41227:7;:11;;:32;;;;:::i;:::-;41204:55;;41336:45;41361:4;:19;;;41336:20;;:24;;:45;;;;:::i;:::-;41313:20;:68;41422:1;41400:19;;;:23;41486:20;;;;41466:41;;:15;;:19;:41::i;:::-;41442:21;;;:65;41561:45;41579:12;:10;:12::i;:::-;41593;41561:17;:45::i;:::-;41141:481;;41090:781;;;41643:11;;41639:232;;41693:19;;;;:32;;41717:7;41693:23;:32::i;:::-;41671:19;;;:54;41763:20;;:33;;41788:7;41763:24;:33::i;:::-;41740:20;:56;41845:4;41831:12;:10;:12::i;:::-;41816:43;;;41851:7;41816:43;;;;15362:25:1;;15350:2;15335:18;;15317:76;41816:43:0;;;;;;;;41639:232;40645:1233;;;;:::o;11132:211::-;11276:58;;4682:42:1;4670:55;;11276:58:0;;;4652:74:1;4742:18;;;4735:34;;;11249:86:0;;11269:5;;11299:23;;4625:18:1;;11276:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11249:19;:86::i;:::-;11132:211;;;:::o;23418:98::-;23476:7;23503:5;23507:1;23503;:5;:::i;23817:98::-;23875:7;23902:5;23906:1;23902;:5;:::i;17197:173::-;17253:16;17272:6;;;17289:17;;;;;;;;;;17322:40;;17272:6;;;;;;;17322:40;;17253:16;17322:40;17197:173;;:::o;11351:248::-;11522:68;;4287:42:1;4356:15;;;11522:68:0;;;4338:34:1;4408:15;;4388:18;;;4381:43;4440:18;;;4433:34;;;11495:96:0;;11515:5;;11545:27;;4250:18:1;;11522:68:0;4232:241:1;41993:608:0;42107:17;;42074:5;;:30;;;;;42098:4;42074:30;;;3658:74:1;42074:5:0;;;;;:15;;3631:18:1;;42074:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;42070:524;;;42375:17;;42340:5;;:30;;;;;42364:4;42340:30;;;3658:74:1;42321:16:0;;42340:53;;42375:17;;42340:5;;;;;:15;;3631:18:1;;42340:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:53::-;42321:72;;42423:8;42412:7;:19;42408:175;;42452:5;;:29;;;;;:5;4670:55:1;;;42452:29:0;;;4652:74:1;4742:18;;;4735:34;;;42452:5:0;;;;:14;;4625:18:1;;42452:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42408:175;;;42507:11;;42503:80;;42539:5;;:28;;;;;:5;4670:55:1;;;42539:28:0;;;4652:74:1;4742:18;;;4735:34;;;42539:5:0;;;;:14;;4625:18:1;;42539:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13705:716::-;14129:23;14155:69;14183:4;14155:69;;;;;;;;;;;;;;;;;14163:5;14155:27;;;;:69;;;;;:::i;:::-;14239:17;;14129:95;;-1:-1:-1;14239:21:0;14235:179;;14336:10;14325:30;;;;;;;;;;;;:::i;:::-;14317:85;;;;;;;13695:2:1;14317:85:0;;;13677:21:1;13734:2;13714:18;;;13707:30;13773:34;13753:18;;;13746:62;13844:12;13824:18;;;13817:40;13874:19;;14317:85:0;13667:232:1;6296:229:0;6433:12;6465:52;6487:6;6495:4;6501:1;6504:12;6433;3813:20;;7703:60;;;;;;;12565:2:1;7703:60:0;;;12547:21:1;12604:2;12584:18;;;12577:30;12643:31;12623:18;;;12616:59;12692:18;;7703:60:0;12537:179:1;7703:60:0;7777:12;7791:23;7818:6;:11;;7837:5;7844:4;7818:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7776:73;;;;7867:52;7885:7;7894:10;7906:12;7867:17;:52::i;:::-;7860:59;7416:511;-1:-1:-1;;;;;;;7416:511:0:o;9885:712::-;10035:12;10064:7;10060:530;;;-1:-1:-1;10095:10:0;10088:17;;10060:530;10209:17;;:21;10205:374;;10407:10;10401:17;10468:15;10455:10;10451:2;10447:19;10440:44;10355:148;10550:12;10543:20;;;;;;;;;;;:::i;14:159:1:-;81:20;;141:6;130:18;;120:29;;110:2;;163:1;160;153:12;178:257;;290:2;278:9;269:7;265:23;261:32;258:2;;;311:6;303;296:22;258:2;355:9;342:23;374:31;399:5;374:31;:::i;440:255::-;;560:2;548:9;539:7;535:23;531:32;528:2;;;581:6;573;566:22;528:2;618:9;612:16;637:28;659:5;637:28;:::i;700:190::-;;812:2;800:9;791:7;787:23;783:32;780:2;;;833:6;825;818:22;780:2;-1:-1:-1;861:23:1;;770:120;-1:-1:-1;770:120:1:o;895:194::-;;1018:2;1006:9;997:7;993:23;989:32;986:2;;;1039:6;1031;1024:22;986:2;-1:-1:-1;1067:16:1;;976:113;-1:-1:-1;976:113:1:o;1094:325::-;;;1223:2;1211:9;1202:7;1198:23;1194:32;1191:2;;;1244:6;1236;1229:22;1191:2;1285:9;1272:23;1262:33;;1345:2;1334:9;1330:18;1317:32;1358:31;1383:5;1358:31;:::i;:::-;1408:5;1398:15;;;1181:238;;;;;:::o;1424:615::-;;;;;;1613:3;1601:9;1592:7;1588:23;1584:33;1581:2;;;1635:6;1627;1620:22;1581:2;1676:9;1663:23;1653:33;;1736:2;1725:9;1721:18;1708:32;1749:31;1774:5;1749:31;:::i;:::-;1799:5;-1:-1:-1;1823:37:1;1856:2;1841:18;;1823:37;:::i;:::-;1813:47;;1907:2;1896:9;1892:18;1879:32;1869:42;;1963:3;1952:9;1948:19;1935:33;1977:30;1999:7;1977:30;:::i;:::-;2026:7;2016:17;;;1571:468;;;;;;;;:::o;2044:258::-;;;2173:2;2161:9;2152:7;2148:23;2144:32;2141:2;;;2194:6;2186;2179:22;2141:2;-1:-1:-1;;2222:23:1;;;2292:2;2277:18;;;2264:32;;-1:-1:-1;2131:171:1:o;2307:387::-;;;;2450:2;2438:9;2429:7;2425:23;2421:32;2418:2;;;2471:6;2463;2456:22;2418:2;2512:9;2499:23;2489:33;;2569:2;2558:9;2554:18;2541:32;2531:42;;2623:2;2612:9;2608:18;2595:32;2636:28;2658:5;2636:28;:::i;:::-;2683:5;2673:15;;;2408:286;;;;;:::o;2699:529::-;;;;;;2875:3;2863:9;2854:7;2850:23;2846:33;2843:2;;;2897:6;2889;2882:22;2843:2;2938:9;2925:23;2915:33;;2995:2;2984:9;2980:18;2967:32;2957:42;;3018:37;3051:2;3040:9;3036:18;3018:37;:::i;3233:274::-;;3400:6;3394:13;3416:53;3462:6;3457:3;3450:4;3442:6;3438:17;3416:53;:::i;:::-;3485:16;;;;;3370:137;-1:-1:-1;;3370:137:1:o;5908:442::-;;6057:2;6046:9;6039:21;6089:6;6083:13;6132:6;6127:2;6116:9;6112:18;6105:34;6148:66;6207:6;6202:2;6191:9;6187:18;6182:2;6174:6;6170:15;6148:66;:::i;:::-;6266:2;6254:15;6271:66;6250:88;6235:104;;;;6341:2;6231:113;;6029:321;-1:-1:-1;;6029:321:1:o;16047:128::-;;16118:1;16114:6;16111:1;16108:13;16105:2;;;16124:18;;:::i;:::-;-1:-1:-1;16160:9:1;;16095:80::o;16180:274::-;;16246:1;16236:2;;16281:77;16278:1;16271:88;16382:4;16379:1;16372:15;16410:4;16407:1;16400:15;16236:2;-1:-1:-1;16439:9:1;;16226:228::o;16459:::-;;16625:1;16557:66;16553:74;16550:1;16547:81;16542:1;16535:9;16528:17;16524:105;16521:2;;;16632:18;;:::i;:::-;-1:-1:-1;16672:9:1;;16511:176::o;16692:125::-;;16760:1;16757;16754:8;16751:2;;;16765:18;;:::i;:::-;-1:-1:-1;16802:9:1;;16741:76::o;16822:258::-;16894:1;16904:113;16918:6;16915:1;16912:13;16904:113;;;16994:11;;;16988:18;16975:11;;;16968:39;16940:2;16933:10;16904:113;;;17035:6;17032:1;17029:13;17026:2;;;-1:-1:-1;;17070:1:1;17052:16;;17045:27;16875:205::o;17085:195::-;;17155:66;17148:5;17145:77;17142:2;;;17225:18;;:::i;:::-;-1:-1:-1;17272:1:1;17261:13;;17132:148::o;17285:184::-;17337:77;17334:1;17327:88;17434:4;17431:1;17424:15;17458:4;17455:1;17448:15;17474:154;17560:42;17553:5;17549:54;17542:5;17539:65;17529:2;;17618:1;17615;17608:12;17633:118;17719:5;17712:13;17705:21;17698:5;17695:32;17685:2;;17741:1;17738;17731:12
Swarm Source
ipfs://9badfedeb75e26b4df904683037605f9ddf048823d62c357a0b924111ad84337
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$6,678.60
Net Worth in MOVR
Token Allocations
WMOVR
48.44%
RIB
42.67%
ETH
8.22%
Others
0.67%
Multichain Portfolio | 35 Chains
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.