Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 7 from a total of 7 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Harvest | 12047676 | 1827 days ago | IN | 0 ETH | 0.07307166 | ||||
| Harvest | 11935878 | 1844 days ago | IN | 0 ETH | 0.06171383 | ||||
| Harvest | 11905695 | 1848 days ago | IN | 0 ETH | 0.07055335 | ||||
| Whitelist Harves... | 11856282 | 1856 days ago | IN | 0 ETH | 0.00616298 | ||||
| Harvest | 11856201 | 1856 days ago | IN | 0 ETH | 0.01711149 | ||||
| Whitelist Harves... | 11791455 | 1866 days ago | IN | 0 ETH | 0.00598563 | ||||
| Whitelist Harves... | 11791455 | 1866 days ago | IN | 0 ETH | 0.00598563 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
StrategyMithMisUsdtLp
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-02-03
*/
pragma solidity ^0.6.7;
// SPDX-License-Identifier: MIT
/**
* @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) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// SPDX-License-Identifier: MIT
/*
* @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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: contracts/GSN/Context.sol
// SPDX-License-Identifier: MIT
// File: contracts/token/ERC20/IERC20.sol
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts/utils/Address.sol
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: contracts/token/ERC20/ERC20.sol
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
/**
* @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 {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// SPDX-License-Identifier: MIT
interface IJar is IERC20 {
function token() external view returns (address);
function claimInsurance() external; // NOTE: Only yDelegatedVault implements this
function getRatio() external view returns (uint256);
function depositAll() external;
function deposit(uint256) external;
function withdrawAll() external;
function withdraw(uint256) external;
function earn() external;
function decimals() external view returns (uint8);
}
// SPDX-License-Identifier: MIT
interface IStakingRewards {
function balanceOf(address account) external view returns (uint256);
function earned(address account) external view returns (uint256);
function exit() external;
function getReward() external;
function getRewardForDuration() external view returns (uint256);
function lastTimeRewardApplicable() external view returns (uint256);
function lastUpdateTime() external view returns (uint256);
function notifyRewardAmount(uint256 reward) external;
function periodFinish() external view returns (uint256);
function rewardPerToken() external view returns (uint256);
function rewardPerTokenStored() external view returns (uint256);
function rewardRate() external view returns (uint256);
function rewards(address) external view returns (uint256);
function rewardsDistribution() external view returns (address);
function rewardsDuration() external view returns (uint256);
function rewardsToken() external view returns (address);
function stake(uint256 amount) external;
function stakeWithPermit(
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function stakingToken() external view returns (address);
function totalSupply() external view returns (uint256);
function userRewardPerTokenPaid(address) external view returns (uint256);
function withdraw(uint256 amount) external;
}
interface IStakingRewardsFactory {
function deploy(address stakingToken, uint256 rewardAmount) external;
function isOwner() external view returns (bool);
function notifyRewardAmount(address stakingToken) external;
function notifyRewardAmounts() external;
function owner() external view returns (address);
function renounceOwnership() external;
function rewardsToken() external view returns (address);
function stakingRewardsGenesis() external view returns (uint256);
function stakingRewardsInfoByStakingToken(address)
external
view
returns (address stakingRewards, uint256 rewardAmount);
function stakingTokens(uint256) external view returns (address);
function transferOwnership(address newOwner) external;
}
// SPDX-License-Identifier: MIT
interface IMasterchef {
function BONUS_MULTIPLIER() external view returns (uint256);
function add(
uint256 _allocPoint,
address _lpToken,
bool _withUpdate
) external;
function bonusEndBlock() external view returns (uint256);
function deposit(uint256 _pid, uint256 _amount) external;
function dev(address _devaddr) external;
function devFundDivRate() external view returns (uint256);
function devaddr() external view returns (address);
function emergencyWithdraw(uint256 _pid) external;
function getMultiplier(uint256 _from, uint256 _to)
external
view
returns (uint256);
function massUpdatePools() external;
function owner() external view returns (address);
function pendingPickle(uint256 _pid, address _user)
external
view
returns (uint256);
function pickle() external view returns (address);
function picklePerBlock() external view returns (uint256);
function poolInfo(uint256)
external
view
returns (
address lpToken,
uint256 allocPoint,
uint256 lastRewardBlock,
uint256 accPicklePerShare
);
function poolLength() external view returns (uint256);
function renounceOwnership() external;
function set(
uint256 _pid,
uint256 _allocPoint,
bool _withUpdate
) external;
function setBonusEndBlock(uint256 _bonusEndBlock) external;
function setDevFundDivRate(uint256 _devFundDivRate) external;
function setPicklePerBlock(uint256 _picklePerBlock) external;
function startBlock() external view returns (uint256);
function totalAllocPoint() external view returns (uint256);
function transferOwnership(address newOwner) external;
function updatePool(uint256 _pid) external;
function userInfo(uint256, address)
external
view
returns (uint256 amount, uint256 rewardDebt);
function withdraw(uint256 _pid, uint256 _amount) external;
}
// SPDX-License-Identifier: MIT
// SPDX-License-Identifier: MIT
interface UniswapRouterV2 {
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
// SPDX-License-Identifier: MIT
interface IController {
function jars(address) external view returns (address);
function rewards() external view returns (address);
function devfund() external view returns (address);
function treasury() external view returns (address);
function balanceOf(address) external view returns (uint256);
function withdraw(address, uint256) external;
function earn(address, uint256) external;
}
// Strategy Contract Basics
abstract contract StrategyBase {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
// Perfomance fees - start with 20%
uint256 public performanceTreasuryFee = 2000;
uint256 public constant performanceTreasuryMax = 10000;
uint256 public performanceDevFee = 0;
uint256 public constant performanceDevMax = 10000;
// Withdrawal fee 0%
// - 0% to treasury
// - 0% to dev fund
uint256 public withdrawalTreasuryFee = 0;
uint256 public constant withdrawalTreasuryMax = 100000;
uint256 public withdrawalDevFundFee = 0;
uint256 public constant withdrawalDevFundMax = 100000;
// Tokens
address public want;
address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
// User accounts
address public governance;
address public controller;
address public strategist;
address public timelock;
// Dex
address public univ2Router2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address public sushiRouter = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;
mapping(address => bool) public harvesters;
constructor(
address _want,
address _governance,
address _strategist,
address _controller,
address _timelock
) public {
require(_want != address(0));
require(_governance != address(0));
require(_strategist != address(0));
require(_controller != address(0));
require(_timelock != address(0));
want = _want;
governance = _governance;
strategist = _strategist;
controller = _controller;
timelock = _timelock;
}
// **** Modifiers **** //
modifier onlyBenevolent {
require(
harvesters[msg.sender] ||
msg.sender == governance ||
msg.sender == strategist
);
_;
}
// **** Views **** //
function balanceOfWant() public view returns (uint256) {
return IERC20(want).balanceOf(address(this));
}
function balanceOfPool() public virtual view returns (uint256);
function balanceOf() public view returns (uint256) {
return balanceOfWant().add(balanceOfPool());
}
function getName() external virtual pure returns (string memory);
// **** Setters **** //
function whitelistHarvester(address _harvester) external {
require(msg.sender == governance ||
msg.sender == strategist, "not authorized");
harvesters[_harvester] = true;
}
function revokeHarvester(address _harvester) external {
require(msg.sender == governance ||
msg.sender == strategist, "not authorized");
harvesters[_harvester] = false;
}
function setWithdrawalDevFundFee(uint256 _withdrawalDevFundFee) external {
require(msg.sender == timelock, "!timelock");
withdrawalDevFundFee = _withdrawalDevFundFee;
}
function setWithdrawalTreasuryFee(uint256 _withdrawalTreasuryFee) external {
require(msg.sender == timelock, "!timelock");
withdrawalTreasuryFee = _withdrawalTreasuryFee;
}
function setPerformanceDevFee(uint256 _performanceDevFee) external {
require(msg.sender == timelock, "!timelock");
performanceDevFee = _performanceDevFee;
}
function setPerformanceTreasuryFee(uint256 _performanceTreasuryFee)
external
{
require(msg.sender == timelock, "!timelock");
performanceTreasuryFee = _performanceTreasuryFee;
}
function setStrategist(address _strategist) external {
require(msg.sender == governance, "!governance");
strategist = _strategist;
}
function setGovernance(address _governance) external {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setTimelock(address _timelock) external {
require(msg.sender == timelock, "!timelock");
timelock = _timelock;
}
function setController(address _controller) external {
require(msg.sender == timelock, "!timelock");
controller = _controller;
}
// **** State mutations **** //
function deposit() public virtual;
// Controller only function for creating additional rewards from dust
function withdraw(IERC20 _asset) external returns (uint256 balance) {
require(msg.sender == controller, "!controller");
require(want != address(_asset), "want");
balance = _asset.balanceOf(address(this));
_asset.safeTransfer(controller, balance);
}
// Withdraw partial funds, normally used with a jar withdrawal
function withdraw(uint256 _amount) external {
require(msg.sender == controller, "!controller");
uint256 _balance = IERC20(want).balanceOf(address(this));
if (_balance < _amount) {
_amount = _withdrawSome(_amount.sub(_balance));
_amount = _amount.add(_balance);
}
uint256 _feeDev = _amount.mul(withdrawalDevFundFee).div(
withdrawalDevFundMax
);
IERC20(want).safeTransfer(IController(controller).devfund(), _feeDev);
uint256 _feeTreasury = _amount.mul(withdrawalTreasuryFee).div(
withdrawalTreasuryMax
);
IERC20(want).safeTransfer(
IController(controller).treasury(),
_feeTreasury
);
address _jar = IController(controller).jars(address(want));
require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds
IERC20(want).safeTransfer(_jar, _amount.sub(_feeDev).sub(_feeTreasury));
}
// Withdraw funds, used to swap between strategies
function withdrawForSwap(uint256 _amount)
external
returns (uint256 balance)
{
require(msg.sender == controller, "!controller");
_withdrawSome(_amount);
balance = IERC20(want).balanceOf(address(this));
address _jar = IController(controller).jars(address(want));
require(_jar != address(0), "!jar");
IERC20(want).safeTransfer(_jar, balance);
}
// Withdraw all funds, normally used when migrating strategies
function withdrawAll() external returns (uint256 balance) {
require(msg.sender == controller, "!controller");
_withdrawAll();
balance = IERC20(want).balanceOf(address(this));
address _jar = IController(controller).jars(address(want));
require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds
IERC20(want).safeTransfer(_jar, balance);
}
function _withdrawAll() internal {
_withdrawSome(balanceOfPool());
}
function _withdrawSome(uint256 _amount) internal virtual returns (uint256);
function harvest() public virtual;
// **** Emergency functions ****
function execute(address _target, bytes memory _data)
public
payable
returns (bytes memory response)
{
require(msg.sender == timelock, "!timelock");
require(_target != address(0), "!target");
// call contract in current context
assembly {
let succeeded := delegatecall(
sub(gas(), 5000),
_target,
add(_data, 0x20),
mload(_data),
0,
0
)
let size := returndatasize()
response := mload(0x40)
mstore(
0x40,
add(response, and(add(add(size, 0x20), 0x1f), not(0x1f)))
)
mstore(response, size)
returndatacopy(add(response, 0x20), 0, size)
switch iszero(succeeded)
case 1 {
// throw if delegatecall failed
revert(add(response, 0x20), size)
}
}
}
// **** Internal functions ****
function _swapUniswap(
address _from,
address _to,
uint256 _amount
) internal {
require(_to != address(0));
// Swap with uniswap
IERC20(_from).safeApprove(univ2Router2, 0);
IERC20(_from).safeApprove(univ2Router2, _amount);
address[] memory path;
if (_from == weth || _to == weth) {
path = new address[](2);
path[0] = _from;
path[1] = _to;
} else {
path = new address[](3);
path[0] = _from;
path[1] = weth;
path[2] = _to;
}
UniswapRouterV2(univ2Router2).swapExactTokensForTokens(
_amount,
0,
path,
address(this),
now.add(60)
);
}
function _swapUniswapWithPath(
address[] memory path,
uint256 _amount
) internal {
require(path[1] != address(0));
// Swap with uniswap
IERC20(path[0]).safeApprove(univ2Router2, 0);
IERC20(path[0]).safeApprove(univ2Router2, _amount);
UniswapRouterV2(univ2Router2).swapExactTokensForTokens(
_amount,
0,
path,
address(this),
now.add(60)
);
}
function _swapSushiswap(
address _from,
address _to,
uint256 _amount
) internal {
require(_to != address(0));
// Swap with uniswap
IERC20(_from).safeApprove(sushiRouter, 0);
IERC20(_from).safeApprove(sushiRouter, _amount);
address[] memory path;
if (_from == weth || _to == weth) {
path = new address[](2);
path[0] = _from;
path[1] = _to;
} else {
path = new address[](3);
path[0] = _from;
path[1] = weth;
path[2] = _to;
}
UniswapRouterV2(sushiRouter).swapExactTokensForTokens(
_amount,
0,
path,
address(this),
now.add(60)
);
}
function _swapSushiswapWithPath(
address[] memory path,
uint256 _amount
) internal {
require(path[1] != address(0));
// Swap with uniswap
IERC20(path[0]).safeApprove(sushiRouter, 0);
IERC20(path[0]).safeApprove(sushiRouter, _amount);
UniswapRouterV2(sushiRouter).swapExactTokensForTokens(
_amount,
0,
path,
address(this),
now.add(60)
);
}
function _distributePerformanceFeesAndDeposit() internal {
uint256 _want = IERC20(want).balanceOf(address(this));
if (_want > 0) {
// Treasury fees
IERC20(want).safeTransfer(
IController(controller).treasury(),
_want.mul(performanceTreasuryFee).div(performanceTreasuryMax)
);
// Performance fee
IERC20(want).safeTransfer(
IController(controller).devfund(),
_want.mul(performanceDevFee).div(performanceDevMax)
);
deposit();
}
}
}
// Base contract for SNX Staking rewards contract interfaces
abstract contract StrategyStakingRewardsBase is StrategyBase {
address public rewards;
// **** Getters ****
constructor(
address _rewards,
address _want,
address _governance,
address _strategist,
address _controller,
address _timelock
)
public
StrategyBase(_want, _governance, _strategist, _controller, _timelock)
{
rewards = _rewards;
}
function balanceOfPool() public override view returns (uint256) {
return IStakingRewards(rewards).balanceOf(address(this));
}
function getHarvestable() external view returns (uint256) {
return IStakingRewards(rewards).earned(address(this));
}
// **** Setters ****
function deposit() public override {
uint256 _want = IERC20(want).balanceOf(address(this));
if (_want > 0) {
IERC20(want).safeApprove(rewards, 0);
IERC20(want).safeApprove(rewards, _want);
IStakingRewards(rewards).stake(_want);
}
}
function _withdrawSome(uint256 _amount)
internal
override
returns (uint256)
{
IStakingRewards(rewards).withdraw(_amount);
return _amount;
}
}
// SPDX-License-Identifier: MIT
abstract contract StrategyMithFarmBase is StrategyStakingRewardsBase {
// Token addresses
address public mis = 0x4b4D2e899658FB59b1D518b68fe836B100ee8958;
address public usdt = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
// USDT/<token1> pair
address public token1;
// How much MIS tokens to keep?
uint256 public keepMIS = 0;
uint256 public constant keepMISMax = 10000;
// Uniswap swap paths
address[] public mis_usdt_path;
address[] public usdt_token1_path;
constructor(
address _token1,
address _rewards,
address _lp,
address _governance,
address _strategist,
address _controller,
address _timelock
)
public
StrategyStakingRewardsBase(
_rewards,
_lp,
_governance,
_strategist,
_controller,
_timelock
)
{
token1 = _token1;
mis_usdt_path = new address[](2);
mis_usdt_path[0] = mis;
mis_usdt_path[1] = usdt;
usdt_token1_path = new address[](2);
usdt_token1_path[0] = usdt;
usdt_token1_path[1] = token1;
}
// **** Setters ****
function setKeepMIS(uint256 _keepMIS) external {
require(msg.sender == timelock, "!timelock");
keepMIS = _keepMIS;
}
// **** State Mutations ****
function harvest() public override onlyBenevolent {
// Anyone can harvest it at any given time.
// I understand the possibility of being frontrun
// But ETH is a dark forest, and I wanna see how this plays out
// i.e. will be be heavily frontrunned?
// if so, a new strategy will be deployed.
// Collects MIS tokens
IStakingRewards(rewards).getReward();
uint256 _mis = IERC20(mis).balanceOf(address(this));
if (_mis > 0) {
// 10% is locked up for future gov
uint256 _keepMIS = _mis.mul(keepMIS).div(keepMISMax);
IERC20(mis).safeTransfer(
IController(controller).treasury(),
_keepMIS
);
_swapSushiswapWithPath(mis_usdt_path, _mis.sub(_keepMIS));
}
// Swap half USDT for token
uint256 _usdt = IERC20(usdt).balanceOf(address(this));
if (_usdt > 0) {
_swapSushiswapWithPath(usdt_token1_path, _usdt.div(2));
}
// Adds in liquidity for USDT/Token
_usdt = IERC20(usdt).balanceOf(address(this));
uint256 _token1 = IERC20(token1).balanceOf(address(this));
if (_usdt > 0 && _token1 > 0) {
IERC20(usdt).safeApprove(sushiRouter, 0);
IERC20(usdt).safeApprove(sushiRouter, _usdt);
IERC20(token1).safeApprove(sushiRouter, 0);
IERC20(token1).safeApprove(sushiRouter, _token1);
UniswapRouterV2(sushiRouter).addLiquidity(
usdt,
token1,
_usdt,
_token1,
0,
0,
address(this),
now + 60
);
// Donates DUST
IERC20(usdt).safeTransfer(
IController(controller).treasury(),
IERC20(usdt).balanceOf(address(this))
);
IERC20(token1).safeTransfer(
IController(controller).treasury(),
IERC20(token1).balanceOf(address(this))
);
}
// We want to get back MIS LP tokens
_distributePerformanceFeesAndDeposit();
}
}
// SPDX-License-Identifier: MIT
contract StrategyMithMisUsdtLp is StrategyMithFarmBase {
// Token addresses
address public mith_rewards = 0x14E33e1D6Cc4D83D7476492C0A52b3d4F869d892;
address public uni_mis_usdt_lp = 0x066F3A3B7C8Fa077c71B9184d862ed0A4D5cF3e0;
constructor(
address _governance,
address _strategist,
address _controller,
address _timelock
)
public
StrategyMithFarmBase(
mis,
mith_rewards,
uni_mis_usdt_lp,
_governance,
_strategist,
_controller,
_timelock
)
{}
// **** Views ****
function getName() external override pure returns (string memory) {
return "StrategyMithMisUsdtLp";
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getHarvestable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"harvesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepMIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepMISMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mis","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mis_usdt_path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mith_rewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_harvester","type":"address"}],"name":"revokeHarvester","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keepMIS","type":"uint256"}],"name":"setKeepMIS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceDevFee","type":"uint256"}],"name":"setPerformanceDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceTreasuryFee","type":"uint256"}],"name":"setPerformanceTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalDevFundFee","type":"uint256"}],"name":"setWithdrawalDevFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalTreasuryFee","type":"uint256"}],"name":"setWithdrawalTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uni_mis_usdt_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"univ2Router2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usdt_token1_path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_harvester","type":"address"}],"name":"whitelistHarvester","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawForSwap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalDevFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalDevFundMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526107d06000908155600181905560028190556003819055600980546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600a8054821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f179055600d80548216734b4d2e899658fb59b1d518b68fe836b100ee8958179055600e8054821673dac17f958d2ee523a2206206994597c13d831ec71790556010919091556013805482167314e33e1d6cc4d83d7476492c0a52b3d4f869d8921790556014805490911673066f3a3b7c8fa077c71b9184d862ed0a4d5cf3e0179055348015620000ee57600080fd5b506040516200362738038062003627833981810160405260808110156200011457600080fd5b50805160208201516040830151606090930151600d54601354601454949593946001600160a01b03928316929182169116868686868585858585858484848484846200015f57600080fd5b6001600160a01b0384166200017357600080fd5b6001600160a01b0383166200018757600080fd5b6001600160a01b0382166200019b57600080fd5b6001600160a01b038116620001af57600080fd5b600480546001600160a01b03199081166001600160a01b03978816179091556005805482169587169590951790945560078054851693861693909317909255600680548416918516919091179055600880548316918416919091179055600c8054821698831698909817909755600f8054909716908e16179095555060029350600092506200023c915050565b5060405190808252806020026020018201604052801562000267578160200160208202803683370190505b5080516200027e91601191602090910190620003d4565b50600d54601180546001600160a01b03909216916000906200029c57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055600e54601180549190921691906001908110620002da57fe5b600091825260209091200180546001600160a01b03929092166001600160a01b031990921691909117905560408051600280825260608201909252908160200160208202803683375050815162000339926012925060200190620003d4565b50600e54601280546001600160a01b03909216916000906200035757fe5b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055600f546012805491909216919060019081106200039557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505050505050505062000468565b8280548282559060005260206000209081019282156200042c579160200282015b828111156200042c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003f5565b506200043a9291506200043e565b5090565b6200046591905b808211156200043a5780546001600160a01b031916815560010162000445565b90565b6131af80620004786000396000f3fe6080604052600436106103295760003560e01c8063722713f7116101a5578063b9e37489116100ec578063c7b9d53011610095578063d247d3c21161006f578063d247d3c214610579578063d33219b4146109e6578063f77c4791146109fb578063fe1f8f7a1461062157610329565b8063c7b9d53014610989578063d0e30db0146109bc578063d21220a7146109d157610329565b8063c1a3d44c116100c6578063c1a3d44c14610920578063c6223e2614610935578063c65e32421461095f57610329565b8063b9e37489146108c3578063bdacb303146108d8578063be64a1ad1461090b57610329565b806392eefe9b1161014e578063ab033ea911610128578063ab033ea91461083c578063ab73e4331461086f578063b531f5701461089957610329565b806392eefe9b146107ca5780639a3e4e4d146107fd5780639ec5a8941461082757610329565b8063879765831161017f578063879765831461075957806388993f22146107a05780638ccdbb70146107b557610329565b8063722713f714610705578063823785941461071a578063853828b61461074457610329565b80632e1a7d4d1161027457806351cff8d91161021d57806359739ec4116101f757806359739ec4146106b15780635aa6e675146106c65780636c9f0b47146106db5780636d13582c146106f057610329565b806351cff8d91461063657806351f3d0b81461066957806354df7b631461067e57610329565b80634641257d1161024e5780634641257d1461060c578063479119be146106215780634fe809cc1461057957610329565b80632e1a7d4d146105b85780632f48ab7d146105e25780633fc8cef3146105f757610329565b80631cff79cd116102d6578063249fb9b4116102b0578063249fb9b41461054f57806326e886c61461057957806329758c661461058e57610329565b80631cff79cd1461046f5780631f1fcd51146105255780631fe4a6861461053a57610329565b8063151f87ca11610307578063151f87ca1461039b57806317d7de7c146103b057806318eb0e0b1461043a57610329565b80630547104d1461032e5780630ac1d64f146103555780631158808614610386575b600080fd5b34801561033a57600080fd5b50610343610a10565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610aa3565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b50610343610ab2565b3480156103a757600080fd5b5061036a610afd565b3480156103bc57600080fd5b506103c5610b0c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ff5781810151838201526020016103e7565b50505050905090810190601f16801561042c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044657600080fd5b5061046d6004803603602081101561045d57600080fd5b50356001600160a01b0316610b43565b005b6103c56004803603604081101561048557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156104b057600080fd5b8201836020820111156104c257600080fd5b803590602001918460018302840111640100000000831117156104e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bf6945050505050565b34801561053157600080fd5b5061036a610d03565b34801561054657600080fd5b5061036a610d12565b34801561055b57600080fd5b5061046d6004803603602081101561057257600080fd5b5035610d21565b34801561058557600080fd5b50610343610d85565b34801561059a57600080fd5b5061036a600480360360208110156105b157600080fd5b5035610d8b565b3480156105c457600080fd5b5061046d600480360360208110156105db57600080fd5b5035610db2565b3480156105ee57600080fd5b5061036a611133565b34801561060357600080fd5b5061036a611142565b34801561061857600080fd5b5061046d61115a565b34801561062d57600080fd5b50610343611953565b34801561064257600080fd5b506103436004803603602081101561065957600080fd5b50356001600160a01b031661195a565b34801561067557600080fd5b50610343611abb565b34801561068a57600080fd5b5061046d600480360360208110156106a157600080fd5b50356001600160a01b0316611ac1565b3480156106bd57600080fd5b50610343611b77565b3480156106d257600080fd5b5061036a611b7d565b3480156106e757600080fd5b5061036a611b8c565b3480156106fc57600080fd5b5061036a611b9b565b34801561071157600080fd5b50610343611baa565b34801561072657600080fd5b5061046d6004803603602081101561073d57600080fd5b5035611bd0565b34801561075057600080fd5b50610343611c34565b34801561076557600080fd5b5061078c6004803603602081101561077c57600080fd5b50356001600160a01b0316611e32565b604080519115158252519081900360200190f35b3480156107ac57600080fd5b50610343611e47565b3480156107c157600080fd5b50610343611e4d565b3480156107d657600080fd5b5061046d600480360360208110156107ed57600080fd5b50356001600160a01b0316611e53565b34801561080957600080fd5b5061036a6004803603602081101561082057600080fd5b5035611eec565b34801561083357600080fd5b5061036a611ef9565b34801561084857600080fd5b5061046d6004803603602081101561085f57600080fd5b50356001600160a01b0316611f08565b34801561087b57600080fd5b5061046d6004803603602081101561089257600080fd5b5035611fa1565b3480156108a557600080fd5b5061046d600480360360208110156108bc57600080fd5b5035612005565b3480156108cf57600080fd5b5061036a612069565b3480156108e457600080fd5b5061046d600480360360208110156108fb57600080fd5b50356001600160a01b0316612078565b34801561091757600080fd5b50610343612111565b34801561092c57600080fd5b50610343612117565b34801561094157600080fd5b506103436004803603602081101561095857600080fd5b5035612166565b34801561096b57600080fd5b5061046d6004803603602081101561098257600080fd5b5035612368565b34801561099557600080fd5b5061046d600480360360208110156109ac57600080fd5b50356001600160a01b03166123cc565b3480156109c857600080fd5b5061046d612465565b3480156109dd57600080fd5b5061036a6125ac565b3480156109f257600080fd5b5061036a6125bb565b348015610a0757600080fd5b5061036a6125ca565b600c54604080517e8cc26200000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b031691628cc262916024808301926020929190829003018186803b158015610a7257600080fd5b505afa158015610a86573d6000803e3d6000fd5b505050506040513d6020811015610a9c57600080fd5b5051905090565b6014546001600160a01b031681565b600c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610a7257600080fd5b6013546001600160a01b031681565b60408051808201909152601581527f53747261746567794d6974684d6973557364744c700000000000000000000000602082015290565b6005546001600160a01b0316331480610b6657506007546001600160a01b031633145b610bb7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6008546060906001600160a01b03163314610c58576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316610cb3576040805162461bcd60e51b815260206004820152600760248201527f2174617267657400000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610cf357610cfa565b8160208501fd5b50505092915050565b6004546001600160a01b031681565b6007546001600160a01b031681565b6008546001600160a01b03163314610d80576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600055565b61271081565b60118181548110610d9857fe5b6000918252602090912001546001600160a01b0316905081565b6006546001600160a01b03163314610e11576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d6020811015610e8a57600080fd5b5051905081811015610ec357610eae610ea9838363ffffffff6125d916565b612624565b9150610ec0828263ffffffff6126a716565b91505b6000610eed620186a0610ee16003548661270190919063ffffffff16565b9063ffffffff61275a16565b9050610f85600660009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4057600080fd5b505afa158015610f54573d6000803e3d6000fd5b505050506040513d6020811015610f6a57600080fd5b50516004546001600160a01b0316908363ffffffff61279c16565b6000610fa3620186a0610ee16002548761270190919063ffffffff16565b9050610ff6600660009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4057600080fd5b60065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935251600093919091169163ca6a48c2916024808301926020929190829003018186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d602081101561108e57600080fd5b505190506001600160a01b0381166110ef576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61112c8161111384611107898863ffffffff6125d916565b9063ffffffff6125d916565b6004546001600160a01b0316919063ffffffff61279c16565b5050505050565b600e546001600160a01b031681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b336000908152600b602052604090205460ff168061118257506005546001600160a01b031633145b8061119757506007546001600160a01b031633145b6111a057600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b5050600d54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b15801561125557600080fd5b505afa158015611269573d6000803e3d6000fd5b505050506040513d602081101561127f57600080fd5b5051905080156113b65760006112a6612710610ee16010548561270190919063ffffffff16565b905061133e600660009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051600d546001600160a01b0316908363ffffffff61279c16565b6113b4601180548060200260200160405190810160405280929190818152602001828054801561139757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611379575b50505050506113af83856125d990919063ffffffff16565b61281c565b505b600e54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561140157600080fd5b505afa158015611415573d6000803e3d6000fd5b505050506040513d602081101561142b57600080fd5b5051905080156114a7576114a7601280548060200260200160405190810160405280929190818152602001828054801561148e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611470575b50505050506113af60028461275a90919063ffffffff16565b600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b5051600f54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051905081158015906115ac5750600081115b1561194657600a54600e546115d5916001600160a01b039182169116600063ffffffff612a6516565b600a54600e546115f8916001600160a01b0391821691168463ffffffff612a6516565b600a54600f5461161c916001600160a01b039182169116600063ffffffff612a6516565b600a54600f5461163f916001600160a01b0391821691168363ffffffff612a6516565b600a54600e54600f54604080517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529183166024830152604482018690526064820185905260006084830181905260a483018190523060c4840152603c420160e48401529051929093169263e8e3370092610104808401936060939083900390910190829087803b1580156116e457600080fd5b505af11580156116f8573d6000803e3d6000fd5b505050506040513d606081101561170e57600080fd5b5050600654604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905161182b926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d602081101561179957600080fd5b5051600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156117e657600080fd5b505afa1580156117fa573d6000803e3d6000fd5b505050506040513d602081101561181057600080fd5b5051600e546001600160a01b0316919063ffffffff61279c16565b600654604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051611946926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561188a57600080fd5b505afa15801561189e573d6000803e3d6000fd5b505050506040513d60208110156118b457600080fd5b5051600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561190157600080fd5b505afa158015611915573d6000803e3d6000fd5b505050506040513d602081101561192b57600080fd5b5051600f546001600160a01b0316919063ffffffff61279c16565b61194e612bbf565b505050565b620186a081565b6006546000906001600160a01b031633146119bc576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004546001600160a01b0383811691161415611a21576040805162461bcd60e51b8152602060048083019190915260248201527f77616e7400000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611a6757600080fd5b505afa158015611a7b573d6000803e3d6000fd5b505050506040513d6020811015611a9157600080fd5b5051600654909150611ab6906001600160a01b0384811691168363ffffffff61279c16565b919050565b60035481565b6005546001600160a01b0316331480611ae457506007546001600160a01b031633145b611b35576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6005546001600160a01b031681565b600d546001600160a01b031681565b600a546001600160a01b031681565b6000611bcb611bb7610ab2565b611bbf612117565b9063ffffffff6126a716565b905090565b6008546001600160a01b03163314611c2f576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600255565b6006546000906001600160a01b03163314611c96576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b611c9e612d98565b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d6020811015611d1457600080fd5b505160065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525193945060009392169163ca6a48c291602480820192602092909190829003018186803b158015611d8657600080fd5b505afa158015611d9a573d6000803e3d6000fd5b505050506040513d6020811015611db057600080fd5b505190506001600160a01b038116611e11576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454611e2e906001600160a01b0316828463ffffffff61279c16565b5090565b600b6020526000908152604090205460ff1681565b60015481565b60025481565b6008546001600160a01b03163314611eb2576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60128181548110610d9857fe5b600c546001600160a01b031681565b6005546001600160a01b03163314611f67576040805162461bcd60e51b815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6008546001600160a01b03163314612000576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600355565b6008546001600160a01b03163314612064576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b601055565b6009546001600160a01b031681565b6008546001600160a01b031633146120d7576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60105481565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610a7257600080fd5b6006546000906001600160a01b031633146121c8576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b6121d182612624565b5060048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561221e57600080fd5b505afa158015612232573d6000803e3d6000fd5b505050506040513d602081101561224857600080fd5b505160065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525193945060009392169163ca6a48c291602480820192602092909190829003018186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d60208110156122e457600080fd5b505190506001600160a01b038116612345576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454612362906001600160a01b0316828463ffffffff61279c16565b50919050565b6008546001600160a01b031633146123c7576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600155565b6005546001600160a01b0316331461242b576040805162461bcd60e51b815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156124b457600080fd5b505afa1580156124c8573d6000803e3d6000fd5b505050506040513d60208110156124de57600080fd5b5051905080156125a957600c5460045461250c916001600160a01b039182169116600063ffffffff612a6516565b600c5460045461252f916001600160a01b0391821691168363ffffffff612a6516565b600c54604080517fa694fc3a0000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b15801561259557600080fd5b505af115801561112c573d6000803e3d6000fd5b50565b600f546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600061261b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612da3565b90505b92915050565b600c54604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810184905290516000926001600160a01b031691632e1a7d4d916024808301928692919082900301818387803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b5093949350505050565b60008282018381101561261b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826127105750600061261e565b8282028284828161271d57fe5b041461261b5760405162461bcd60e51b81526004018080602001828103825260218152602001806130f96021913960400191505060405180910390fd5b600061261b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e3a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261194e908490612e9f565b60006001600160a01b03168260018151811061283457fe5b60200260200101516001600160a01b0316141561285057600080fd5b600a548251612890916001600160a01b0316906000908590829061287057fe5b60200260200101516001600160a01b0316612a659092919063ffffffff16565b600a5482516128b0916001600160a01b0316908390859060009061287057fe5b600a546001600160a01b03166338ed173982600085306128d742603c63ffffffff6126a716565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612950578181015183820152602001612938565b505050509050019650505050505050600060405180830381600087803b15801561297957600080fd5b505af115801561298d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156129d457600080fd5b81019080805160405193929190846401000000008211156129f457600080fd5b908301906020820185811115612a0957600080fd5b8251866020820283011164010000000082111715612a2657600080fd5b82525081516020918201928201910280838360005b83811015612a53578181015183820152602001612a3b565b50505050905001604052505050505050565b801580612b045750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b5051155b612b3f5760405162461bcd60e51b81526004018080602001828103825260368152602001806131446036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261194e908490612e9f565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015612c0e57600080fd5b505afa158015612c22573d6000803e3d6000fd5b505050506040513d6020811015612c3857600080fd5b5051905080156125a957600654604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051612ce9926001600160a01b0316916361d027b3916004808301926020929190829003018186803b158015612ca157600080fd5b505afa158015612cb5573d6000803e3d6000fd5b505050506040513d6020811015612ccb57600080fd5b50516000546111139061271090610ee190869063ffffffff61270116565b600654604080517f8d8f1e670000000000000000000000000000000000000000000000000000000081529051612d90926001600160a01b031691638d8f1e67916004808301926020929190829003018186803b158015612d4857600080fd5b505afa158015612d5c573d6000803e3d6000fd5b505050506040513d6020811015612d7257600080fd5b50516001546111139061271090610ee190869063ffffffff61270116565b6125a9612465565b6125a9610ea9610ab2565b60008184841115612e325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612df7578181015183820152602001612ddf565b50505050905090810190601f168015612e245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612e895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612df7578181015183820152602001612ddf565b506000838581612e9557fe5b0495945050505050565b6060612ef4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612f509092919063ffffffff16565b80519091501561194e57808060200190516020811015612f1357600080fd5b505161194e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061311a602a913960400191505060405180910390fd5b6060612f5f8484600085612f67565b949350505050565b6060612f72856130f2565b612fc3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061302057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612fe3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613082576040519150601f19603f3d011682016040523d82523d6000602084013e613087565b606091505b5091509150811561309b579150612f5f9050565b8051156130ab5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315612df7578181015183820152602001612ddf565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220d1f66e7fc309e0873e291f57774c8229fa815629ed57356ac75283a7190466e864736f6c63430006070033000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d30000000000000000000000001cbf903de5d688eda7d6d895ea2f0a8f2a521e990000000000000000000000006847259b2b3a4c17e7c43c54409810af48ba5210000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d3
Deployed Bytecode
0x6080604052600436106103295760003560e01c8063722713f7116101a5578063b9e37489116100ec578063c7b9d53011610095578063d247d3c21161006f578063d247d3c214610579578063d33219b4146109e6578063f77c4791146109fb578063fe1f8f7a1461062157610329565b8063c7b9d53014610989578063d0e30db0146109bc578063d21220a7146109d157610329565b8063c1a3d44c116100c6578063c1a3d44c14610920578063c6223e2614610935578063c65e32421461095f57610329565b8063b9e37489146108c3578063bdacb303146108d8578063be64a1ad1461090b57610329565b806392eefe9b1161014e578063ab033ea911610128578063ab033ea91461083c578063ab73e4331461086f578063b531f5701461089957610329565b806392eefe9b146107ca5780639a3e4e4d146107fd5780639ec5a8941461082757610329565b8063879765831161017f578063879765831461075957806388993f22146107a05780638ccdbb70146107b557610329565b8063722713f714610705578063823785941461071a578063853828b61461074457610329565b80632e1a7d4d1161027457806351cff8d91161021d57806359739ec4116101f757806359739ec4146106b15780635aa6e675146106c65780636c9f0b47146106db5780636d13582c146106f057610329565b806351cff8d91461063657806351f3d0b81461066957806354df7b631461067e57610329565b80634641257d1161024e5780634641257d1461060c578063479119be146106215780634fe809cc1461057957610329565b80632e1a7d4d146105b85780632f48ab7d146105e25780633fc8cef3146105f757610329565b80631cff79cd116102d6578063249fb9b4116102b0578063249fb9b41461054f57806326e886c61461057957806329758c661461058e57610329565b80631cff79cd1461046f5780631f1fcd51146105255780631fe4a6861461053a57610329565b8063151f87ca11610307578063151f87ca1461039b57806317d7de7c146103b057806318eb0e0b1461043a57610329565b80630547104d1461032e5780630ac1d64f146103555780631158808614610386575b600080fd5b34801561033a57600080fd5b50610343610a10565b60408051918252519081900360200190f35b34801561036157600080fd5b5061036a610aa3565b604080516001600160a01b039092168252519081900360200190f35b34801561039257600080fd5b50610343610ab2565b3480156103a757600080fd5b5061036a610afd565b3480156103bc57600080fd5b506103c5610b0c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ff5781810151838201526020016103e7565b50505050905090810190601f16801561042c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044657600080fd5b5061046d6004803603602081101561045d57600080fd5b50356001600160a01b0316610b43565b005b6103c56004803603604081101561048557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156104b057600080fd5b8201836020820111156104c257600080fd5b803590602001918460018302840111640100000000831117156104e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bf6945050505050565b34801561053157600080fd5b5061036a610d03565b34801561054657600080fd5b5061036a610d12565b34801561055b57600080fd5b5061046d6004803603602081101561057257600080fd5b5035610d21565b34801561058557600080fd5b50610343610d85565b34801561059a57600080fd5b5061036a600480360360208110156105b157600080fd5b5035610d8b565b3480156105c457600080fd5b5061046d600480360360208110156105db57600080fd5b5035610db2565b3480156105ee57600080fd5b5061036a611133565b34801561060357600080fd5b5061036a611142565b34801561061857600080fd5b5061046d61115a565b34801561062d57600080fd5b50610343611953565b34801561064257600080fd5b506103436004803603602081101561065957600080fd5b50356001600160a01b031661195a565b34801561067557600080fd5b50610343611abb565b34801561068a57600080fd5b5061046d600480360360208110156106a157600080fd5b50356001600160a01b0316611ac1565b3480156106bd57600080fd5b50610343611b77565b3480156106d257600080fd5b5061036a611b7d565b3480156106e757600080fd5b5061036a611b8c565b3480156106fc57600080fd5b5061036a611b9b565b34801561071157600080fd5b50610343611baa565b34801561072657600080fd5b5061046d6004803603602081101561073d57600080fd5b5035611bd0565b34801561075057600080fd5b50610343611c34565b34801561076557600080fd5b5061078c6004803603602081101561077c57600080fd5b50356001600160a01b0316611e32565b604080519115158252519081900360200190f35b3480156107ac57600080fd5b50610343611e47565b3480156107c157600080fd5b50610343611e4d565b3480156107d657600080fd5b5061046d600480360360208110156107ed57600080fd5b50356001600160a01b0316611e53565b34801561080957600080fd5b5061036a6004803603602081101561082057600080fd5b5035611eec565b34801561083357600080fd5b5061036a611ef9565b34801561084857600080fd5b5061046d6004803603602081101561085f57600080fd5b50356001600160a01b0316611f08565b34801561087b57600080fd5b5061046d6004803603602081101561089257600080fd5b5035611fa1565b3480156108a557600080fd5b5061046d600480360360208110156108bc57600080fd5b5035612005565b3480156108cf57600080fd5b5061036a612069565b3480156108e457600080fd5b5061046d600480360360208110156108fb57600080fd5b50356001600160a01b0316612078565b34801561091757600080fd5b50610343612111565b34801561092c57600080fd5b50610343612117565b34801561094157600080fd5b506103436004803603602081101561095857600080fd5b5035612166565b34801561096b57600080fd5b5061046d6004803603602081101561098257600080fd5b5035612368565b34801561099557600080fd5b5061046d600480360360208110156109ac57600080fd5b50356001600160a01b03166123cc565b3480156109c857600080fd5b5061046d612465565b3480156109dd57600080fd5b5061036a6125ac565b3480156109f257600080fd5b5061036a6125bb565b348015610a0757600080fd5b5061036a6125ca565b600c54604080517e8cc26200000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b031691628cc262916024808301926020929190829003018186803b158015610a7257600080fd5b505afa158015610a86573d6000803e3d6000fd5b505050506040513d6020811015610a9c57600080fd5b5051905090565b6014546001600160a01b031681565b600c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610a7257600080fd5b6013546001600160a01b031681565b60408051808201909152601581527f53747261746567794d6974684d6973557364744c700000000000000000000000602082015290565b6005546001600160a01b0316331480610b6657506007546001600160a01b031633145b610bb7576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6008546060906001600160a01b03163314610c58576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316610cb3576040805162461bcd60e51b815260206004820152600760248201527f2174617267657400000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610cf357610cfa565b8160208501fd5b50505092915050565b6004546001600160a01b031681565b6007546001600160a01b031681565b6008546001600160a01b03163314610d80576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600055565b61271081565b60118181548110610d9857fe5b6000918252602090912001546001600160a01b0316905081565b6006546001600160a01b03163314610e11576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610e6057600080fd5b505afa158015610e74573d6000803e3d6000fd5b505050506040513d6020811015610e8a57600080fd5b5051905081811015610ec357610eae610ea9838363ffffffff6125d916565b612624565b9150610ec0828263ffffffff6126a716565b91505b6000610eed620186a0610ee16003548661270190919063ffffffff16565b9063ffffffff61275a16565b9050610f85600660009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4057600080fd5b505afa158015610f54573d6000803e3d6000fd5b505050506040513d6020811015610f6a57600080fd5b50516004546001600160a01b0316908363ffffffff61279c16565b6000610fa3620186a0610ee16002548761270190919063ffffffff16565b9050610ff6600660009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4057600080fd5b60065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b039283169381019390935251600093919091169163ca6a48c2916024808301926020929190829003018186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d602081101561108e57600080fd5b505190506001600160a01b0381166110ef576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61112c8161111384611107898863ffffffff6125d916565b9063ffffffff6125d916565b6004546001600160a01b0316919063ffffffff61279c16565b5050505050565b600e546001600160a01b031681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b336000908152600b602052604090205460ff168061118257506005546001600160a01b031633145b8061119757506007546001600160a01b031633145b6111a057600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b5050600d54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b15801561125557600080fd5b505afa158015611269573d6000803e3d6000fd5b505050506040513d602081101561127f57600080fd5b5051905080156113b65760006112a6612710610ee16010548561270190919063ffffffff16565b905061133e600660009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d602081101561132357600080fd5b5051600d546001600160a01b0316908363ffffffff61279c16565b6113b4601180548060200260200160405190810160405280929190818152602001828054801561139757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611379575b50505050506113af83856125d990919063ffffffff16565b61281c565b505b600e54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561140157600080fd5b505afa158015611415573d6000803e3d6000fd5b505050506040513d602081101561142b57600080fd5b5051905080156114a7576114a7601280548060200260200160405190810160405280929190818152602001828054801561148e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611470575b50505050506113af60028461275a90919063ffffffff16565b600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156114f257600080fd5b505afa158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b5051600f54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051905081158015906115ac5750600081115b1561194657600a54600e546115d5916001600160a01b039182169116600063ffffffff612a6516565b600a54600e546115f8916001600160a01b0391821691168463ffffffff612a6516565b600a54600f5461161c916001600160a01b039182169116600063ffffffff612a6516565b600a54600f5461163f916001600160a01b0391821691168363ffffffff612a6516565b600a54600e54600f54604080517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529183166024830152604482018690526064820185905260006084830181905260a483018190523060c4840152603c420160e48401529051929093169263e8e3370092610104808401936060939083900390910190829087803b1580156116e457600080fd5b505af11580156116f8573d6000803e3d6000fd5b505050506040513d606081101561170e57600080fd5b5050600654604080517f61d027b3000000000000000000000000000000000000000000000000000000008152905161182b926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561176f57600080fd5b505afa158015611783573d6000803e3d6000fd5b505050506040513d602081101561179957600080fd5b5051600e54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156117e657600080fd5b505afa1580156117fa573d6000803e3d6000fd5b505050506040513d602081101561181057600080fd5b5051600e546001600160a01b0316919063ffffffff61279c16565b600654604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051611946926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561188a57600080fd5b505afa15801561189e573d6000803e3d6000fd5b505050506040513d60208110156118b457600080fd5b5051600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561190157600080fd5b505afa158015611915573d6000803e3d6000fd5b505050506040513d602081101561192b57600080fd5b5051600f546001600160a01b0316919063ffffffff61279c16565b61194e612bbf565b505050565b620186a081565b6006546000906001600160a01b031633146119bc576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004546001600160a01b0383811691161415611a21576040805162461bcd60e51b8152602060048083019190915260248201527f77616e7400000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611a6757600080fd5b505afa158015611a7b573d6000803e3d6000fd5b505050506040513d6020811015611a9157600080fd5b5051600654909150611ab6906001600160a01b0384811691168363ffffffff61279c16565b919050565b60035481565b6005546001600160a01b0316331480611ae457506007546001600160a01b031633145b611b35576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60005481565b6005546001600160a01b031681565b600d546001600160a01b031681565b600a546001600160a01b031681565b6000611bcb611bb7610ab2565b611bbf612117565b9063ffffffff6126a716565b905090565b6008546001600160a01b03163314611c2f576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600255565b6006546000906001600160a01b03163314611c96576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b611c9e612d98565b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d6020811015611d1457600080fd5b505160065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525193945060009392169163ca6a48c291602480820192602092909190829003018186803b158015611d8657600080fd5b505afa158015611d9a573d6000803e3d6000fd5b505050506040513d6020811015611db057600080fd5b505190506001600160a01b038116611e11576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454611e2e906001600160a01b0316828463ffffffff61279c16565b5090565b600b6020526000908152604090205460ff1681565b60015481565b60025481565b6008546001600160a01b03163314611eb2576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60128181548110610d9857fe5b600c546001600160a01b031681565b6005546001600160a01b03163314611f67576040805162461bcd60e51b815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6008546001600160a01b03163314612000576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600355565b6008546001600160a01b03163314612064576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b601055565b6009546001600160a01b031681565b6008546001600160a01b031633146120d7576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60105481565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610a7257600080fd5b6006546000906001600160a01b031633146121c8576040805162461bcd60e51b815260206004820152600b60248201527f21636f6e74726f6c6c6572000000000000000000000000000000000000000000604482015290519081900360640190fd5b6121d182612624565b5060048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561221e57600080fd5b505afa158015612232573d6000803e3d6000fd5b505050506040513d602081101561224857600080fd5b505160065460048054604080517fca6a48c20000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101939093525193945060009392169163ca6a48c291602480820192602092909190829003018186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d60208110156122e457600080fd5b505190506001600160a01b038116612345576040805162461bcd60e51b8152602060048083019190915260248201527f216a617200000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454612362906001600160a01b0316828463ffffffff61279c16565b50919050565b6008546001600160a01b031633146123c7576040805162461bcd60e51b815260206004820152600960248201527f2174696d656c6f636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600155565b6005546001600160a01b0316331461242b576040805162461bcd60e51b815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156124b457600080fd5b505afa1580156124c8573d6000803e3d6000fd5b505050506040513d60208110156124de57600080fd5b5051905080156125a957600c5460045461250c916001600160a01b039182169116600063ffffffff612a6516565b600c5460045461252f916001600160a01b0391821691168363ffffffff612a6516565b600c54604080517fa694fc3a0000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b15801561259557600080fd5b505af115801561112c573d6000803e3d6000fd5b50565b600f546001600160a01b031681565b6008546001600160a01b031681565b6006546001600160a01b031681565b600061261b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612da3565b90505b92915050565b600c54604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810184905290516000926001600160a01b031691632e1a7d4d916024808301928692919082900301818387803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b5093949350505050565b60008282018381101561261b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826127105750600061261e565b8282028284828161271d57fe5b041461261b5760405162461bcd60e51b81526004018080602001828103825260218152602001806130f96021913960400191505060405180910390fd5b600061261b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e3a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261194e908490612e9f565b60006001600160a01b03168260018151811061283457fe5b60200260200101516001600160a01b0316141561285057600080fd5b600a548251612890916001600160a01b0316906000908590829061287057fe5b60200260200101516001600160a01b0316612a659092919063ffffffff16565b600a5482516128b0916001600160a01b0316908390859060009061287057fe5b600a546001600160a01b03166338ed173982600085306128d742603c63ffffffff6126a716565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612950578181015183820152602001612938565b505050509050019650505050505050600060405180830381600087803b15801561297957600080fd5b505af115801561298d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156129d457600080fd5b81019080805160405193929190846401000000008211156129f457600080fd5b908301906020820185811115612a0957600080fd5b8251866020820283011164010000000082111715612a2657600080fd5b82525081516020918201928201910280838360005b83811015612a53578181015183820152602001612a3b565b50505050905001604052505050505050565b801580612b045750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b5051155b612b3f5760405162461bcd60e51b81526004018080602001828103825260368152602001806131446036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261194e908490612e9f565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015612c0e57600080fd5b505afa158015612c22573d6000803e3d6000fd5b505050506040513d6020811015612c3857600080fd5b5051905080156125a957600654604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051612ce9926001600160a01b0316916361d027b3916004808301926020929190829003018186803b158015612ca157600080fd5b505afa158015612cb5573d6000803e3d6000fd5b505050506040513d6020811015612ccb57600080fd5b50516000546111139061271090610ee190869063ffffffff61270116565b600654604080517f8d8f1e670000000000000000000000000000000000000000000000000000000081529051612d90926001600160a01b031691638d8f1e67916004808301926020929190829003018186803b158015612d4857600080fd5b505afa158015612d5c573d6000803e3d6000fd5b505050506040513d6020811015612d7257600080fd5b50516001546111139061271090610ee190869063ffffffff61270116565b6125a9612465565b6125a9610ea9610ab2565b60008184841115612e325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612df7578181015183820152602001612ddf565b50505050905090810190601f168015612e245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612e895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612df7578181015183820152602001612ddf565b506000838581612e9557fe5b0495945050505050565b6060612ef4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612f509092919063ffffffff16565b80519091501561194e57808060200190516020811015612f1357600080fd5b505161194e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061311a602a913960400191505060405180910390fd5b6060612f5f8484600085612f67565b949350505050565b6060612f72856130f2565b612fc3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061302057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612fe3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613082576040519150601f19603f3d011682016040523d82523d6000602084013e613087565b606091505b5091509150811561309b579150612f5f9050565b8051156130ab5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315612df7578181015183820152602001612ddf565b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220d1f66e7fc309e0873e291f57774c8229fa815629ed57356ac75283a7190466e864736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d30000000000000000000000001cbf903de5d688eda7d6d895ea2f0a8f2a521e990000000000000000000000006847259b2b3a4c17e7c43c54409810af48ba5210000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d3
-----Decoded View---------------
Arg [0] : _governance (address): 0xD92c7fAa0Ca0e6AE4918f3a83d9832d9CAEAA0d3
Arg [1] : _strategist (address): 0x1CbF903De5D688eDa7D6D895ea2F0a8F2A521E99
Arg [2] : _controller (address): 0x6847259b2B3A4c17e7c43C54409810aF48bA5210
Arg [3] : _timelock (address): 0xD92c7fAa0Ca0e6AE4918f3a83d9832d9CAEAA0d3
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d3
Arg [1] : 0000000000000000000000001cbf903de5d688eda7d6d895ea2f0a8f2a521e99
Arg [2] : 0000000000000000000000006847259b2b3a4c17e7c43c54409810af48ba5210
Arg [3] : 000000000000000000000000d92c7faa0ca0e6ae4918f3a83d9832d9caeaa0d3
Deployed Bytecode Sourcemap
57503:779:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;53066:130:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53066:130:0;;;:::i;:::-;;;;;;;;;;;;;;;;57668:75;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57668:75:0;;;:::i;:::-;;;;-1:-1:-1;;;;;57668:75:0;;;;;;;;;;;;;;52919:139;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52919:139:0;;;:::i;57589:72::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57589:72:0;;;:::i;58164:115::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58164:115:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;58164:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43560:207;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43560:207:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43560:207:0;-1:-1:-1;;;;;43560:207:0;;:::i;:::-;;48023:1053;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;48023:1053:0;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;48023:1053:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;48023:1053:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;48023:1053:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;48023:1053:0;;-1:-1:-1;48023:1053:0;;-1:-1:-1;;;;;48023:1053:0:i;41609:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41609:19:0;;;:::i;41803:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41803:25:0;;;:::i;44364:213::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44364:213:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44364:213:0;;:::i;41136:54::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41136:54:0;;;:::i;54224:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54224:30:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;54224:30:0;;:::i;45740:1022::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45740:1022:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45740:1022:0;;:::i;53946:64::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53946:64:0;;;:::i;41635:73::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41635:73:0;;;:::i;55216:2247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55216:2247:0;;;:::i;41532:53::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41532:53:0;;;:::i;45375:289::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45375:289:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45375:289:0;-1:-1:-1;;;;;45375:289:0;;:::i;41486:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41486:39:0;;;:::i;43343:209::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43343:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43343:209:0;-1:-1:-1;;;;;43343:209:0;;:::i;41085:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41085:44:0;;;:::i;41739:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41739:25:0;;;:::i;53876:63::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53876:63:0;;;:::i;41958:71::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41958:71:0;;;:::i;43118:113::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43118:113:0;;;:::i;43974:195::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43974:195:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43974:195:0;;:::i;47330:430::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47330:430:0;;;:::i;42038:42::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42038:42:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42038:42:0;-1:-1:-1;;;;;42038:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;41199:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41199:36:0;;;:::i;41376:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41376:40:0;;;:::i;45062:151::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45062:151:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45062:151:0;-1:-1:-1;;;;;45062:151:0;;:::i;54261:33::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54261:33:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;54261:33:0;;:::i;52529:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52529:22:0;;;:::i;44748:155::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44748:155:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44748:155:0;-1:-1:-1;;;;;44748:155:0;;:::i;43775:191::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43775:191:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43775:191:0;;:::i;55033:139::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55033:139:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;55033:139:0;;:::i;41879:72::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41879:72:0;;;:::i;44911:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44911:143:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44911:143:0;-1:-1:-1;;;;;44911:143:0;;:::i;54113:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54113:26:0;;;:::i;42921:118::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42921:118:0;;;:::i;46826:428::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46826:428:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46826:428:0;;:::i;44177:179::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44177:179:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44177:179:0;;:::i;44585:155::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44585:155:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44585:155:0;-1:-1:-1;;;;;44585:155:0;;:::i;53232:302::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53232:302:0;;;:::i;54046:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54046:21:0;;;:::i;41835:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41835:23:0;;;:::i;41771:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41771:25:0;;;:::i;53066:130::-;53158:7;;53142:46;;;;;;53182:4;53142:46;;;;;;53115:7;;-1:-1:-1;;;;;53158:7:0;;53142:31;;:46;;;;;;;;;;;;;;53158:7;53142:46;;;2:2:-1;;;;27:1;24;17:12;2:2;53142:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53142:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;53142:46:0;;-1:-1:-1;53066:130:0;:::o;57668:75::-;;;-1:-1:-1;;;;;57668:75:0;;:::o;52919:139::-;53017:7;;53001:49;;;-1:-1:-1;;;53001:49:0;;53044:4;53001:49;;;;;;52974:7;;-1:-1:-1;;;;;53017:7:0;;53001:34;;:49;;;;;;;;;;;;;;53017:7;53001:49;;;2:2:-1;;;;27:1;24;17:12;57589:72:0;;;-1:-1:-1;;;;;57589:72:0;;:::o;58164:115::-;58241:30;;;;;;;;;;;;;;;;;58164:115;:::o;43560:207::-;43647:10;;-1:-1:-1;;;;;43647:10:0;43633;:24;;:66;;-1:-1:-1;43689:10:0;;-1:-1:-1;;;;;43689:10:0;43675;:24;43633:66;43625:93;;;;;-1:-1:-1;;;43625:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43729:22:0;43754:5;43729:22;;;:10;:22;;;;;:30;;;;;;43560:207::o;48023:1053::-;48189:8;;48128:21;;-1:-1:-1;;;;;48189:8:0;48175:10;:22;48167:44;;;;;-1:-1:-1;;;48167:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48230:21:0;;48222:41;;;;;-1:-1:-1;;;48222:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48540:1;48520;48495:5;48489:12;48465:4;48458:5;48454:16;48428:7;48404:4;48397:5;48393:16;48362:194;48582:16;48632:4;48626:11;48614:23;;48749:4;48745:9;48738:4;48731;48725;48721:15;48717:26;48713:42;48703:8;48699:57;48676:4;48651:120;48802:4;48792:8;48785:22;48860:4;48857:1;48850:4;48840:8;48836:19;48821:44;48895:9;48888:17;48928:1;48923:135;;;;48881:177;;48923:135;49034:4;49027;49017:8;49013:19;49006:33;48881:177;;;;48330:739;;;;:::o;41609:19::-;;;-1:-1:-1;;;;;41609:19:0;;:::o;41803:25::-;;;-1:-1:-1;;;;;41803:25:0;;:::o;44364:213::-;44488:8;;-1:-1:-1;;;;;44488:8:0;44474:10;:22;44466:44;;;;;-1:-1:-1;;;44466:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44521:22;:48;44364:213::o;41136:54::-;41185:5;41136:54;:::o;54224:30::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54224:30:0;;-1:-1:-1;54224:30:0;:::o;45740:1022::-;45817:10;;-1:-1:-1;;;;;45817:10:0;45803;:24;45795:48;;;;;-1:-1:-1;;;45795:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45880:4;;;45873:37;;;-1:-1:-1;;;45873:37:0;;45904:4;45873:37;;;;;;;;45854:16;;-1:-1:-1;;;;;45880:4:0;;;;45873:22;;:37;;;;;;;;;;;;;;45880:4;45873:37;;;2:2:-1;;;;27:1;24;17:12;2:2;45873:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45873:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45873:37:0;;-1:-1:-1;45925:18:0;;;45921:143;;;45970:36;45984:21;:7;45996:8;45984:21;:11;:21;:::i;:::-;45970:13;:36::i;:::-;45960:46;-1:-1:-1;46031:21:0;45960:46;46043:8;46031:21;:11;:21;:::i;:::-;46021:31;;45921:143;46076:15;46094:83;41579:6;46094:33;46106:20;;46094:7;:11;;:33;;;;:::i;:::-;:37;:83;:37;:83;:::i;:::-;46076:101;;46188:69;46226:10;;;;;;;;;-1:-1:-1;;;;;46226:10:0;-1:-1:-1;;;;;46214:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46214:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46214:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46214:33:0;46195:4;;-1:-1:-1;;;;;46195:4:0;;46249:7;46188:69;:25;:69;:::i;:::-;46270:20;46293:85;41471:6;46293:34;46305:21;;46293:7;:11;;:34;;;;:::i;:85::-;46270:108;;46389:112;46441:10;;;;;;;;;-1:-1:-1;;;;;46441:10:0;-1:-1:-1;;;;;46429:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;46389:112:0;46541:10;;46566:4;;;46529:43;;;;;;-1:-1:-1;;;;;46566:4:0;;;46529:43;;;;;;;;46514:12;;46541:10;;;;;46529:28;;:43;;;;;;;;;;;;;;46541:10;46529:43;;;2:2:-1;;;;27:1;24;17:12;2:2;46529:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46529:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46529:43:0;;-1:-1:-1;;;;;;46591:18:0;;46583:35;;;;;-1:-1:-1;;;46583:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46683:71;46709:4;46715:38;46740:12;46715:20;:7;46727;46715:20;:11;:20;:::i;:::-;:24;:38;:24;:38;:::i;:::-;46690:4;;-1:-1:-1;;;;;46690:4:0;;46683:71;;:25;:71;:::i;:::-;45740:1022;;;;;:::o;53946:64::-;;;-1:-1:-1;;;;;53946:64:0;;:::o;41635:73::-;41666:42;41635:73;:::o;55216:2247::-;42752:10;42741:22;;;;:10;:22;;;;;;;;;:67;;-1:-1:-1;42798:10:0;;-1:-1:-1;;;;;42798:10:0;42784;:24;42741:67;:112;;;-1:-1:-1;42843:10:0;;-1:-1:-1;;;;;42843:10:0;42829;:24;42741:112;42719:145;;12:1:-1;9;2:12;42719:145:0;55618:7:::1;;;;;;;;;-1:-1:-1::0;;;;;55618:7:0::1;-1:-1:-1::0;;;;;55602:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;55602:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;55671:3:0::1;::::0;55664:36:::1;::::0;;-1:-1:-1;;;55664:36:0;;55694:4:::1;55664:36;::::0;::::1;::::0;;;55649:12:::1;::::0;-1:-1:-1;;;;;;55671:3:0;;::::1;::::0;-1:-1:-1;55664:21:0::1;::::0;:36;;;;;::::1;::::0;;;;;;;;55671:3;55664:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;55664:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;55664:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;55664:36:0;;-1:-1:-1;55715:8:0;;55711:347:::1;;55788:16;55807:33;54183:5;55807:17;55816:7;;55807:4;:8;;:17;;;;:::i;:33::-;55788:52;;55855:119;55910:10;;;;;;;;;-1:-1:-1::0;;;;;55910:10:0::1;-1:-1:-1::0;;;;;55898:32:0::1;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;55898:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;55898:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;55898:34:0;55862:3:::1;::::0;-1:-1:-1;;;;;55862:3:0::1;::::0;55951:8;55855:119:::1;:24;:119;:::i;:::-;55989:57;56012:13;55989:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;55989:57:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;56027:18;56036:8;56027:4;:8;;:18;;;;:::i;:::-;55989:22;:57::i;:::-;55711:347;;56130:4;::::0;56123:37:::1;::::0;;-1:-1:-1;;;56123:37:0;;56154:4:::1;56123:37;::::0;::::1;::::0;;;56107:13:::1;::::0;-1:-1:-1;;;;;56130:4:0::1;::::0;56123:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;56130:4;56123:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;56123:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;56123:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;56123:37:0;;-1:-1:-1;56175:9:0;;56171:96:::1;;56201:54;56224:16;56201:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;56201:54:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;56242:12;56252:1;56242:5;:9;;:12;;;;:::i;56201:54::-;56339:4;::::0;56332:37:::1;::::0;;-1:-1:-1;;;56332:37:0;;56363:4:::1;56332:37;::::0;::::1;::::0;;;-1:-1:-1;;;;;56339:4:0;;::::1;::::0;56332:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;56339:4;56332:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;56332:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;56332:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;56332:37:0;56405:6:::1;::::0;56398:39:::1;::::0;;-1:-1:-1;;;56398:39:0;;56431:4:::1;56398:39;::::0;::::1;::::0;;;56332:37;;-1:-1:-1;56380:15:0::1;::::0;-1:-1:-1;;;;;56405:6:0;;::::1;::::0;56398:24:::1;::::0;:39;;;;;56332:37:::1;::::0;56398:39;;;;;;;;56405:6;56398:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;56398:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;56398:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;56398:39:0;;-1:-1:-1;56452:9:0;;;;;:24:::1;;;56475:1;56465:7;:11;56452:24;56448:911;;;56518:11;::::0;56500:4:::1;::::0;56493:40:::1;::::0;-1:-1:-1;;;;;56500:4:0;;::::1;::::0;56518:11:::1;;56493:40;:24;:40;:::i;:::-;56573:11;::::0;56555:4:::1;::::0;56548:44:::1;::::0;-1:-1:-1;;;;;56555:4:0;;::::1;::::0;56573:11:::1;56586:5:::0;56548:44:::1;:24;:44;:::i;:::-;56636:11;::::0;56616:6:::1;::::0;56609:42:::1;::::0;-1:-1:-1;;;;;56616:6:0;;::::1;::::0;56636:11:::1;;56609:42;:26;:42;:::i;:::-;56693:11;::::0;56673:6:::1;::::0;56666:48:::1;::::0;-1:-1:-1;;;;;56673:6:0;;::::1;::::0;56693:11:::1;56706:7:::0;56666:48:::1;:26;:48;:::i;:::-;56747:11;::::0;56791:4:::1;::::0;56814:6:::1;::::0;56731:253:::1;::::0;;;;;-1:-1:-1;;;;;56791:4:0;;::::1;56731:253;::::0;::::1;::::0;56814:6;;::::1;56731:253:::0;;;;;;;;;;;;;;;;56747:11:::1;56731:253:::0;;;;;;;;;;;;56937:4:::1;56731:253:::0;;;;56967:2:::1;56961:3;:8;56731:253:::0;;;;;;56747:11;;;::::1;::::0;56731:41:::1;::::0;:253;;;;;::::1;::::0;;;;;;;;;;;56747:11;56731:253;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;56731:253:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;56731:253:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;57086:10:0::1;::::0;56731:253;57074:34;;;;;;;57030:149:::1;::::0;-1:-1:-1;;;;;57086:10:0::1;::::0;57074:32:::1;::::0;:34:::1;::::0;;::::1;::::0;56731:253:::1;::::0;57074:34;;;;;;;57086:10;57074:34;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;57074:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;57074:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;57074:34:0;57134:4:::1;::::0;57127:37:::1;::::0;;-1:-1:-1;;;57127:37:0;;57158:4:::1;57127:37;::::0;::::1;::::0;;;-1:-1:-1;;;;;57134:4:0;;::::1;::::0;57127:22:::1;::::0;:37;;;;;57074:34:::1;::::0;57127:37;;;;;;;;57134:4;57127:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;57127:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;57127:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;57127:37:0;57037:4:::1;::::0;-1:-1:-1;;;;;57037:4:0::1;::::0;57030:149;::::1;:25;:149;:::i;:::-;57252:10;::::0;57240:34:::1;::::0;;;;;;;57194:153:::1;::::0;-1:-1:-1;;;;;57252:10:0::1;::::0;57240:32:::1;::::0;:34:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;57252:10;57240:34;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;57240:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;57240:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;57240:34:0;57300:6:::1;::::0;57293:39:::1;::::0;;-1:-1:-1;;;57293:39:0;;57326:4:::1;57293:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;57300:6:0;;::::1;::::0;57293:24:::1;::::0;:39;;;;;57240:34:::1;::::0;57293:39;;;;;;;;57300:6;57293:39;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;57293:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;57293:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;57293:39:0;57201:6:::1;::::0;-1:-1:-1;;;;;57201:6:0::1;::::0;57194:153;::::1;:27;:153;:::i;:::-;57417:38;:36;:38::i;:::-;42875:1;;;55216:2247::o:0;41532:53::-;41579:6;41532:53;:::o;45375:289::-;45476:10;;45426:15;;-1:-1:-1;;;;;45476:10:0;45462;:24;45454:48;;;;;-1:-1:-1;;;45454:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45521:4;;-1:-1:-1;;;;;45521:23:0;;;:4;;:23;;45513:40;;;;;-1:-1:-1;;;45513:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45574:31;;;-1:-1:-1;;;45574:31:0;;45599:4;45574:31;;;;;;-1:-1:-1;;;;;45574:16:0;;;;;:31;;;;;;;;;;;;;;:16;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;45574:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45574:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45574:31:0;45636:10;;45574:31;;-1:-1:-1;45616:40:0;;-1:-1:-1;;;;;45616:19:0;;;;45636:10;45574:31;45616:40;:19;:40;:::i;:::-;45375:289;;;:::o;41486:39::-;;;;:::o;43343:209::-;43433:10;;-1:-1:-1;;;;;43433:10:0;43419;:24;;:66;;-1:-1:-1;43475:10:0;;-1:-1:-1;;;;;43475:10:0;43461;:24;43419:66;43411:93;;;;;-1:-1:-1;;;43411:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43515:22:0;;;;;:10;:22;;;;;:29;;;;43540:4;43515:29;;;43343:209::o;41085:44::-;;;;:::o;41739:25::-;;;-1:-1:-1;;;;;41739:25:0;;:::o;53876:63::-;;;-1:-1:-1;;;;;53876:63:0;;:::o;41958:71::-;;;-1:-1:-1;;;;;41958:71:0;;:::o;43118:113::-;43160:7;43187:36;43207:15;:13;:15::i;:::-;43187;:13;:15::i;:::-;:19;:36;:19;:36;:::i;:::-;43180:43;;43118:113;:::o;43974:195::-;44082:8;;-1:-1:-1;;;;;44082:8:0;44068:10;:22;44060:44;;;;;-1:-1:-1;;;44060:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44115:21;:46;43974:195::o;47330:430::-;47421:10;;47371:15;;-1:-1:-1;;;;;47421:10:0;47407;:24;47399:48;;;;;-1:-1:-1;;;47399:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47458:14;:12;:14::i;:::-;47502:4;;;47495:37;;;-1:-1:-1;;;47495:37:0;;47526:4;47495:37;;;;;;;;-1:-1:-1;;;;;47502:4:0;;;;47495:22;;:37;;;;;;;;;;;;;;47502:4;47495:37;;;2:2:-1;;;;27:1;24;17:12;2:2;47495:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47495:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47495:37:0;47572:10;;47597:4;;;47560:43;;;;;;-1:-1:-1;;;;;47597:4:0;;;47560:43;;;;;;;;47495:37;;-1:-1:-1;47545:12:0;;47572:10;;;47560:28;;:43;;;;;47495:37;;47560:43;;;;;;;;47572:10;47560:43;;;2:2:-1;;;;27:1;24;17:12;2:2;47560:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47560:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47560:43:0;;-1:-1:-1;;;;;;47622:18:0;;47614:35;;;;;-1:-1:-1;;;47614:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47719:4;;47712:40;;-1:-1:-1;;;;;47719:4:0;47738;47744:7;47712:40;:25;:40;:::i;:::-;47330:430;;:::o;42038:42::-;;;;;;;;;;;;;;;:::o;41199:36::-;;;;:::o;41376:40::-;;;;:::o;45062:151::-;45148:8;;-1:-1:-1;;;;;45148:8:0;45134:10;:22;45126:44;;;;;-1:-1:-1;;;45126:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45181:10;:24;;;;-1:-1:-1;;;;;45181:24:0;;;;;;;;;;45062:151::o;54261:33::-;;;;;;;;;;52529:22;;;-1:-1:-1;;;;;52529:22:0;;:::o;44748:155::-;44834:10;;-1:-1:-1;;;;;44834:10:0;44820;:24;44812:48;;;;;-1:-1:-1;;;44812:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44871:10;:24;;;;-1:-1:-1;;;;;44871:24:0;;;;;;;;;;44748:155::o;43775:191::-;43881:8;;-1:-1:-1;;;;;43881:8:0;43867:10;:22;43859:44;;;;;-1:-1:-1;;;43859:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43914:20;:44;43775:191::o;55033:139::-;55113:8;;-1:-1:-1;;;;;55113:8:0;55099:10;:22;55091:44;;;;;-1:-1:-1;;;55091:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55146:7;:18;55033:139::o;41879:72::-;;;-1:-1:-1;;;;;41879:72:0;;:::o;44911:143::-;44993:8;;-1:-1:-1;;;;;44993:8:0;44979:10;:22;44971:44;;;;;-1:-1:-1;;;44971:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45026:8;:20;;;;-1:-1:-1;;;;;45026:20:0;;;;;;;;;;44911:143::o;54113:26::-;;;;:::o;42921:118::-;43001:4;;;42994:37;;;-1:-1:-1;;;42994:37:0;;43025:4;42994:37;;;;;;;;42967:7;;-1:-1:-1;;;;;43001:4:0;;;;42994:22;;:37;;;;;;;;;;;;;;43001:4;42994:37;;;2:2:-1;;;;27:1;24;17:12;46826:428:0;46959:10;;46904:15;;-1:-1:-1;;;;;46959:10:0;46945;:24;46937:48;;;;;-1:-1:-1;;;46937:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;46996:22;47010:7;46996:13;:22::i;:::-;-1:-1:-1;47048:4:0;;;47041:37;;;-1:-1:-1;;;47041:37:0;;47072:4;47041:37;;;;;;;;-1:-1:-1;;;;;47048:4:0;;;;47041:22;;:37;;;;;;;;;;;;;;47048:4;47041:37;;;2:2:-1;;;;27:1;24;17:12;2:2;47041:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47041:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47041:37:0;47118:10;;47143:4;;;47106:43;;;;;;-1:-1:-1;;;;;47143:4:0;;;47106:43;;;;;;;;47041:37;;-1:-1:-1;47091:12:0;;47118:10;;;47106:28;;:43;;;;;47041:37;;47106:43;;;;;;;;47118:10;47106:43;;;2:2:-1;;;;27:1;24;17:12;2:2;47106:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47106:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47106:43:0;;-1:-1:-1;;;;;;47168:18:0;;47160:35;;;;;-1:-1:-1;;;47160:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47213:4;;47206:40;;-1:-1:-1;;;;;47213:4:0;47232;47238:7;47206:40;:25;:40;:::i;:::-;46826:428;;;;:::o;44177:179::-;44277:8;;-1:-1:-1;;;;;44277:8:0;44263:10;:22;44255:44;;;;;-1:-1:-1;;;44255:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44310:17;:38;44177:179::o;44585:155::-;44671:10;;-1:-1:-1;;;;;44671:10:0;44657;:24;44649:48;;;;;-1:-1:-1;;;44649:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44708:10;:24;;;;-1:-1:-1;;;;;44708:24:0;;;;;;;;;;44585:155::o;53232:302::-;53301:4;;;53294:37;;;-1:-1:-1;;;53294:37:0;;53325:4;53294:37;;;;;;;;53278:13;;-1:-1:-1;;;;;53301:4:0;;;;53294:22;;:37;;;;;;;;;;;;;;53301:4;53294:37;;;2:2:-1;;;;27:1;24;17:12;2:2;53294:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53294:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;53294:37:0;;-1:-1:-1;53346:9:0;;53342:185;;53397:7;;53379:4;;53372:36;;-1:-1:-1;;;;;53379:4:0;;;;53397:7;;53372:36;:24;:36;:::i;:::-;53448:7;;53430:4;;53423:40;;-1:-1:-1;;;;;53430:4:0;;;;53448:7;53457:5;53423:40;:24;:40;:::i;:::-;53494:7;;53478:37;;;;;;;;;;;;;;-1:-1:-1;;;;;53494:7:0;;;;53478:30;;:37;;;;;53494:7;;53478:37;;;;;;;;53494:7;;53478:37;;;2:2:-1;;;;27:1;24;17:12;2:2;53478:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;53342:185:0;53232:302;:::o;54046:21::-;;;-1:-1:-1;;;;;54046:21:0;;:::o;41835:23::-;;;-1:-1:-1;;;;;41835:23:0;;:::o;41771:25::-;;;-1:-1:-1;;;;;41771:25:0;;:::o;1366:136::-;1424:7;1451:43;1455:1;1458;1451:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1444:50;;1366:136;;;;;:::o;53542:194::-;53677:7;;53661:42;;;;;;;;;;;;;;53636:7;;-1:-1:-1;;;;;53677:7:0;;53661:33;;:42;;;;;53636:7;;53661:42;;;;;;;53636:7;53677;53661:42;;;2:2:-1;;;;27:1;24;17:12;2:2;53661:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;53721:7:0;;53542:194;-1:-1:-1;;;;53542:194:0:o;902:181::-;960:7;992:5;;;1016:6;;;;1008:46;;;;;-1:-1:-1;;;1008:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2256:471;2314:7;2559:6;2555:47;;-1:-1:-1;2589:1:0;2582:8;;2555:47;2626:5;;;2630:1;2626;:5;:1;2650:5;;;;;:10;2642:56;;;;-1:-1:-1;;;2642:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3203:132;3261:7;3288:39;3292:1;3295;3288:39;;;;;;;;;;;;;;;;;:3;:39::i;26626:177::-;26736:58;;;-1:-1:-1;;;;;26736:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26736:58:0;;;;;;;;25:18:-1;;61:17;;26736:58:0;182:15:-1;26759:23:0;179:29:-1;160:49;;26709:86:0;;26729:5;;26709:19;:86::i;51272:489::-;51416:1;-1:-1:-1;;;;;51397:21:0;:4;51402:1;51397:7;;;;;;;;;;;;;;-1:-1:-1;;;;;51397:21:0;;;51389:30;;12:1:-1;9;2:12;51389:30:0;51490:11;;51469:7;;51462:43;;-1:-1:-1;;;;;51490:11:0;;;;51469:4;;51490:11;;51469:7;;;;;;;;;;-1:-1:-1;;;;;51462:27:0;;;:43;;;;;:::i;:::-;51544:11;;51523:7;;51516:49;;-1:-1:-1;;;;;51544:11:0;;51557:7;;51523:4;;51544:11;;51523:7;;;51516:49;51594:11;;-1:-1:-1;;;;;51594:11:0;51578:53;51646:7;51594:11;51684:4;51711;51731:11;:3;51739:2;51731:11;:7;:11;:::i;:::-;51578:175;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51578:175:0;-1:-1:-1;;;;;51578:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;51578:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51578:175:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51578:175:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;51578:175:0;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;51578:175:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;51578:175:0;;421:4:-1;412:14;;;;51578:175:0;;;;;412:14:-1;51578:175:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;51578:175:0;;;;;;;;;;;;51272:489;;:::o;27285:622::-;27655:10;;;27654:62;;-1:-1:-1;27671:39:0;;;;;;27695:4;27671:39;;;;-1:-1:-1;;;;;27671:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;27671:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27671:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27671:39:0;:44;27654:62;27646:152;;;;-1:-1:-1;;;27646:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27836:62;;;-1:-1:-1;;;;;27836:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27836:62:0;;;;;;;;25:18:-1;;61:17;;27836:62:0;182:15:-1;27859:22:0;179:29:-1;160:49;;27809:90:0;;27829:5;;27809:19;:90::i;51769:623::-;51860:4;;;51853:37;;;-1:-1:-1;;;51853:37:0;;51884:4;51853:37;;;;;;;;51837:13;;-1:-1:-1;;;;;51860:4:0;;;;51853:22;;:37;;;;;;;;;;;;;;51860:4;51853:37;;;2:2:-1;;;;27:1;24;17:12;2:2;51853:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51853:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51853:37:0;;-1:-1:-1;51907:9:0;;51903:482;;52019:10;;52007:34;;;;;;;;51963:173;;-1:-1:-1;;;;;52019:10:0;;52007:32;;:34;;;;;;;;;;;;;;52019:10;52007:34;;;2:2:-1;;;;27:1;24;17:12;2:2;52007:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52007:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;52007:34:0;52070:22;;52060:61;;41185:5;;52060:33;;:5;;:33;:9;:33;:::i;51963:173::-;52241:10;;52229:33;;;;;;;;52185:162;;-1:-1:-1;;;;;52241:10:0;;52229:31;;:33;;;;;;;;;;;;;;52241:10;52229:33;;;2:2:-1;;;;27:1;24;17:12;2:2;52229:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52229:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;52229:33:0;52291:17;;52281:51;;41286:5;;52281:28;;:5;;:28;:9;:28;:::i;52185:162::-;52364:9;:7;:9::i;47768:82::-;47812:30;47826:15;:13;:15::i;1805:192::-;1891:7;1927:12;1919:6;;;;1911:29;;;;-1:-1:-1;;;1911:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1911:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1963:5:0;;;1805:192::o;3831:278::-;3917:7;3952:12;3945:5;3937:28;;;;-1:-1:-1;;;3937:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3937:28:0;;3976:9;3992:1;3988;:5;;;;;;;3831:278;-1:-1:-1;;;;;3831:278:0:o;28931:761::-;29355:23;29381:69;29409:4;29381:69;;;;;;;;;;;;;;;;;29389:5;-1:-1:-1;;;;;29381:27:0;;;:69;;;;;:::i;:::-;29465:17;;29355:95;;-1:-1:-1;29465:21:0;29461:224;;29607:10;29596:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29596:30:0;29588:85;;;;-1:-1:-1;;;29588:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12754:196;12857:12;12889:53;12912:6;12920:4;12926:1;12929:12;12889:22;:53::i;:::-;12882:60;12754:196;-1:-1:-1;;;;12754:196:0:o;14131:979::-;14261:12;14294:18;14305:6;14294:10;:18::i;:::-;14286:60;;;;;-1:-1:-1;;;14286:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14420:12;14434:23;14461:6;-1:-1:-1;;;;;14461:11:0;14481:8;14492:4;14461:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14461:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14419:78:0;;;;14512:7;14508:595;;;14543:10;-1:-1:-1;14536:17:0;;-1:-1:-1;14536:17:0;14508:595;14657:17;;:21;14653:439;;14920:10;14914:17;14981:15;14968:10;14964:2;14960:19;14953:44;14868:148;15056:20;;-1:-1:-1;;;15056:20:0;;;;;;;;;;;;;;;;;15063:12;;15056:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9836:422:0;10203:20;10242:8;;;9836:422::o
Swarm Source
ipfs://d1f66e7fc309e0873e291f57774c8229fa815629ed57356ac75283a7190466e8
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.