Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 3,702 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit Gvt | 16695758 | 1111 days ago | IN | 0 ETH | 0.00737576 | ||||
| Deposit Gvt | 16575477 | 1128 days ago | IN | 0 ETH | 0.00607049 | ||||
| Deposit Gvt | 16575459 | 1128 days ago | IN | 0 ETH | 0.00727705 | ||||
| Deposit Gvt | 16234952 | 1176 days ago | IN | 0 ETH | 0.00542962 | ||||
| Deposit Gvt | 16112236 | 1193 days ago | IN | 0 ETH | 0.00398238 | ||||
| Deposit Gvt | 16110467 | 1193 days ago | IN | 0 ETH | 0.00360245 | ||||
| Deposit Gvt | 16085962 | 1197 days ago | IN | 0 ETH | 0.00615288 | ||||
| Deposit Gvt | 16055670 | 1201 days ago | IN | 0 ETH | 0.00375858 | ||||
| Deposit Gvt | 16051453 | 1201 days ago | IN | 0 ETH | 0.00326871 | ||||
| Deposit Gvt | 15876812 | 1226 days ago | IN | 0 ETH | 0.00525847 | ||||
| Deposit Gvt | 15870669 | 1227 days ago | IN | 0 ETH | 0.00905128 | ||||
| Deposit Gvt | 15820783 | 1234 days ago | IN | 0 ETH | 0.00418025 | ||||
| Deposit Gvt | 15575555 | 1268 days ago | IN | 0 ETH | 0.00285927 | ||||
| Deposit Gvt | 15477636 | 1283 days ago | IN | 0 ETH | 0.00135934 | ||||
| Deposit Gvt | 15361153 | 1302 days ago | IN | 0 ETH | 0.00449607 | ||||
| Deposit Gvt | 15306727 | 1310 days ago | IN | 0 ETH | 0.0033972 | ||||
| Deposit Gvt | 15288163 | 1313 days ago | IN | 0 ETH | 0.00194188 | ||||
| Deposit Gvt | 15274842 | 1315 days ago | IN | 0 ETH | 0.0077845 | ||||
| Deposit Gvt | 15265439 | 1317 days ago | IN | 0 ETH | 0.0036271 | ||||
| Deposit Gvt | 15260601 | 1317 days ago | IN | 0 ETH | 0.00412854 | ||||
| Deposit Gvt | 15194176 | 1328 days ago | IN | 0 ETH | 0.00403777 | ||||
| Deposit Gvt | 15192090 | 1328 days ago | IN | 0 ETH | 0.00337583 | ||||
| Deposit Gvt | 15166965 | 1332 days ago | IN | 0 ETH | 0.00695797 | ||||
| Deposit Gvt | 15156375 | 1334 days ago | IN | 0 ETH | 0.00543056 | ||||
| Deposit Gvt | 15114816 | 1340 days ago | IN | 0 ETH | 0.00603495 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DepositHandler
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-17
*/
// SPDX-License-Identifier: AGPLv3
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
pragma solidity >=0.6.0 <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:
*
* 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);
}
pragma solidity >=0.6.2 <0.8.0;
/**
* @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) {
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:
* 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:
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https:
*/
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:
*
* 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);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
pragma solidity >=0.6.0 <0.8.0;
/**
* @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 SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
pragma solidity >=0.6.0 <0.7.0;
contract Constants {
uint8 public constant N_COINS = 3;
uint8 public constant DEFAULT_DECIMALS = 18;
uint256 public constant DEFAULT_DECIMALS_FACTOR = uint256(10)**DEFAULT_DECIMALS;
uint8 public constant CHAINLINK_PRICE_DECIMALS = 8;
uint256 public constant CHAINLINK_PRICE_DECIMAL_FACTOR = uint256(10)**CHAINLINK_PRICE_DECIMALS;
uint8 public constant PERCENTAGE_DECIMALS = 4;
uint256 public constant PERCENTAGE_DECIMAL_FACTOR = uint256(10)**PERCENTAGE_DECIMALS;
uint256 public constant CURVE_RATIO_DECIMALS = 6;
uint256 public constant CURVE_RATIO_DECIMALS_FACTOR = uint256(10)**CURVE_RATIO_DECIMALS;
}
pragma solidity >=0.6.0 <0.7.0;
interface IToken {
function factor() external view returns (uint256);
function factor(uint256 totalAssets) external view returns (uint256);
function mint(
address account,
uint256 _factor,
uint256 amount
) external;
function burn(
address account,
uint256 _factor,
uint256 amount
) external;
function burnAll(address account) external;
function totalAssets() external view returns (uint256);
function getPricePerShare() external view returns (uint256);
function getShareAssets(uint256 shares) external view returns (uint256);
function getAssets(address account) external view returns (uint256);
}
pragma solidity >=0.6.0 <0.7.0;
interface IVault {
function withdraw(uint256 amount) external;
function withdraw(uint256 amount, address recipient) external;
function withdrawByStrategyOrder(
uint256 amount,
address recipient,
bool reversed
) external;
function withdrawByStrategyIndex(
uint256 amount,
address recipient,
uint256 strategyIndex
) external;
function deposit(uint256 amount) external;
function updateStrategyRatio(uint256[] calldata strategyRetios) external;
function totalAssets() external view returns (uint256);
function getStrategiesLength() external view returns (uint256);
function strategyHarvestTrigger(uint256 index, uint256 callCost) external view returns (bool);
function strategyHarvest(uint256 index) external returns (bool);
function getStrategyAssets(uint256 index) external view returns (uint256);
function token() external view returns (address);
function vault() external view returns (address);
function investTrigger() external view returns (bool);
function invest() external;
}
pragma solidity >=0.6.0 <0.7.0;
contract FixedStablecoins is Constants {
address public immutable DAI;
address public immutable USDC;
address public immutable USDT;
uint256 public immutable DAI_DECIMALS;
uint256 public immutable USDC_DECIMALS;
uint256 public immutable USDT_DECIMALS;
constructor(address[N_COINS] memory _tokens, uint256[N_COINS] memory _decimals) public {
DAI = _tokens[0];
USDC = _tokens[1];
USDT = _tokens[2];
DAI_DECIMALS = _decimals[0];
USDC_DECIMALS = _decimals[1];
USDT_DECIMALS = _decimals[2];
}
function underlyingTokens() internal view returns (address[N_COINS] memory tokens) {
tokens[0] = DAI;
tokens[1] = USDC;
tokens[2] = USDT;
}
function getToken(uint256 index) internal view returns (address) {
if (index == 0) {
return DAI;
} else if (index == 1) {
return USDC;
} else {
return USDT;
}
}
function decimals() internal view returns (uint256[N_COINS] memory _decimals) {
_decimals[0] = DAI_DECIMALS;
_decimals[1] = USDC_DECIMALS;
_decimals[2] = USDT_DECIMALS;
}
function getDecimal(uint256 index) internal view returns (uint256) {
if (index == 0) {
return DAI_DECIMALS;
} else if (index == 1) {
return USDC_DECIMALS;
} else {
return USDT_DECIMALS;
}
}
}
contract FixedGTokens {
IToken public immutable pwrd;
IToken public immutable gvt;
constructor(address _pwrd, address _gvt) public {
pwrd = IToken(_pwrd);
gvt = IToken(_gvt);
}
function gTokens(bool _pwrd) internal view returns (IToken) {
if (_pwrd) {
return pwrd;
} else {
return gvt;
}
}
}
contract FixedVaults is Constants {
address public immutable DAI_VAULT;
address public immutable USDC_VAULT;
address public immutable USDT_VAULT;
constructor(address[N_COINS] memory _vaults) public {
DAI_VAULT = _vaults[0];
USDC_VAULT = _vaults[1];
USDT_VAULT = _vaults[2];
}
function getVault(uint256 index) internal view returns (address) {
if (index == 0) {
return DAI_VAULT;
} else if (index == 1) {
return USDC_VAULT;
} else {
return USDT_VAULT;
}
}
function vaults() internal view returns (address[N_COINS] memory _vaults) {
_vaults[0] = DAI_VAULT;
_vaults[1] = USDC_VAULT;
_vaults[2] = USDT_VAULT;
}
}
pragma solidity >=0.6.0 <0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN 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 payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this;
return msg.data;
}
}
pragma solidity >=0.6.0 <0.8.0;
/**
* @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 () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
pragma solidity >=0.6.0 <0.7.0;
interface IController {
function stablecoins() external view returns (address[3] memory);
function vaults() external view returns (address[3] memory);
function underlyingVaults(uint256 i) external view returns (address vault);
function curveVault() external view returns (address);
function pnl() external view returns (address);
function insurance() external view returns (address);
function lifeGuard() external view returns (address);
function buoy() external view returns (address);
function reward() external view returns (address);
function isValidBigFish(
bool pwrd,
bool deposit,
uint256 amount
) external view returns (bool);
function withdrawHandler() external view returns (address);
function emergencyHandler() external view returns (address);
function depositHandler() external view returns (address);
function totalAssets() external view returns (uint256);
function gTokenTotalAssets() external view returns (uint256);
function eoaOnly(address sender) external;
function getSkimPercent() external view returns (uint256);
function gToken(bool _pwrd) external view returns (address);
function emergencyState() external view returns (bool);
function deadCoin() external view returns (uint256);
function distributeStrategyGainLoss(uint256 gain, uint256 loss) external;
function burnGToken(
bool pwrd,
bool all,
address account,
uint256 amount,
uint256 bonus
) external;
function mintGToken(
bool pwrd,
address account,
uint256 amount
) external;
function getUserAssets(bool pwrd, address account) external view returns (uint256 deductUsd);
function referrals(address account) external view returns (address);
function addReferral(address account, address referral) external;
function getStrategiesTargetRatio() external view returns (uint256[] memory);
function withdrawalFee(bool pwrd) external view returns (uint256);
function validGTokenDecrease(uint256 amount) external view returns (bool);
}
pragma solidity >=0.6.0 <0.7.0;
interface IPausable {
function paused() external view returns (bool);
}
pragma solidity >=0.6.0 <0.7.0;
contract Controllable is Ownable {
address public controller;
event ChangeController(address indexed oldController, address indexed newController);
modifier whenNotPaused() {
require(!_pausable().paused(), "Pausable: paused");
_;
}
modifier whenPaused() {
require(_pausable().paused(), "Pausable: not paused");
_;
}
function ctrlPaused() public view returns (bool) {
return _pausable().paused();
}
function setController(address newController) external onlyOwner {
require(newController != address(0), "setController: !0x");
address oldController = controller;
controller = newController;
emit ChangeController(oldController, newController);
}
function _controller() internal view returns (IController) {
require(controller != address(0), "Controller not set");
return IController(controller);
}
function _pausable() internal view returns (IPausable) {
require(controller != address(0), "Controller not set");
return IPausable(controller);
}
}
pragma solidity >=0.6.0 <0.7.0;
interface IBuoy {
function safetyCheck() external view returns (bool);
function updateRatios() external returns (bool);
function updateRatiosWithTolerance(uint256 tolerance) external returns (bool);
function lpToUsd(uint256 inAmount) external view returns (uint256);
function usdToLp(uint256 inAmount) external view returns (uint256);
function stableToUsd(uint256[3] calldata inAmount, bool deposit) external view returns (uint256);
function stableToLp(uint256[3] calldata inAmount, bool deposit) external view returns (uint256);
function singleStableFromLp(uint256 inAmount, int128 i) external view returns (uint256);
function getVirtualPrice() external view returns (uint256);
function singleStableFromUsd(uint256 inAmount, int128 i) external view returns (uint256);
function singleStableToUsd(uint256 inAmount, uint256 i) external view returns (uint256);
}
pragma solidity >=0.6.0 <0.7.0;
interface IDepositHandler {
function depositGvt(
uint256[3] calldata inAmounts,
uint256 minAmount,
address _referral
) external;
function depositPwrd(
uint256[3] calldata inAmounts,
uint256 minAmount,
address _referral
) external;
}
pragma solidity >=0.6.0 <0.7.0;
interface IERC20Detailed {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
pragma solidity >=0.6.0 <0.7.0;
interface IInsurance {
function calculateDepositDeltasOnAllVaults() external view returns (uint256[3] memory);
function rebalanceTrigger() external view returns (bool sysNeedRebalance);
function rebalance() external;
function calcSkim() external view returns (uint256);
function rebalanceForWithdraw(uint256 withdrawUsd, bool pwrd) external returns (bool);
function getDelta(uint256 withdrawUsd) external view returns (uint256[3] memory delta);
function getVaultDeltaForDeposit(uint256 amount) external view returns (uint256[3] memory, uint256);
function sortVaultsByDelta(bool bigFirst) external view returns (uint256[3] memory vaultIndexes);
function getStrategiesTargetRatio(uint256 utilRatio) external view returns (uint256[] memory);
function setUnderlyingTokenPercents(uint256[3] calldata percents) external;
}
pragma solidity >=0.6.0 <0.7.0;
interface ILifeGuard {
function assets(uint256 i) external view returns (uint256);
function totalAssets() external view returns (uint256);
function getAssets() external view returns (uint256[3] memory);
function totalAssetsUsd() external view returns (uint256);
function availableUsd() external view returns (uint256 dollar);
function availableLP() external view returns (uint256);
function depositStable(bool rebalance) external returns (uint256);
function investToCurveVault() external;
function distributeCurveVault(uint256 amount, uint256[3] memory delta) external returns (uint256[3] memory);
function deposit() external returns (uint256 usdAmount);
function withdrawSingleByLiquidity(
uint256 i,
uint256 minAmount,
address recipient
) external returns (uint256 usdAmount, uint256 amount);
function withdrawSingleByExchange(
uint256 i,
uint256 minAmount,
address recipient
) external returns (uint256 usdAmount, uint256 amount);
function invest(uint256 whaleDepositAmount, uint256[3] calldata delta) external returns (uint256 dollarAmount);
function getBuoy() external view returns (address);
function investSingle(
uint256[3] calldata inAmounts,
uint256 i,
uint256 j
) external returns (uint256 dollarAmount);
function investToCurveVaultTrigger() external view returns (bool _invest);
}
pragma solidity >=0.6.0 <0.7.0;
contract DepositHandler is Controllable, FixedStablecoins, FixedVaults, IDepositHandler {
using SafeERC20 for IERC20;
using SafeMath for uint256;
IController public ctrl;
ILifeGuard public lg;
IBuoy public buoy;
IInsurance public insurance;
uint256 constant USDT_INDEX = 2;
event LogNewDependencies(address controller, address lifeguard, address buoy, address insurance);
event LogNewDeposit(
address indexed user,
address indexed referral,
bool pwrd,
uint256 usdAmount,
uint256[N_COINS] tokens
);
constructor(
address[N_COINS] memory _vaults,
address[N_COINS] memory _tokens,
uint256[N_COINS] memory _decimals
) public FixedStablecoins(_tokens, _decimals) FixedVaults(_vaults) {
}
function setDependencies() external onlyOwner {
ctrl = _controller();
lg = ILifeGuard(ctrl.lifeGuard());
buoy = IBuoy(lg.getBuoy());
insurance = IInsurance(ctrl.insurance());
emit LogNewDependencies(address(ctrl), address(lg), address(buoy), address(insurance));
}
function depositPwrd(
uint256[N_COINS] memory inAmounts,
uint256 minAmount,
address _referral
) external override whenNotPaused {
depositGToken(inAmounts, minAmount, _referral, true);
}
function depositGvt(
uint256[N_COINS] memory inAmounts,
uint256 minAmount,
address _referral
) external override whenNotPaused {
depositGToken(inAmounts, minAmount, _referral, false);
}
function depositGToken(
uint256[N_COINS] memory inAmounts,
uint256 minAmount,
address _referral,
bool pwrd
) private {
IController _ctrl = ctrl;
_ctrl.eoaOnly(msg.sender);
require(minAmount > 0, "minAmount is 0");
require(buoy.safetyCheck(), "!safetyCheck");
_ctrl.addReferral(msg.sender, _referral);
uint256 roughUsd = roughUsd(inAmounts);
uint256 dollarAmount = _deposit(pwrd, roughUsd, minAmount, inAmounts);
_ctrl.mintGToken(pwrd, msg.sender, dollarAmount);
emit LogNewDeposit(msg.sender, _ctrl.referrals(msg.sender), pwrd, dollarAmount, inAmounts);
}
function _deposit(
bool pwrd,
uint256 roughUsd,
uint256 minAmount,
uint256[N_COINS] memory inAmounts
) private returns (uint256 dollarAmount) {
IBuoy _buoy = buoy;
if (ctrl.isValidBigFish(pwrd, true, roughUsd)) {
address _lg = address(lg);
for (uint256 i = 0; i < N_COINS; i++) {
if (inAmounts[i] > 0) {
IERC20 token = IERC20(getToken(i));
if (i == USDT_INDEX) {
uint256 current = token.balanceOf(_lg);
token.safeTransferFrom(msg.sender, _lg, inAmounts[i]);
inAmounts[i] = token.balanceOf(_lg).sub(current);
} else {
token.safeTransferFrom(msg.sender, _lg, inAmounts[i]);
}
}
}
dollarAmount = _invest(inAmounts, roughUsd);
} else {
for (uint256 i = 0; i < N_COINS; i++) {
if (inAmounts[i] > 0) {
IERC20 token = IERC20(getToken(i));
address _vault = getVault(i);
if (i == USDT_INDEX) {
uint256 current = token.balanceOf(_vault);
token.safeTransferFrom(msg.sender, _vault, inAmounts[i]);
inAmounts[i] = token.balanceOf(_vault).sub(current);
} else {
token.safeTransferFrom(msg.sender, _vault, inAmounts[i]);
}
}
}
dollarAmount = _buoy.stableToUsd(inAmounts, true);
}
require(dollarAmount >= _buoy.lpToUsd(minAmount), "!minAmount");
}
function _invest(uint256[N_COINS] memory _inAmounts, uint256 roughUsd) internal returns (uint256 dollarAmount) {
IInsurance _insurance = insurance;
ILifeGuard _lg = lg;
(uint256[N_COINS] memory vaultIndexes, uint256 _vaults) = _insurance.getVaultDeltaForDeposit(roughUsd);
if (_vaults < N_COINS) {
dollarAmount = _lg.investSingle(_inAmounts, vaultIndexes[0], vaultIndexes[1]);
} else {
uint256 outAmount = _lg.deposit();
uint256[N_COINS] memory delta = _insurance.calculateDepositDeltasOnAllVaults();
dollarAmount = _lg.invest(outAmount, delta);
}
}
function roughUsd(uint256[N_COINS] memory inAmounts) private view returns (uint256 usdAmount) {
for (uint256 i; i < N_COINS; i++) {
if (inAmounts[i] > 0) {
usdAmount = usdAmount.add(inAmounts[i].mul(10**18).div(getDecimal(i)));
}
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[3]","name":"_vaults","type":"address[3]"},{"internalType":"address[3]","name":"_tokens","type":"address[3]"},{"internalType":"uint256[3]","name":"_decimals","type":"uint256[3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldController","type":"address"},{"indexed":true,"internalType":"address","name":"newController","type":"address"}],"name":"ChangeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"controller","type":"address"},{"indexed":false,"internalType":"address","name":"lifeguard","type":"address"},{"indexed":false,"internalType":"address","name":"buoy","type":"address"},{"indexed":false,"internalType":"address","name":"insurance","type":"address"}],"name":"LogNewDependencies","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":false,"internalType":"bool","name":"pwrd","type":"bool"},{"indexed":false,"internalType":"uint256","name":"usdAmount","type":"uint256"},{"indexed":false,"internalType":"uint256[3]","name":"tokens","type":"uint256[3]"}],"name":"LogNewDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CHAINLINK_PRICE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHAINLINK_PRICE_DECIMAL_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_RATIO_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_RATIO_DECIMALS_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI_VAULT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_DECIMALS_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"N_COINS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_DECIMAL_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_VAULT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_VAULT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buoy","outputs":[{"internalType":"contract IBuoy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ctrl","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ctrlPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"inAmounts","type":"uint256[3]"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"depositGvt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"inAmounts","type":"uint256[3]"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"depositPwrd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"insurance","outputs":[{"internalType":"contract IInsurance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lg","outputs":[{"internalType":"contract ILifeGuard","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setDependencies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6101a060405234801561001157600080fd5b506040516122af3803806122af833981810160405261012081101561003557600080fd5b506060810160c08201828282600061004b610105565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516001600160601b0319606091821b8116608052602080850151831b821660a052604094850151831b821660c052835160e052838101516101005292840151610120528451821b81166101405291840151811b821661016052929091015190911b166101805250610109915050565b3390565b60805160601c60a05160601c60c05160601c60e05161010051610120516101405160601c6101605160601c6101805160601c6121006101af600039806109fd5280611c43525080610b9c5280611c1c525080610b405280611bec525080610bc052806116a0525080610a3052806116795250806108835280611649525080610a5952806118245250806108a752806117fd525080610b6452806117cd52506121006000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063ae70b98a1161010f578063e088c67c116100a2578063eba6438911610071578063eba64389146103ea578063ef2cfd1a146103f2578063f2fde38b146103fa578063f77c479114610420576101e5565b8063e088c67c146103ca578063e0bab4c4146103d2578063e963f18f146103da578063ea0d5c52146103e2576101e5565b8063c5008f46116100de578063c5008f4614610352578063c54e44eb1461035a578063d365d30314610362578063e0501ecf146103c2576101e5565b8063ae70b98a14610332578063b14e12841461033a578063b1cbf3ad14610342578063c1419def1461034a576101e5565b80637f185162116101875780638da5cb5b116101565780638da5cb5b146102f457806390706425146102fc57806392eefe9b14610304578063a432729b1461032a576101e5565b80637f185162146102d45780637ffc945c146102dc57806389a30271146102e457806389cf3204146102ec576101e5565b806329357750116101c3578063293577501461028257806342f37c75146102a05780636f923e73146102c4578063715018a6146102cc576101e5565b806319e40993146101ea5780631ccbdcf214610206578063250108f614610268575b600080fd5b6101f2610428565b604080519115158252519081900360200190f35b610266600480360360a081101561021c57600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600092019190915250919450508135925050602001356001600160a01b031661049b565b005b61027061055e565b60408051918252519081900360200190f35b61028a610565565b6040805160ff9092168252519081900360200190f35b6102a861056a565b604080516001600160a01b039092168252519081900360200190f35b61028a610579565b61026661057e565b610266610620565b610270610881565b6102a86108a5565b6102a86108c9565b6102a86108d8565b61028a6108e7565b6102666004803603602081101561031a57600080fd5b50356001600160a01b03166108ec565b6102a86109e6565b6102706109f5565b6102a86109fb565b6102a8610a1f565b610270610a2e565b61028a610a52565b6102a8610a57565b610266600480360360a081101561037857600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600092019190915250919450508135925050602001356001600160a01b0316610a7b565b610270610b39565b6102a8610b3e565b6102a8610b62565b610270610b86565b610270610b8e565b6102a8610b9a565b610270610bbe565b6102666004803603602081101561041057600080fd5b50356001600160a01b0316610be2565b6102a8610cda565b6000610432610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046a57600080fd5b505afa15801561047e573d6000803e3d6000fd5b505050506040513d602081101561049457600080fd5b5051905090565b6104a3610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104db57600080fd5b505afa1580156104ef573d6000803e3d6000fd5b505050506040513d602081101561050557600080fd5b50511561054c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6105598383836000610d4e565b505050565b620f424081565b600381565b6002546001600160a01b031681565b600881565b610586611095565b6000546001600160a01b039081169116146105d6576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610628611095565b6000546001600160a01b03908116911614610678576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b610680610ce9565b600280546001600160a01b0319166001600160a01b03928316179081905560408051631673f39960e31b81529051919092169163b39f9cc8916004808301926020929190829003018186803b1580156106d857600080fd5b505afa1580156106ec573d6000803e3d6000fd5b505050506040513d602081101561070257600080fd5b5051600380546001600160a01b0319166001600160a01b0392831617908190556040805163522b5b8160e11b81529051919092169163a456b702916004808301926020929190829003018186803b15801561075c57600080fd5b505afa158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b5051600480546001600160a01b0319166001600160a01b0392831617815560025460408051632273cc8160e21b8152905191909316926389cf32049281810192602092909190829003018186803b1580156107e057600080fd5b505afa1580156107f4573d6000803e3d6000fd5b505050506040513d602081101561080a57600080fd5b5051600580546001600160a01b0319166001600160a01b0392831617908190556002546003546004546040805193861684529185166020840152841682820152919092166060830152517f2d1d4d782fda2a314583a36c6388f998eaa112c1c1e231dd07782838e8328b3d916080908290030190a1565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160a01b031681565b6000546001600160a01b031690565b600481565b6108f4611095565b6000546001600160a01b03908116911614610944576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b6001600160a01b038116610994576040805162461bcd60e51b81526020600482015260126024820152710e6cae886dedce8e4ded8d8cae474404260f60731b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7bd9aab74fc8b860dff8328bda449632993abb9bd61340154740618a3debeb8990600090a35050565b6003546001600160a01b031681565b61271081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601281565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a83610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d6020811015610ae557600080fd5b505115610b2c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6105598383836001610d4e565b600681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6305f5e10081565b670de0b6b3a764000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bea611095565b6000546001600160a01b03908116911614610c3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b6001600160a01b038116610c7f5760405162461bcd60e51b81526004018080602001828103825260268152602001806120146026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6001546000906001600160a01b0316610d3e576040805162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9bdb1b195c881b9bdd081cd95d60721b604482015290519081900360640190fd5b506001546001600160a01b031690565b600254604080516351107b0560e11b815233600482015290516001600160a01b0390921691829163a220f60a91602480830192600092919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b5050505060008411610df9576040805162461bcd60e51b815260206004820152600e60248201526d06d696e416d6f756e7420697320360941b604482015290519081900360640190fd5b600480546040805163aff1d8e560e01b815290516001600160a01b039092169263aff1d8e5928282019260209290829003018186803b158015610e3b57600080fd5b505afa158015610e4f573d6000803e3d6000fd5b505050506040513d6020811015610e6557600080fd5b5051610ea7576040805162461bcd60e51b815260206004820152600c60248201526b21736166657479436865636b60a01b604482015290519081900360640190fd5b60408051630b5c3f8760e01b81523360048201526001600160a01b038581166024830152915191831691630b5c3f879160448082019260009290919082900301818387803b158015610ef857600080fd5b505af1158015610f0c573d6000803e3d6000fd5b505050506000610f1b86611099565b90506000610f2b8483888a61110f565b60408051630251d89360e01b815286151560048201523360248201526044810183905290519192506001600160a01b03851691630251d8939160648082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b505060408051639ca423b360e01b815233600482015290516001600160a01b0387169350639ca423b392506024808301926020929190829003018186803b158015610fe357600080fd5b505afa158015610ff7573d6000803e3d6000fd5b505050506040513d602081101561100d57600080fd5b5051604080518615158152602081018490526001600160a01b039092169133917f106d567c81498246019397cc04d5ce37ba76461ce2c881c06a2097b13b9b0fc991889186918d91810182606080838360005b83811015611078578181015183820152602001611060565b50505050905001935050505060405180910390a350505050505050565b3390565b6000805b60038110156111095760008382600381106110b457fe5b60200201511115611101576110fe6110f76110ce8361163f565b6110f1670de0b6b3a76400008786600381106110e657fe5b6020020151906116c5565b90611727565b8390611769565b91505b60010161109d565b50919050565b6004805460025460408051634094685960e01b8152881515948101949094526001602485015260448401879052516000936001600160a01b0393841693909216916340946859916064808301926020929190829003018186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d602081101561119f57600080fd5b505115611371576003546001600160a01b031660005b600381101561135e5760008582600381106111cc57fe5b602002015111156113565760006111e2826117c3565b9050600282141561132c576000816001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561123c57600080fd5b505afa158015611250573d6000803e3d6000fd5b505050506040513d602081101561126657600080fd5b50519050611292338589866003811061127b57fe5b60200201516001600160a01b038616929190611848565b61131581836001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b5051906118a8565b87846003811061132157fe5b602002015250611354565b611354338488856003811061133d57fe5b60200201516001600160a01b038516929190611848565b505b6001016111b5565b5061136984876118ea565b925050611585565b60005b60038110156114e257600084826003811061138b57fe5b602002015111156114da5760006113a1826117c3565b905060006113ae83611be2565b905060028314156114c6576000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d602081101561143257600080fd5b5051905061145e338389876003811061144757fe5b60200201516001600160a01b038716929190611848565b6114af81846001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112e357600080fd5b8785600381106114bb57fe5b6020020152506114d7565b6114d7338288866003811061127b57fe5b50505b600101611374565b5060405163538ef7e160e01b81526001600160a01b0382169063538ef7e19085906001906004018083606080838360005b8381101561152b578181015183820152602001611513565b5050505090500182151581526020019250505060206040518083038186803b15801561155657600080fd5b505afa15801561156a573d6000803e3d6000fd5b505050506040513d602081101561158057600080fd5b505191505b806001600160a01b03166303e6f5cc856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d60208110156115f357600080fd5b5051821015611636576040805162461bcd60e51b815260206004820152600a602482015269085b5a5b905b5bdd5b9d60b21b604482015290519081900360640190fd5b50949350505050565b60008161166d57507f00000000000000000000000000000000000000000000000000000000000000006116c0565b816001141561169d57507f00000000000000000000000000000000000000000000000000000000000000006116c0565b507f00000000000000000000000000000000000000000000000000000000000000005b919050565b6000826116d457506000611721565b828202828482816116e157fe5b041461171e5760405162461bcd60e51b81526004018080602001828103825260218152602001806120606021913960400191505060405180910390fd5b90505b92915050565b600061171e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c67565b60008282018381101561171e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816117f157507f00000000000000000000000000000000000000000000000000000000000000006116c0565b816001141561182157507f00000000000000000000000000000000000000000000000000000000000000006116c0565b507f00000000000000000000000000000000000000000000000000000000000000006116c0565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118a2908590611d0b565b50505050565b600061171e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dbc565b6005546003546000916001600160a01b039081169116611908611ff5565b6000836001600160a01b031663aa0b9ba5876040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561198757600080fd5b50606081015190925090506003811015611a4c5781516020830151604051630c68334f60e31b81526001600160a01b038616926363419a78928b926004018084606080838360005b838110156119e75781810151838201526020016119cf565b505050509050018381526020018281526020019350505050602060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b50519450611bd8565b6000836001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a8957600080fd5b505af1158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b50519050611abf611ff5565b856001600160a01b031663d697aa876040518163ffffffff1660e01b815260040160606040518083038186803b158015611af857600080fd5b505afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015611b3157600080fd5b50604051631af57acf60e31b8152600481018481529192506001600160a01b0387169163d7abd678918591859160240182606080838360005b83811015611b82578181015183820152602001611b6a565b5050505090500192505050602060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b5051965050505b5050505092915050565b600081611c1057507f00000000000000000000000000000000000000000000000000000000000000006116c0565b8160011415611c4057507f00000000000000000000000000000000000000000000000000000000000000006116c0565b507f00000000000000000000000000000000000000000000000000000000000000006116c0565b60008183611cf35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cb8578181015183820152602001611ca0565b50505050905090810190601f168015611ce55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611cff57fe5b049150505b9392505050565b6060611d60826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e169092919063ffffffff16565b80519091501561055957808060200190516020811015611d7f57600080fd5b50516105595760405162461bcd60e51b815260040180806020018281038252602a8152602001806120a1602a913960400191505060405180910390fd5b60008184841115611e0e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cb8578181015183820152602001611ca0565b505050900390565b6060611e258484600085611e2d565b949350505050565b606082471015611e6e5760405162461bcd60e51b815260040180806020018281038252602681526020018061203a6026913960400191505060405180910390fd5b611e7785611f89565b611ec8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611f075780518252601f199092019160209182019101611ee8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f69576040519150601f19603f3d011682016040523d82523d6000602084013e611f6e565b606091505b5091509150611f7e828286611f8f565b979650505050505050565b3b151590565b60608315611f9e575081611d04565b825115611fae5782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315611cb8578181015183820152602001611ca0565b6040518060600160405280600390602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220571df32751dc04215216c2c25c7638f02653796ca3de356b3912e8e28bb8721964736f6c634300060c0033000000000000000000000000277947d84a2ec370a636683799351acef97fec600000000000000000000000009b2688da7d80641f6e46a76889ea7f8b597717240000000000000000000000006419cb544878e8c4faa5eaf22d59d4a96e5f12fa0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063ae70b98a1161010f578063e088c67c116100a2578063eba6438911610071578063eba64389146103ea578063ef2cfd1a146103f2578063f2fde38b146103fa578063f77c479114610420576101e5565b8063e088c67c146103ca578063e0bab4c4146103d2578063e963f18f146103da578063ea0d5c52146103e2576101e5565b8063c5008f46116100de578063c5008f4614610352578063c54e44eb1461035a578063d365d30314610362578063e0501ecf146103c2576101e5565b8063ae70b98a14610332578063b14e12841461033a578063b1cbf3ad14610342578063c1419def1461034a576101e5565b80637f185162116101875780638da5cb5b116101565780638da5cb5b146102f457806390706425146102fc57806392eefe9b14610304578063a432729b1461032a576101e5565b80637f185162146102d45780637ffc945c146102dc57806389a30271146102e457806389cf3204146102ec576101e5565b806329357750116101c3578063293577501461028257806342f37c75146102a05780636f923e73146102c4578063715018a6146102cc576101e5565b806319e40993146101ea5780631ccbdcf214610206578063250108f614610268575b600080fd5b6101f2610428565b604080519115158252519081900360200190f35b610266600480360360a081101561021c57600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600092019190915250919450508135925050602001356001600160a01b031661049b565b005b61027061055e565b60408051918252519081900360200190f35b61028a610565565b6040805160ff9092168252519081900360200190f35b6102a861056a565b604080516001600160a01b039092168252519081900360200190f35b61028a610579565b61026661057e565b610266610620565b610270610881565b6102a86108a5565b6102a86108c9565b6102a86108d8565b61028a6108e7565b6102666004803603602081101561031a57600080fd5b50356001600160a01b03166108ec565b6102a86109e6565b6102706109f5565b6102a86109fb565b6102a8610a1f565b610270610a2e565b61028a610a52565b6102a8610a57565b610266600480360360a081101561037857600080fd5b8101908080606001906003806020026040519081016040528092919082600360200280828437600092019190915250919450508135925050602001356001600160a01b0316610a7b565b610270610b39565b6102a8610b3e565b6102a8610b62565b610270610b86565b610270610b8e565b6102a8610b9a565b610270610bbe565b6102666004803603602081101561041057600080fd5b50356001600160a01b0316610be2565b6102a8610cda565b6000610432610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046a57600080fd5b505afa15801561047e573d6000803e3d6000fd5b505050506040513d602081101561049457600080fd5b5051905090565b6104a3610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104db57600080fd5b505afa1580156104ef573d6000803e3d6000fd5b505050506040513d602081101561050557600080fd5b50511561054c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6105598383836000610d4e565b505050565b620f424081565b600381565b6002546001600160a01b031681565b600881565b610586611095565b6000546001600160a01b039081169116146105d6576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610628611095565b6000546001600160a01b03908116911614610678576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b610680610ce9565b600280546001600160a01b0319166001600160a01b03928316179081905560408051631673f39960e31b81529051919092169163b39f9cc8916004808301926020929190829003018186803b1580156106d857600080fd5b505afa1580156106ec573d6000803e3d6000fd5b505050506040513d602081101561070257600080fd5b5051600380546001600160a01b0319166001600160a01b0392831617908190556040805163522b5b8160e11b81529051919092169163a456b702916004808301926020929190829003018186803b15801561075c57600080fd5b505afa158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b5051600480546001600160a01b0319166001600160a01b0392831617815560025460408051632273cc8160e21b8152905191909316926389cf32049281810192602092909190829003018186803b1580156107e057600080fd5b505afa1580156107f4573d6000803e3d6000fd5b505050506040513d602081101561080a57600080fd5b5051600580546001600160a01b0319166001600160a01b0392831617908190556002546003546004546040805193861684529185166020840152841682820152919092166060830152517f2d1d4d782fda2a314583a36c6388f998eaa112c1c1e231dd07782838e8328b3d916080908290030190a1565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6005546001600160a01b031681565b6000546001600160a01b031690565b600481565b6108f4611095565b6000546001600160a01b03908116911614610944576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b6001600160a01b038116610994576040805162461bcd60e51b81526020600482015260126024820152710e6cae886dedce8e4ded8d8cae474404260f60731b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7bd9aab74fc8b860dff8328bda449632993abb9bd61340154740618a3debeb8990600090a35050565b6003546001600160a01b031681565b61271081565b7f0000000000000000000000006419cb544878e8c4faa5eaf22d59d4a96e5f12fa81565b6004546001600160a01b031681565b7f00000000000000000000000000000000000000000000000000000000000f424081565b601281565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b610a83610ce9565b6001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d6020811015610ae557600080fd5b505115610b2c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6105598383836001610d4e565b600681565b7f000000000000000000000000277947d84a2ec370a636683799351acef97fec6081565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6305f5e10081565b670de0b6b3a764000081565b7f0000000000000000000000009b2688da7d80641f6e46a76889ea7f8b5977172481565b7f00000000000000000000000000000000000000000000000000000000000f424081565b610bea611095565b6000546001600160a01b03908116911614610c3a576040805162461bcd60e51b81526020600482018190526024820152600080516020612081833981519152604482015290519081900360640190fd5b6001600160a01b038116610c7f5760405162461bcd60e51b81526004018080602001828103825260268152602001806120146026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6001546000906001600160a01b0316610d3e576040805162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9bdb1b195c881b9bdd081cd95d60721b604482015290519081900360640190fd5b506001546001600160a01b031690565b600254604080516351107b0560e11b815233600482015290516001600160a01b0390921691829163a220f60a91602480830192600092919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b5050505060008411610df9576040805162461bcd60e51b815260206004820152600e60248201526d06d696e416d6f756e7420697320360941b604482015290519081900360640190fd5b600480546040805163aff1d8e560e01b815290516001600160a01b039092169263aff1d8e5928282019260209290829003018186803b158015610e3b57600080fd5b505afa158015610e4f573d6000803e3d6000fd5b505050506040513d6020811015610e6557600080fd5b5051610ea7576040805162461bcd60e51b815260206004820152600c60248201526b21736166657479436865636b60a01b604482015290519081900360640190fd5b60408051630b5c3f8760e01b81523360048201526001600160a01b038581166024830152915191831691630b5c3f879160448082019260009290919082900301818387803b158015610ef857600080fd5b505af1158015610f0c573d6000803e3d6000fd5b505050506000610f1b86611099565b90506000610f2b8483888a61110f565b60408051630251d89360e01b815286151560048201523360248201526044810183905290519192506001600160a01b03851691630251d8939160648082019260009290919082900301818387803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b505060408051639ca423b360e01b815233600482015290516001600160a01b0387169350639ca423b392506024808301926020929190829003018186803b158015610fe357600080fd5b505afa158015610ff7573d6000803e3d6000fd5b505050506040513d602081101561100d57600080fd5b5051604080518615158152602081018490526001600160a01b039092169133917f106d567c81498246019397cc04d5ce37ba76461ce2c881c06a2097b13b9b0fc991889186918d91810182606080838360005b83811015611078578181015183820152602001611060565b50505050905001935050505060405180910390a350505050505050565b3390565b6000805b60038110156111095760008382600381106110b457fe5b60200201511115611101576110fe6110f76110ce8361163f565b6110f1670de0b6b3a76400008786600381106110e657fe5b6020020151906116c5565b90611727565b8390611769565b91505b60010161109d565b50919050565b6004805460025460408051634094685960e01b8152881515948101949094526001602485015260448401879052516000936001600160a01b0393841693909216916340946859916064808301926020929190829003018186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d602081101561119f57600080fd5b505115611371576003546001600160a01b031660005b600381101561135e5760008582600381106111cc57fe5b602002015111156113565760006111e2826117c3565b9050600282141561132c576000816001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561123c57600080fd5b505afa158015611250573d6000803e3d6000fd5b505050506040513d602081101561126657600080fd5b50519050611292338589866003811061127b57fe5b60200201516001600160a01b038616929190611848565b61131581836001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112e357600080fd5b505afa1580156112f7573d6000803e3d6000fd5b505050506040513d602081101561130d57600080fd5b5051906118a8565b87846003811061132157fe5b602002015250611354565b611354338488856003811061133d57fe5b60200201516001600160a01b038516929190611848565b505b6001016111b5565b5061136984876118ea565b925050611585565b60005b60038110156114e257600084826003811061138b57fe5b602002015111156114da5760006113a1826117c3565b905060006113ae83611be2565b905060028314156114c6576000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d602081101561143257600080fd5b5051905061145e338389876003811061144757fe5b60200201516001600160a01b038716929190611848565b6114af81846001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112e357600080fd5b8785600381106114bb57fe5b6020020152506114d7565b6114d7338288866003811061127b57fe5b50505b600101611374565b5060405163538ef7e160e01b81526001600160a01b0382169063538ef7e19085906001906004018083606080838360005b8381101561152b578181015183820152602001611513565b5050505090500182151581526020019250505060206040518083038186803b15801561155657600080fd5b505afa15801561156a573d6000803e3d6000fd5b505050506040513d602081101561158057600080fd5b505191505b806001600160a01b03166303e6f5cc856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d60208110156115f357600080fd5b5051821015611636576040805162461bcd60e51b815260206004820152600a602482015269085b5a5b905b5bdd5b9d60b21b604482015290519081900360640190fd5b50949350505050565b60008161166d57507f0000000000000000000000000000000000000000000000000de0b6b3a76400006116c0565b816001141561169d57507f00000000000000000000000000000000000000000000000000000000000f42406116c0565b507f00000000000000000000000000000000000000000000000000000000000f42405b919050565b6000826116d457506000611721565b828202828482816116e157fe5b041461171e5760405162461bcd60e51b81526004018080602001828103825260218152602001806120606021913960400191505060405180910390fd5b90505b92915050565b600061171e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c67565b60008282018381101561171e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816117f157507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6116c0565b816001141561182157507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486116c0565b507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76116c0565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118a2908590611d0b565b50505050565b600061171e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dbc565b6005546003546000916001600160a01b039081169116611908611ff5565b6000836001600160a01b031663aa0b9ba5876040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250608081101561198757600080fd5b50606081015190925090506003811015611a4c5781516020830151604051630c68334f60e31b81526001600160a01b038616926363419a78928b926004018084606080838360005b838110156119e75781810151838201526020016119cf565b505050509050018381526020018281526020019350505050602060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b50519450611bd8565b6000836001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a8957600080fd5b505af1158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b50519050611abf611ff5565b856001600160a01b031663d697aa876040518163ffffffff1660e01b815260040160606040518083038186803b158015611af857600080fd5b505afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015611b3157600080fd5b50604051631af57acf60e31b8152600481018481529192506001600160a01b0387169163d7abd678918591859160240182606080838360005b83811015611b82578181015183820152602001611b6a565b5050505090500192505050602060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b5051965050505b5050505092915050565b600081611c1057507f000000000000000000000000277947d84a2ec370a636683799351acef97fec606116c0565b8160011415611c4057507f0000000000000000000000009b2688da7d80641f6e46a76889ea7f8b597717246116c0565b507f0000000000000000000000006419cb544878e8c4faa5eaf22d59d4a96e5f12fa6116c0565b60008183611cf35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cb8578181015183820152602001611ca0565b50505050905090810190601f168015611ce55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611cff57fe5b049150505b9392505050565b6060611d60826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e169092919063ffffffff16565b80519091501561055957808060200190516020811015611d7f57600080fd5b50516105595760405162461bcd60e51b815260040180806020018281038252602a8152602001806120a1602a913960400191505060405180910390fd5b60008184841115611e0e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cb8578181015183820152602001611ca0565b505050900390565b6060611e258484600085611e2d565b949350505050565b606082471015611e6e5760405162461bcd60e51b815260040180806020018281038252602681526020018061203a6026913960400191505060405180910390fd5b611e7785611f89565b611ec8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611f075780518252601f199092019160209182019101611ee8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f69576040519150601f19603f3d011682016040523d82523d6000602084013e611f6e565b606091505b5091509150611f7e828286611f8f565b979650505050505050565b3b151590565b60608315611f9e575081611d04565b825115611fae5782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315611cb8578181015183820152602001611ca0565b6040518060600160405280600390602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220571df32751dc04215216c2c25c7638f02653796ca3de356b3912e8e28bb8721964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000277947d84a2ec370a636683799351acef97fec600000000000000000000000009b2688da7d80641f6e46a76889ea7f8b597717240000000000000000000000006419cb544878e8c4faa5eaf22d59d4a96e5f12fa0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240
-----Decoded View---------------
Arg [0] : _vaults (address[3]): 0x277947D84A2Ec370a636683799351acef97fec60,0x9B2688DA7d80641F6E46A76889EA7F8B59771724,0x6419Cb544878E8C4faA5EaF22D59d4A96E5F12FA
Arg [1] : _tokens (address[3]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _decimals (uint256[3]): 1000000000000000000,1000000,1000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000277947d84a2ec370a636683799351acef97fec60
Arg [1] : 0000000000000000000000009b2688da7d80641f6e46a76889ea7f8b59771724
Arg [2] : 0000000000000000000000006419cb544878e8c4faa5eaf22d59d4a96e5f12fa
Arg [3] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [4] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [5] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [6] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [8] : 00000000000000000000000000000000000000000000000000000000000f4240
Deployed Bytecode Sourcemap
32898:5244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28075:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;34293:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34293:231:0;;-1:-1:-1;;34293:231:0;;;-1:-1:-1;;34293:231:0;;;-1:-1:-1;;;;;34293:231:0;;:::i;:::-;;17422:87;;;:::i;:::-;;;;;;;;;;;;;;;;16889:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33063:23;;;:::i;:::-;;;;-1:-1:-1;;;;;33063:23:0;;;;;;;;;;;;;;17066:50;;;:::i;24714:148::-;;;:::i;33732:314::-;;;:::i;19658:37::-;;;:::i;19582:29::-;;;:::i;33144:27::-;;;:::i;24072:79::-;;;:::i;17224:45::-;;;:::i;28178:286::-;;;;;;;;;;;;;;;;-1:-1:-1;28178:286:0;-1:-1:-1;;;;;28178:286:0;;:::i;33093:20::-;;;:::i;17276:84::-;;;:::i;21537:35::-;;;:::i;33120:17::-;;;:::i;19703:38::-;;;:::i;16929:43::-;;;:::i;19619:29::-;;;:::i;34054:231::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34054:231:0;;-1:-1:-1;;34054:231:0;;;-1:-1:-1;;34054:231:0;;;-1:-1:-1;;;;;34054:231:0;;:::i;17367:48::-;;;:::i;21454:34::-;;;:::i;19546:28::-;;;:::i;17123:94::-;;;:::i;16980:79::-;;;:::i;21495:35::-;;;:::i;19749:38::-;;;:::i;25017:244::-;;;;;;;;;;;;;;;;-1:-1:-1;25017:244:0;-1:-1:-1;;;;;25017:244:0;;:::i;27720:25::-;;;:::i;28075:95::-;28118:4;28142:11;:9;:11::i;:::-;-1:-1:-1;;;;;28142:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28142:20:0;;-1:-1:-1;28075:95:0;:::o;34293:231::-;27892:11;:9;:11::i;:::-;-1:-1:-1;;;;;27892:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27892:20:0;27891:21;27883:50;;;;;-1:-1:-1;;;27883:50:0;;;;;;;;;;;;-1:-1:-1;;;27883:50:0;;;;;;;;;;;;;;;34463:53:::1;34477:9;34488;34499;34510:5;34463:13;:53::i;:::-;34293:231:::0;;;:::o;17422:87::-;17476:33;17422:87;:::o;16889:33::-;16921:1;16889:33;:::o;33063:23::-;;;-1:-1:-1;;;;;33063:23:0;;:::o;17066:50::-;17115:1;17066:50;:::o;24714:148::-;24294:12;:10;:12::i;:::-;24284:6;;-1:-1:-1;;;;;24284:6:0;;;:22;;;24276:67;;;;;-1:-1:-1;;;24276:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24276:67:0;;;;;;;;;;;;;;;24821:1:::1;24805:6:::0;;24784:40:::1;::::0;-1:-1:-1;;;;;24805:6:0;;::::1;::::0;24784:40:::1;::::0;24821:1;;24784:40:::1;24852:1;24835:19:::0;;-1:-1:-1;;;;;;24835:19:0::1;::::0;;24714:148::o;33732:314::-;24294:12;:10;:12::i;:::-;24284:6;;-1:-1:-1;;;;;24284:6:0;;;:22;;;24276:67;;;;;-1:-1:-1;;;24276:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24276:67:0;;;;;;;;;;;;;;;33796:13:::1;:11;:13::i;:::-;33789:4;:20:::0;;-1:-1:-1;;;;;;33789:20:0::1;-1:-1:-1::0;;;;;33789:20:0;;::::1;;::::0;;;;33836:16:::1;::::0;;-1:-1:-1;;;33836:16:0;;;;:4;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:4;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33836:16:0;33820:2:::1;:33:::0;;-1:-1:-1;;;;;;33820:33:0::1;-1:-1:-1::0;;;;;33820:33:0;;::::1;;::::0;;;;33877:12:::1;::::0;;-1:-1:-1;;;33877:12:0;;;;:2;;;::::1;::::0;:10:::1;::::0;:12:::1;::::0;;::::1;::::0;33836:16:::1;::::0;33877:12;;;;;;;:2;:12;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33877:12:0;33864:4:::1;:26:::0;;-1:-1:-1;;;;;;33864:26:0::1;-1:-1:-1::0;;;;;33864:26:0;;::::1;;::::0;;33924:4:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;33924:16:0;;;;:4;;;::::1;::::0;:14:::1;::::0;:16;;::::1;::::0;33877:12:::1;::::0;33924:16;;;;;;;;:4;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33924:16:0;33901:9:::1;:40:::0;;-1:-1:-1;;;;;;33901:40:0::1;-1:-1:-1::0;;;;;33901:40:0;;::::1;;::::0;;;;33984:4:::1;::::0;33999:2:::1;::::0;34012:4:::1;::::0;33957:81:::1;::::0;;33984:4;;::::1;33957:81:::0;;33999:2;;::::1;33924:16;33957:81:::0;::::1;::::0;34012:4;::::1;33957:81:::0;;;;34027:9;;;::::1;33957:81:::0;;;;;::::1;::::0;;;;;;;;::::1;33732:314::o:0;19658:37::-;;;:::o;19582:29::-;;;:::o;33144:27::-;;;-1:-1:-1;;;;;33144:27:0;;:::o;24072:79::-;24110:7;24137:6;-1:-1:-1;;;;;24137:6:0;24072:79;:::o;17224:45::-;17268:1;17224:45;:::o;28178:286::-;24294:12;:10;:12::i;:::-;24284:6;;-1:-1:-1;;;;;24284:6:0;;;:22;;;24276:67;;;;;-1:-1:-1;;;24276:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24276:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28262:27:0;::::1;28254:58;;;::::0;;-1:-1:-1;;;28254:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28254:58:0;;;;;;;;;;;;;::::1;;28347:10;::::0;;-1:-1:-1;;;;;28368:26:0;;::::1;-1:-1:-1::0;;;;;;28368:26:0;::::1;::::0;::::1;::::0;;;28410:46:::1;::::0;28347:10;::::1;::::0;28368:26;28347:10;;28410:46:::1;::::0;28323:21:::1;::::0;28410:46:::1;24354:1;28178:286:::0;:::o;33093:20::-;;;-1:-1:-1;;;;;33093:20:0;;:::o;17276:84::-;17328:32;17276:84;:::o;21537:35::-;;;:::o;33120:17::-;;;-1:-1:-1;;;;;33120:17:0;;:::o;19703:38::-;;;:::o;16929:43::-;16970:2;16929:43;:::o;19619:29::-;;;:::o;34054:231::-;27892:11;:9;:11::i;:::-;-1:-1:-1;;;;;27892:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27892:20:0;27891:21;27883:50;;;;;-1:-1:-1;;;27883:50:0;;;;;;;;;;;;-1:-1:-1;;;27883:50:0;;;;;;;;;;;;;;;34225:52:::1;34239:9;34250;34261;34272:4;34225:13;:52::i;17367:48::-:0;17414:1;17367:48;:::o;21454:34::-;;;:::o;19546:28::-;;;:::o;17123:94::-;17180:37;17123:94;:::o;16980:79::-;17030:29;16980:79;:::o;21495:35::-;;;:::o;19749:38::-;;;:::o;25017:244::-;24294:12;:10;:12::i;:::-;24284:6;;-1:-1:-1;;;;;24284:6:0;;;:22;;;24276:67;;;;;-1:-1:-1;;;24276:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24276:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25106:22:0;::::1;25098:73;;;;-1:-1:-1::0;;;25098:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25208:6;::::0;;25187:38:::1;::::0;-1:-1:-1;;;;;25187:38:0;;::::1;::::0;25208:6;::::1;::::0;25187:38:::1;::::0;::::1;25236:6;:17:::0;;-1:-1:-1;;;;;;25236:17:0::1;-1:-1:-1::0;;;;;25236:17:0;;;::::1;::::0;;;::::1;::::0;;25017:244::o;27720:25::-;;;-1:-1:-1;;;;;27720:25:0;;:::o;28654:168::-;28728:10;;28698:9;;-1:-1:-1;;;;;28728:10:0;28720:55;;;;;-1:-1:-1;;;28720:55:0;;;;;;;;;;;;-1:-1:-1;;;28720:55:0;;;;;;;;;;;;;;;-1:-1:-1;28803:10:0;;-1:-1:-1;;;;;28803:10:0;28654:168;:::o;34532:694::-;34721:4;;34736:25;;;-1:-1:-1;;;34736:25:0;;34750:10;34736:25;;;;;;-1:-1:-1;;;;;34721:4:0;;;;;;34736:13;;:25;;;;;34701:17;;34736:25;;;;;;;34701:17;34721:4;34736:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34792:1;34780:9;:13;34772:40;;;;;-1:-1:-1;;;34772:40:0;;;;;;;;;;;;-1:-1:-1;;;34772:40:0;;;;;;;;;;;;;;;34831:4;;;:18;;;-1:-1:-1;;;34831:18:0;;;;-1:-1:-1;;;;;34831:4:0;;;;:16;;:18;;;;;;;;;;;;:4;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34831:18:0;34823:43;;;;;-1:-1:-1;;;34823:43:0;;;;;;;;;;;;-1:-1:-1;;;34823:43:0;;;;;;;;;;;;;;;34877:40;;;-1:-1:-1;;;34877:40:0;;34895:10;34877:40;;;;-1:-1:-1;;;;;34877:40:0;;;;;;;;;:17;;;;;;:40;;;;;-1:-1:-1;;34877:40:0;;;;;;;;-1:-1:-1;34877:17:0;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34930:16;34949:19;34958:9;34949:8;:19::i;:::-;34930:38;;34979:20;35002:46;35011:4;35017:8;35027:9;35038;35002:8;:46::i;:::-;35059:48;;;-1:-1:-1;;;35059:48:0;;;;;;;;;35082:10;35059:48;;;;;;;;;;;;34979:69;;-1:-1:-1;;;;;;35059:16:0;;;;;:48;;;;;-1:-1:-1;;35059:48:0;;;;;;;;-1:-1:-1;35059:16:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35159:27:0;;;-1:-1:-1;;;35159:27:0;;35175:10;35159:27;;;;;;-1:-1:-1;;;;;35159:15:0;;;-1:-1:-1;35159:15:0;;-1:-1:-1;35159:27:0;;;;;;;;;;;;;;:15;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35159:27:0;35133:85;;;;;;;;35159:27;35133:85;;;;;-1:-1:-1;;;;;35133:85:0;;;;35147:10;;35133:85;;35188:4;;35194:12;;35208:9;;35133:85;;35208:9;35133:85;;;35208:9;-1:-1:-1;35133:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34532:694;;;;;;;:::o;22784:106::-;22872:10;22784:106;:::o;37840:299::-;37915:17;37950:9;37945:187;16921:1;37961:11;;37945:187;;;38013:1;37998:9;38008:1;37998:12;;;;;;;;;;;:16;37994:127;;;38047:58;38061:43;38090:13;38101:1;38090:10;:13::i;:::-;38061:24;38078:6;38061:9;38071:1;38061:12;;;;;;;;;;;;:16;:24::i;:::-;:28;;:43::i;:::-;38047:9;;:13;:58::i;:::-;38035:70;;37994:127;37974:3;;37945:187;;;;37840:299;;;:::o;35234:1900::-;35452:4;;;35471;;:41;;;-1:-1:-1;;;35471:41:0;;;;;;;;;;;;35452:4;35471:41;;;;;;;;;;;-1:-1:-1;;;;;;;35452:4:0;;;;35471;;;;:19;;:41;;;;;;;;;;;;;;:4;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35471:41:0;35467:1586;;;35551:2;;-1:-1:-1;;;;;35551:2:0;35529:11;35569:612;16921:1;35589:11;;35569:612;;;35663:1;35648:9;35658:1;35648:12;;;;;;;;;;;:16;35644:522;;;35689:12;35711:11;35720:1;35711:8;:11::i;:::-;35689:34;;33208:1;35750;:15;35746:401;;;35820:15;35838:5;-1:-1:-1;;;;;35838:15:0;;35854:3;35838:20;;;;;;;;;;;;;-1:-1:-1;;;;;35838:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35838:20:0;;-1:-1:-1;35885:53:0;35908:10;35920:3;35925:9;35935:1;35925:12;;;;;;;;;;;-1:-1:-1;;;;;35885:22:0;;;:53;;:22;:53::i;:::-;35980:33;36005:7;35980:5;-1:-1:-1;;;;;35980:15:0;;35996:3;35980:20;;;;;;;;;;;;;-1:-1:-1;;;;;35980:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35980:20:0;;:24;:33::i;:::-;35965:9;35975:1;35965:12;;;;;;;;;;:48;-1:-1:-1;35746:401:0;;;36070:53;36093:10;36105:3;36110:9;36120:1;36110:12;;;;;;;;;;;-1:-1:-1;;;;;36070:22:0;;;:53;;:22;:53::i;:::-;35644:522;;35602:3;;35569:612;;;;36210:28;36218:9;36229:8;36210:7;:28::i;:::-;36195:43;;35467:1586;;;;36290:9;36285:679;16921:1;36305:11;;36285:679;;;36361:1;36346:9;36356:1;36346:12;;;;;;;;;;;:16;36342:607;;;36409:12;36431:11;36440:1;36431:8;:11::i;:::-;36409:34;;36466:14;36483:11;36492:1;36483:8;:11::i;:::-;36466:28;;33208:1;36521;:15;36517:413;;;36591:15;36609:5;-1:-1:-1;;;;;36609:15:0;;36625:6;36609:23;;;;;;;;;;;;;-1:-1:-1;;;;;36609:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36609:23:0;;-1:-1:-1;36659:56:0;36682:10;36694:6;36702:9;36712:1;36702:12;;;;;;;;;;;-1:-1:-1;;;;;36659:22:0;;;:56;;:22;:56::i;:::-;36757:36;36785:7;36757:5;-1:-1:-1;;;;;36757:15:0;;36773:6;36757:23;;;;;;;;;;;;;-1:-1:-1;;;;;36757:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;:36;36742:9;36752:1;36742:12;;;;;;;;;;:51;-1:-1:-1;36517:413:0;;;36850:56;36873:10;36885:6;36893:9;36903:1;36893:12;;;;;;36850:56;36342:607;;;36318:3;;36285:679;;;-1:-1:-1;37007:34:0;;-1:-1:-1;;;37007:34:0;;-1:-1:-1;;;;;37007:17:0;;;;;37025:9;;37036:4;;37007:34;;;37025:9;37007:34;;;37025:9;37007:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37007:34:0;;-1:-1:-1;35467:1586:0;37087:5;-1:-1:-1;;;;;37087:13:0;;37101:9;37087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37087:24:0;37071:40;;;37063:63;;;;;-1:-1:-1;;;37063:63:0;;;;;;;;;;;;-1:-1:-1;;;37063:63:0;;;;;;;;;;;;;;;35234:1900;;;;;;;:::o;20736:269::-;20794:7;20818:10;20814:184;;-1:-1:-1;20852:12:0;20845:19;;20814:184;20886:5;20895:1;20886:10;20882:116;;;-1:-1:-1;20920:13:0;20913:20;;20882:116;-1:-1:-1;20973:13:0;20882:116;20736:269;;;:::o;2265:280::-;2323:7;2377:6;2373:47;;-1:-1:-1;2407:1:0;2400:8;;2373:47;2444:5;;;2448:1;2444;:5;:1;2468:5;;;;;:10;2460:56;;;;-1:-1:-1;;;2460:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2536:1;-1:-1:-1;2265:280:0;;;;;:::o;3021:132::-;3079:7;3106:39;3110:1;3113;3106:39;;;;;;;;;;;;;;;;;:3;:39::i;911:181::-;969:7;1001:5;;;1025:6;;;;1017:46;;;;;-1:-1:-1;;;1017:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20278:240;20334:7;20358:10;20354:157;;-1:-1:-1;20392:3:0;20385:10;;20354:157;20417:5;20426:1;20417:10;20413:98;;;-1:-1:-1;20451:4:0;20444:11;;20413:98;-1:-1:-1;20495:4:0;20488:11;;14555:205;14683:68;;;-1:-1:-1;;;;;14683:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14683:68:0;-1:-1:-1;;;14683:68:0;;;14656:96;;14676:5;;14656:19;:96::i;:::-;14555:205;;;;:::o;1375:136::-;1433:7;1460:43;1464:1;1467;1460:43;;;;;;;;;;;;;;;;;:3;:43::i;37142:690::-;37318:9;;37355:2;;37231:20;;-1:-1:-1;;;;;37318:9:0;;;;37355:2;37369:36;;:::i;:::-;37407:15;37426:10;-1:-1:-1;;;;;37426:34:0;;37461:8;37426:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37426:44:0;;;;;;-1:-1:-1;37426:44:0;-1:-1:-1;16921:1:0;37485:17;;37481:344;;;37563:15;;;37580;;;37534:62;;-1:-1:-1;;;37534:62:0;;-1:-1:-1;;;;;37534:16:0;;;;;37551:10;;37534:62;;;37551:10;37534:62;;;37551:10;37576:1;37534:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37534:62:0;;-1:-1:-1;37481:344:0;;;37629:17;37649:3;-1:-1:-1;;;;;37649:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37649:13:0;;-1:-1:-1;37677:29:0;;:::i;:::-;37709:10;-1:-1:-1;;;;;37709:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37785:28:0;;-1:-1:-1;;;37785:28:0;;;;;;;;37709:46;;-1:-1:-1;;;;;;37785:10:0;;;;;37796:9;;37709:46;;37785:28;;37709:46;37785:28;;;37709:46;-1:-1:-1;37785:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37785:28:0;;-1:-1:-1;;;37481:344:0;37142:690;;;;;;;;:::o;21750:258::-;21806:7;21830:10;21826:175;;-1:-1:-1;21864:9:0;21857:16;;21826:175;21895:5;21904:1;21895:10;21891:110;;;-1:-1:-1;21929:10:0;21922:17;;21891:110;-1:-1:-1;21979:10:0;21972:17;;3649:201;3735:7;3770:12;3763:5;3755:28;;;;-1:-1:-1;;;3755:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:9;3810:1;3806;:5;;;;;;;-1:-1:-1;;3649:201:0;;;;;;:::o;16441:380::-;16554:23;16580:69;16608:4;16580:69;;;;;;;;;;;;;;;;;16588:5;-1:-1:-1;;;;;16580:27:0;;;:69;;;;;:::i;:::-;16664:17;;16554:95;;-1:-1:-1;16664:21:0;16660:154;;16736:10;16725:30;;;;;;;;;;;;;;;-1:-1:-1;16725:30:0;16717:85;;;;-1:-1:-1;;;16717:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1814:192;1900:7;1936:12;1928:6;;;;1920:29;;;;-1:-1:-1;;;1920:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1972:5:0;;;1814:192::o;10714:195::-;10817:12;10849:52;10871:6;10879:4;10885:1;10888:12;10849:21;:52::i;:::-;10842:59;10714:195;-1:-1:-1;;;;10714:195:0:o;11766:480::-;11893:12;11951:5;11926:21;:30;;11918:81;;;;-1:-1:-1;;;11918:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12018:18;12029:6;12018:10;:18::i;:::-;12010:60;;;;;-1:-1:-1;;;12010:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12094:12;12108:23;12135:6;-1:-1:-1;;;;;12135:11:0;12155:5;12163:4;12135:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12135:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12093:75;;;;12186:52;12204:7;12213:10;12225:12;12186:17;:52::i;:::-;12179:59;11766:480;-1:-1:-1;;;;;;;11766:480:0:o;8508:216::-;8669:20;8708:8;;;8508:216::o;13202:567::-;13317:12;13346:7;13342:420;;;-1:-1:-1;13377:10:0;13370:17;;13342:420;13438:17;;:21;13434:317;;13579:10;13573:17;13640:15;13627:10;13623:2;13619:19;13612:44;13527:148;13715:20;;-1:-1:-1;;;13715:20:0;;;;;;;;;;;;;;;;;13722:12;;13715:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://571df32751dc04215216c2c25c7638f02653796ca3de356b3912e8e28bb87219
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.