Source Code
Multichain Info
Latest 25 from a total of 9,312 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Harvest | 17983898 | 1070 days ago | IN | 0 CELO | 0.01762406 | ||||
| Harvest | 17681487 | 1088 days ago | IN | 0 CELO | 0.01762535 | ||||
| Harvest | 17474212 | 1100 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17454762 | 1101 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17435208 | 1102 days ago | IN | 0 CELO | 0.00006674 | ||||
| Harvest | 17416851 | 1103 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17396845 | 1104 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17379131 | 1105 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17359721 | 1106 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17342407 | 1107 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17322645 | 1109 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17304658 | 1110 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17286078 | 1111 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17266143 | 1112 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17246911 | 1113 days ago | IN | 0 CELO | 0.00006781 | ||||
| Harvest | 17226317 | 1114 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17201817 | 1116 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17178958 | 1117 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17153936 | 1118 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17130201 | 1120 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17104501 | 1121 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17080158 | 1123 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17057607 | 1124 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17034117 | 1125 days ago | IN | 0 CELO | 0.00033572 | ||||
| Harvest | 17008683 | 1127 days ago | IN | 0 CELO | 0.00033572 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StrategySushiNativeDualLP
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity >=0.6.0 <0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://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: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
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) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
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, reverting 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) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* 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);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @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;
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 virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 virtual returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual 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 virtual {
_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 { }
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// 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");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// 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");
}
}
}
// File: contracts/BIFI/interfaces/common/IUniswapRouterETH.sol
pragma solidity >=0.6.0 <0.9.0;
interface IUniswapRouterETH {
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}
// File: contracts/BIFI/interfaces/common/IUniswapV2Pair.sol
pragma solidity ^0.6.0;
interface IUniswapV2Pair {
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function burn(address to) external returns (uint amount0, uint amount1);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
// File: contracts/BIFI/interfaces/sushi/IMiniChefV2.sol
pragma solidity ^0.6.0;
interface IMiniChefV2 {
function poolLength() external view returns (uint256);
function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256);
function pendingSushi(uint256 _pid, address _user) external view returns (uint256);
function deposit(uint256 pid, uint256 amount, address to) external;
function withdraw(uint256 pid, uint256 amount, address to) external;
function harvest(uint256 pid, address to) external;
function withdrawAndHarvest(uint256 pid, uint256 amount, address to) external;
function emergencyWithdraw(uint256 pid, address to) external;
function rewarder(uint256 pid) external view returns (address);
}
// File: contracts/BIFI/interfaces/sushi/IRewarder.sol
pragma solidity ^0.6.0;
interface IRewarder {
function poolLength() external view returns (uint256);
function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256);
function pendingToken(uint256 _pid, address _user) external view returns (uint256);
function deposit(uint256 pid, uint256 amount, address to) external;
function withdraw(uint256 pid, uint256 amount, address to) external;
function harvest(uint256 pid, address to) external;
function withdrawAndHarvest(uint256 pid, uint256 amount, address to) external;
function emergencyWithdraw(uint256 pid, address to) external;
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: @openzeppelin/contracts/utils/Pausable.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor () internal {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: contracts/BIFI/strategies/Common/StratManager.sol
pragma solidity ^0.6.12;
contract StratManager is Ownable, Pausable {
/**
* @dev Beefy Contracts:
* {keeper} - Address to manage a few lower risk features of the strat
* {strategist} - Address of the strategy author/deployer where strategist fee will go.
* {vault} - Address of the vault that controls the strategy's funds.
* {unirouter} - Address of exchange to execute swaps.
*/
address public keeper;
address public strategist;
address public unirouter;
address public vault;
address public beefyFeeRecipient;
/**
* @dev Initializes the base strategy.
* @param _keeper address to use as alternative owner.
* @param _strategist address where strategist fees go.
* @param _unirouter router to use for swaps
* @param _vault address of parent vault.
* @param _beefyFeeRecipient address where to send Beefy's fees.
*/
constructor(
address _keeper,
address _strategist,
address _unirouter,
address _vault,
address _beefyFeeRecipient
) public {
keeper = _keeper;
strategist = _strategist;
unirouter = _unirouter;
vault = _vault;
beefyFeeRecipient = _beefyFeeRecipient;
}
// checks that caller is either owner or keeper.
modifier onlyManager() {
require(msg.sender == owner() || msg.sender == keeper, "!manager");
_;
}
/**
* @dev Updates address of the strat keeper.
* @param _keeper new keeper address.
*/
function setKeeper(address _keeper) external onlyManager {
keeper = _keeper;
}
/**
* @dev Updates address where strategist fee earnings will go.
* @param _strategist new strategist address.
*/
function setStrategist(address _strategist) external {
require(msg.sender == strategist, "!strategist");
strategist = _strategist;
}
/**
* @dev Updates router that will be used for swaps.
* @param _unirouter new unirouter address.
*/
function setUnirouter(address _unirouter) external onlyOwner {
unirouter = _unirouter;
}
/**
* @dev Updates parent vault.
* @param _vault new vault address.
*/
function setVault(address _vault) external onlyOwner {
vault = _vault;
}
/**
* @dev Updates beefy fee recipient.
* @param _beefyFeeRecipient new beefy fee recipient address.
*/
function setBeefyFeeRecipient(address _beefyFeeRecipient) external onlyOwner {
beefyFeeRecipient = _beefyFeeRecipient;
}
/**
* @dev Function to synchronize balances before new user deposit.
* Can be overridden in the strategy.
*/
function beforeDeposit() external virtual {}
}
// File: contracts/BIFI/strategies/Common/FeeManager.sol
pragma solidity ^0.6.12;
abstract contract FeeManager is StratManager {
uint constant public STRATEGIST_FEE = 112;
uint constant public MAX_FEE = 1000;
uint constant public MAX_CALL_FEE = 111;
uint constant public WITHDRAWAL_FEE_CAP = 50;
uint constant public WITHDRAWAL_MAX = 10000;
uint public withdrawalFee = 10;
uint public callFee = 111;
uint public beefyFee = MAX_FEE - STRATEGIST_FEE - callFee;
function setCallFee(uint256 _fee) public onlyManager {
require(_fee <= MAX_CALL_FEE, "!cap");
callFee = _fee;
beefyFee = MAX_FEE - STRATEGIST_FEE - callFee;
}
function setWithdrawalFee(uint256 _fee) public onlyManager {
require(_fee <= WITHDRAWAL_FEE_CAP, "!cap");
withdrawalFee = _fee;
}
}
// File: contracts/BIFI/strategies/Sushi/StrategySushiNativeDualLP.sol
pragma solidity ^0.6.12;
contract StrategySushiNativeDualLP is StratManager, FeeManager {
using SafeERC20 for IERC20;
using SafeMath for uint256;
// Tokens used
address public native;
address public output;
address public want;
address public lpToken0;
address public lpToken1;
// Third party contracts
address public chef;
uint256 public poolId;
uint256 public lastHarvest;
bool public harvestOnDeposit;
// Routes
address[] public outputToNativeRoute;
address[] public nativeToLp0Route;
address[] public nativeToLp1Route;
/**
* @dev Event that is fired each time someone harvests the strat.
*/
event StratHarvest(address indexed harvester, uint256 wantHarvested, uint256 tvl);
event Deposit(uint256 tvl);
event Withdraw(uint256 tvl);
constructor(
address _want,
uint256 _poolId,
address _chef,
address _vault,
address _unirouter,
address _keeper,
address _strategist,
address _beefyFeeRecipient,
address[] memory _outputToNativeRoute,
address[] memory _nativeToLp0Route,
address[] memory _nativeToLp1Route
) StratManager(_keeper, _strategist, _unirouter, _vault, _beefyFeeRecipient) public {
want = _want;
poolId = _poolId;
chef = _chef;
require(_outputToNativeRoute.length >= 2);
output = _outputToNativeRoute[0];
native = _outputToNativeRoute[_outputToNativeRoute.length - 1];
outputToNativeRoute = _outputToNativeRoute;
// setup lp routing
lpToken0 = IUniswapV2Pair(want).token0();
require(_nativeToLp0Route[0] == native);
require(_nativeToLp0Route[_nativeToLp0Route.length - 1] == lpToken0);
nativeToLp0Route = _nativeToLp0Route;
lpToken1 = IUniswapV2Pair(want).token1();
require(_nativeToLp1Route[0] == native);
require(_nativeToLp1Route[_nativeToLp1Route.length - 1] == lpToken1);
nativeToLp1Route = _nativeToLp1Route;
_giveAllowances();
}
// puts the funds to work
function deposit() public whenNotPaused {
uint256 wantBal = IERC20(want).balanceOf(address(this));
if (wantBal > 0) {
IMiniChefV2(chef).deposit(poolId, wantBal, address(this));
emit Deposit(balanceOf());
}
}
function withdraw(uint256 _amount) external {
require(msg.sender == vault, "!vault");
uint256 wantBal = IERC20(want).balanceOf(address(this));
if (wantBal < _amount) {
IMiniChefV2(chef).withdraw(poolId, _amount.sub(wantBal), address(this));
wantBal = IERC20(want).balanceOf(address(this));
}
if (wantBal > _amount) {
wantBal = _amount;
}
if (tx.origin == owner() || paused()) {
IERC20(want).safeTransfer(vault, wantBal);
} else {
uint256 withdrawalFeeAmount = wantBal.mul(withdrawalFee).div(WITHDRAWAL_MAX);
IERC20(want).safeTransfer(vault, wantBal.sub(withdrawalFeeAmount));
}
emit Withdraw(balanceOf());
}
function beforeDeposit() external override {
if (harvestOnDeposit) {
require(msg.sender == vault, "!vault");
_harvest(tx.origin);
}
}
function harvest() external virtual {
_harvest(tx.origin);
}
function harvestWithCallFeeRecipient(address callFeeRecipient) external virtual {
_harvest(callFeeRecipient);
}
function managerHarvest() external onlyManager {
_harvest(tx.origin);
}
// compounds earnings and charges performance fee
function _harvest(address callFeeRecipient) internal whenNotPaused {
IMiniChefV2(chef).harvest(poolId, address(this));
uint256 outputBal = IERC20(output).balanceOf(address(this));
uint256 nativeBal = IERC20(native).balanceOf(address(this));
if (outputBal > 0 || nativeBal > 0) {
chargeFees(callFeeRecipient);
addLiquidity();
uint256 wantHarvested = balanceOfWant();
deposit();
lastHarvest = block.timestamp;
emit StratHarvest(msg.sender, wantHarvested, balanceOf());
}
}
// performance fees
function chargeFees(address callFeeRecipient) internal {
uint256 toNative = IERC20(output).balanceOf(address(this));
IUniswapRouterETH(unirouter).swapExactTokensForTokens(toNative, 0, outputToNativeRoute, address(this), block.timestamp);
uint256 feeBal = IERC20(native).balanceOf(address(this)).mul(45).div(1000);
uint256 callFeeAmount = feeBal.mul(callFee).div(MAX_FEE);
IERC20(native).safeTransfer(callFeeRecipient, callFeeAmount);
uint256 beefyFeeAmount = feeBal.mul(beefyFee).div(MAX_FEE);
IERC20(native).safeTransfer(beefyFeeRecipient, beefyFeeAmount);
uint256 strategistFee = feeBal.mul(STRATEGIST_FEE).div(MAX_FEE);
IERC20(native).safeTransfer(strategist, strategistFee);
}
// Adds liquidity to AMM and gets more LP tokens.
function addLiquidity() internal {
uint256 nativeHalf = IERC20(native).balanceOf(address(this)).div(2);
if (lpToken0 != native) {
IUniswapRouterETH(unirouter).swapExactTokensForTokens(nativeHalf, 0, nativeToLp0Route, address(this), block.timestamp);
}
if (lpToken1 != native) {
IUniswapRouterETH(unirouter).swapExactTokensForTokens(nativeHalf, 0, nativeToLp1Route, address(this), block.timestamp);
}
uint256 lp0Bal = IERC20(lpToken0).balanceOf(address(this));
uint256 lp1Bal = IERC20(lpToken1).balanceOf(address(this));
IUniswapRouterETH(unirouter).addLiquidity(lpToken0, lpToken1, lp0Bal, lp1Bal, 1, 1, address(this), block.timestamp);
}
// calculate the total underlaying 'want' held by the strat.
function balanceOf() public view returns (uint256) {
return balanceOfWant().add(balanceOfPool());
}
// it calculates how much 'want' this contract holds.
function balanceOfWant() public view returns (uint256) {
return IERC20(want).balanceOf(address(this));
}
// it calculates how much 'want' the strategy has working in the farm.
function balanceOfPool() public view returns (uint256) {
(uint256 _amount, ) = IMiniChefV2(chef).userInfo(poolId, address(this));
return _amount;
}
// called as part of strat migration. Sends all the available funds back to the vault.
function retireStrat() external {
require(msg.sender == vault, "!vault");
IMiniChefV2(chef).emergencyWithdraw(poolId, address(this));
uint256 wantBal = IERC20(want).balanceOf(address(this));
IERC20(want).transfer(vault, wantBal);
}
// returns rewards unharvested
function rewardsAvailable() public view returns (uint256) {
return IMiniChefV2(chef).pendingSushi(poolId, address(this));
}
// native reward amount for calling harvest
function callReward() public view returns (uint256) {
uint256 pendingReward;
address rewarder = IMiniChefV2(chef).rewarder(poolId);
if (rewarder != address(0)) {
pendingReward = IRewarder(rewarder).pendingToken(poolId, address(this));
}
uint256 outputBal = rewardsAvailable();
uint256 nativeOut;
if (outputBal > 0) {
try IUniswapRouterETH(unirouter).getAmountsOut(outputBal, outputToNativeRoute)
returns (uint256[] memory amountOut)
{
nativeOut = amountOut[amountOut.length -1];
}
catch {}
}
uint256 totNative = nativeOut.add(pendingReward);
return totNative.mul(45).div(1000).mul(callFee).div(MAX_FEE);
}
function setHarvestOnDeposit(bool _harvestOnDeposit) external onlyManager {
harvestOnDeposit = _harvestOnDeposit;
if (harvestOnDeposit) {
setWithdrawalFee(0);
} else {
setWithdrawalFee(10);
}
}
// pauses deposits and withdraws all funds from third party systems.
function panic() public onlyManager {
pause();
IMiniChefV2(chef).emergencyWithdraw(poolId, address(this));
}
function pause() public onlyManager {
_pause();
_removeAllowances();
}
function unpause() external onlyManager {
_unpause();
_giveAllowances();
deposit();
}
function _giveAllowances() internal {
IERC20(want).safeApprove(chef, type(uint256).max);
IERC20(native).safeApprove(unirouter, type(uint256).max);
IERC20(output).safeApprove(unirouter, type(uint256).max);
IERC20(lpToken0).safeApprove(unirouter, 0);
IERC20(lpToken0).safeApprove(unirouter, type(uint256).max);
IERC20(lpToken1).safeApprove(unirouter, 0);
IERC20(lpToken1).safeApprove(unirouter, type(uint256).max);
}
function _removeAllowances() internal {
IERC20(want).safeApprove(chef, 0);
IERC20(native).safeApprove(unirouter, 0);
IERC20(output).safeApprove(unirouter, 0);
IERC20(lpToken0).safeApprove(unirouter, 0);
IERC20(lpToken1).safeApprove(unirouter, 0);
}
}{
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_want","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_chef","type":"address"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_unirouter","type":"address"},{"internalType":"address","name":"_keeper","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_beefyFeeRecipient","type":"address"},{"internalType":"address[]","name":"_outputToNativeRoute","type":"address[]"},{"internalType":"address[]","name":"_nativeToLp0Route","type":"address[]"},{"internalType":"address[]","name":"_nativeToLp1Route","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"harvester","type":"address"},{"indexed":false,"internalType":"uint256","name":"wantHarvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"StratHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_CALL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STRATEGIST_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_FEE_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"beefyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beefyFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestOnDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"callFeeRecipient","type":"address"}],"name":"harvestWithCallFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managerHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"native","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nativeToLp0Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nativeToLp1Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"output","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToNativeRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"panic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retireStrat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beefyFeeRecipient","type":"address"}],"name":"setBeefyFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_harvestOnDeposit","type":"bool"}],"name":"setHarvestOnDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_unirouter","type":"address"}],"name":"setUnirouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unirouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600a600655606f6007556103096008553480156200002157600080fd5b5060405162003bde38038062003bde83398181016040526101608110156200004857600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0180519751999b989a96999598949793969295919491939282019284640100000000821115620000a157600080fd5b908301906020820185811115620000b757600080fd5b8251866020820283011164010000000082111715620000d557600080fd5b82525081516020918201928201910280838360005b8381101562000104578181015183820152602001620000ea565b50505050905001604052602001805160405193929190846401000000008211156200012e57600080fd5b9083019060208201858111156200014457600080fd5b82518660208202830111640100000000821117156200016257600080fd5b82525081516020918201928201910280838360005b838110156200019157818101518382015260200162000177565b5050505090500160405260200180516040519392919084640100000000821115620001bb57600080fd5b908301906020820185811115620001d157600080fd5b8251866020820283011164010000000082111715620001ef57600080fd5b82525081516020918201928201910280838360005b838110156200021e57818101518382015260200162000204565b505050509050016040525050508585888a876000620002426200060860201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055600180546001600160a01b03199081166001600160a01b03978816179091556002805482169587169590951785556003805482169487169490941790935560048054841692861692909217909155600580548316918516919091179055600b805482168f8516179055600f8d9055600e8054909116928c1692909217909155835110156200032657600080fd5b826000815181106200033457fe5b6020026020010151600a60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001845103815181106200037357fe5b602090810291909101810151600980546001600160a01b0319166001600160a01b039092169190911790558351620003b2916012919086019062000b5a565b50600b60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040257600080fd5b505afa15801562000417573d6000803e3d6000fd5b505050506040513d60208110156200042e57600080fd5b5051600c80546001600160a01b0319166001600160a01b03928316179055600954835191169083906000906200046057fe5b60200260200101516001600160a01b0316146200047c57600080fd5b600c5482516001600160a01b0390911690839060001981019081106200049e57fe5b60200260200101516001600160a01b031614620004ba57600080fd5b8151620004cf90601390602085019062000b5a565b50600b60009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200051f57600080fd5b505afa15801562000534573d6000803e3d6000fd5b505050506040513d60208110156200054b57600080fd5b5051600d80546001600160a01b0319166001600160a01b03928316179055600954825191169082906000906200057d57fe5b60200260200101516001600160a01b0316146200059957600080fd5b600d5481516001600160a01b039091169082906000198101908110620005bb57fe5b60200260200101516001600160a01b031614620005d757600080fd5b8051620005ec90601490602084019062000b5a565b50620005f76200060c565b505050505050505050505062000be5565b3390565b600e54600b5462000639916001600160a01b03918216911660001962000747602090811b62001b0617901c565b60035460095462000666916001600160a01b03918216911660001962000747602090811b62001b0617901c565b600354600a5462000693916001600160a01b03918216911660001962000747602090811b62001b0617901c565b600354600c54620006bf916001600160a01b039182169116600062000747602090811b62001b0617901c565b600354600c54620006ec916001600160a01b03918216911660001962000747602090811b62001b0617901c565b600354600d5462000718916001600160a01b039182169116600062000747602090811b62001b0617901c565b600354600d5462000745916001600160a01b03918216911660001962000747602090811b62001b0617901c565b565b801580620007d1575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015620007a157600080fd5b505afa158015620007b6573d6000803e3d6000fd5b505050506040513d6020811015620007cd57600080fd5b5051155b6200080e5760405162461bcd60e51b815260040180806020018281038252603681526020018062003ba86036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620008669185916200086b16565b505050565b6060620008c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200092760201b62001c19179092919060201c565b8051909150156200086657808060200190516020811015620008e857600080fd5b5051620008665760405162461bcd60e51b815260040180806020018281038252602a81526020018062003b7e602a913960400191505060405180910390fd5b606062000938848460008562000942565b90505b9392505050565b606082471015620009855760405162461bcd60e51b815260040180806020018281038252602681526020018062003b586026913960400191505060405180910390fd5b620009908562000aaa565b620009e2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831062000a235780518252601f19909201916020918201910162000a02565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462000a87576040519150601f19603f3d011682016040523d82523d6000602084013e62000a8c565b606091505b50909250905062000a9f82828662000ab0565b979650505050505050565b3b151590565b6060831562000ac15750816200093b565b82511562000ad25782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b1e57818101518382015260200162000b04565b50505050905090810190601f16801562000b4c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b82805482825590600052602060002090810192821562000bb2579160200282015b8281111562000bb257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000b7b565b5062000bc092915062000bc4565b5090565b5b8082111562000bc05780546001600160a01b031916815560010162000bc5565b612f638062000bf56000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80638912cb8b1161019d578063d0e30db0116100e9578063e270dbf3116100a2578063f20eaeb81161007c578063f20eaeb81461061e578063f2fde38b14610626578063fb6177871461064c578063fbfa77cf146106545761030c565b8063e270dbf3146105f1578063e7a7250a1461060e578063f1a392da146106165761030c565b8063d0e30db01461058e578063d310258914610596578063d801d9461461059e578063d92f3d73146105a6578063dc4987cc146105cc578063dfbdc437146105e95761030c565b8063a68833e511610156578063bc063e1a11610130578063bc063e1a1461053b578063be12a97814610543578063c1a3d44c14610560578063c7b9d530146105685761030c565b8063a68833e5146104f0578063ac1e502514610516578063aced1661146105335761030c565b80638912cb8b146104c05780638bc7e8c4146104c85780638da5cb5b146104d05780638e145459146104d857806390321e1a146104e057806397fd323d146104e85761030c565b80634700d3051161025c5780636817031b11610215578063748747e6116101ef578063748747e6146104825780637d38ca65146104a85780638456cb59146104b0578063877562b6146104b85761030c565b80636817031b1461044c578063715018a614610472578063722713f71461047a5761030c565b80634700d305146103ea57806354518b1a146103f2578063573fef0a146103fa5780635c975abb146104025780635ee167c01461041e578063623d8bd2146104265761030c565b8063257ae0de116102c95780632e1a7d4d116102a35780632e1a7d4d146103b55780633e0dc34e146103d25780633f4ba83a146103da5780634641257d146103e25761030c565b8063257ae0de1461038857806326465826146103905780632ad5a53f146103ad5761030c565b80630e8fbb5a14610311578063115880861461033257806311b0b42d1461034c5780631f1fcd51146103705780631fc8bc5d146103785780631fe4a68614610380575b600080fd5b6103306004803603602081101561032757600080fd5b5035151561065c565b005b61033a6106fd565b60408051918252519081900360200190f35b610354610784565b604080516001600160a01b039092168252519081900360200190f35b610354610793565b6103546107a2565b6103546107b1565b6103546107c0565b610330600480360360208110156103a657600080fd5b50356107cf565b61033a610889565b610330600480360360208110156103cb57600080fd5b503561088e565b61033a610b48565b610330610b4e565b610330610bd5565b610330610bde565b61033a610cc3565b610330610cc9565b61040a610d1c565b604080519115158252519081900360200190f35b610354610d2c565b6103306004803603602081101561043c57600080fd5b50356001600160a01b0316610d3b565b6103306004803603602081101561046257600080fd5b50356001600160a01b0316610d44565b610330610dc8565b61033a610e74565b6103306004803603602081101561049857600080fd5b50356001600160a01b0316610e94565b61033a610f23565b610330610f28565b610354610fa5565b61040a610fb4565b61033a610fbd565b610354610fc3565b610354610fd2565b61033a610fe1565b61033a610fe7565b6103306004803603602081101561050657600080fd5b50356001600160a01b03166112df565b6103306004803603602081101561052c57600080fd5b5035611363565b610354611414565b61033a611423565b6103546004803603602081101561055957600080fd5b5035611429565b61033a611450565b6103306004803603602081101561057e57600080fd5b50356001600160a01b03166114cc565b61033061153b565b61033a6116b9565b6103306116bf565b610330600480360360208110156105bc57600080fd5b50356001600160a01b031661172c565b610354600480360360208110156105e257600080fd5b50356117b0565b61033a6117bd565b6103546004803603602081101561060757600080fd5b50356117c2565b61033a6117cf565b61033a611824565b61035461182a565b6103306004803603602081101561063c57600080fd5b50356001600160a01b0316611839565b61033061193b565b610354611af7565b610664610fc3565b6001600160a01b0316336001600160a01b0316148061068d57506001546001600160a01b031633145b6106c9576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b6011805460ff1916821515179081905560ff16156106f0576106eb6000611363565b6106fa565b6106fa600a611363565b50565b600e54600f54604080516393f1a40b60e01b81526004810192909252306024830152805160009384936001600160a01b03909116926393f1a40b92604480840193829003018186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d604081101561077c57600080fd5b505191505090565b6009546001600160a01b031681565b600b546001600160a01b031681565b600e546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6107d7610fc3565b6001600160a01b0316336001600160a01b0316148061080057506001546001600160a01b031633145b61083c576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b606f81111561087b576040805162461bcd60e51b815260206004808301919091526024820152630216361760e41b604482015290519081900360640190fd5b600781905561037803600855565b606f81565b6004546001600160a01b031633146108d6576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561092157600080fd5b505afa158015610935573d6000803e3d6000fd5b505050506040513d602081101561094b57600080fd5b5051905081811015610a5957600e54600f546001600160a01b0390911690630ad58d2f906109798585611c32565b306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b1580156109c757600080fd5b505af11580156109db573d6000803e3d6000fd5b5050600b54604080516370a0823160e01b815230600482015290516001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b505190505b81811115610a645750805b610a6c610fc3565b6001600160a01b0316326001600160a01b03161480610a8e5750610a8e610d1c565b15610ab557600454600b54610ab0916001600160a01b03918216911683611c94565b610b0a565b6000610ad8612710610ad260065485611ce690919063ffffffff16565b90611d3f565b600454909150610b08906001600160a01b0316610af58484611c32565b600b546001600160a01b03169190611c94565b505b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d610b33610e74565b60408051918252519081900360200190a15050565b600f5481565b610b56610fc3565b6001600160a01b0316336001600160a01b03161480610b7f57506001546001600160a01b031633145b610bbb576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610bc3611da6565b610bcb611e49565b610bd361153b565b565b610bd332611f20565b610be6610fc3565b6001600160a01b0316336001600160a01b03161480610c0f57506001546001600160a01b031633145b610c4b576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610c53610f28565b600e54600f54604080516302f940c760e41b81526004810192909252306024830152516001600160a01b0390921691632f940c709160448082019260009290919082900301818387803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50505050565b61271081565b60115460ff1615610bd3576004546001600160a01b03163314610bd5576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600054600160a01b900460ff1690565b600c546001600160a01b031681565b6106fa81611f20565b610d4c612158565b6001600160a01b0316610d5d610fc3565b6001600160a01b031614610da6576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610dd0612158565b6001600160a01b0316610de1610fc3565b6001600160a01b031614610e2a576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e8f610e816106fd565b610e89611450565b9061215c565b905090565b610e9c610fc3565b6001600160a01b0316336001600160a01b03161480610ec557506001546001600160a01b031633145b610f01576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b607081565b610f30610fc3565b6001600160a01b0316336001600160a01b03161480610f5957506001546001600160a01b031633145b610f95576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610f9d6121b6565b610bd361223f565b600d546001600160a01b031681565b60115460ff1681565b60065481565b6000546001600160a01b031690565b6005546001600160a01b031681565b60075481565b6000806000600e60009054906101000a90046001600160a01b03166001600160a01b031663c346253d600f546040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d602081101561107157600080fd5b505190506001600160a01b0381161561110357600f54604080516312390ebd60e21b81526004810192909252306024830152516001600160a01b038316916348e43af4916044808301926020929190829003018186803b1580156110d457600080fd5b505afa1580156110e8573d6000803e3d6000fd5b505050506040513d60208110156110fe57600080fd5b505191505b600061110d6117cf565b90506000811561129b576003546040805163d06ca61f60e01b8152600481018581526024820192835260128054604484018190526001600160a01b039095169463d06ca61f94889492939290916064909101908490801561119757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611179575b5050935050505060006040518083038186803b1580156111b657600080fd5b505afa92505050801561127657506040513d6000823e601f3d908101601f1916820160405260208110156111e957600080fd5b8101908080516040519392919084600160201b82111561120857600080fd5b90830190602082018581111561121d57600080fd5b82518660208202830111600160201b8211171561123957600080fd5b82525081516020918201928201910280838360005b8381101561126657818101518382015260200161124e565b5050505090500160405250505060015b61127f5761129b565b8060018251038151811061128f57fe5b60200260200101519150505b60006112a7828661215c565b90506112d56103e8610ad26007546112cf6103e8610ad2602d88611ce690919063ffffffff16565b90611ce6565b9550505050505090565b6112e7612158565b6001600160a01b03166112f8610fc3565b6001600160a01b031614611341576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61136b610fc3565b6001600160a01b0316336001600160a01b0316148061139457506001546001600160a01b031633145b6113d0576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b603281111561140f576040805162461bcd60e51b815260206004808301919091526024820152630216361760e41b604482015290519081900360640190fd5b600655565b6001546001600160a01b031681565b6103e881565b6012818154811061143657fe5b6000918252602090912001546001600160a01b0316905081565b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561149b57600080fd5b505afa1580156114af573d6000803e3d6000fd5b505050506040513d60208110156114c557600080fd5b5051905090565b6002546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611543610d1c565b15611588576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156115d357600080fd5b505afa1580156115e7573d6000803e3d6000fd5b505050506040513d60208110156115fd57600080fd5b5051905080156106fa57600e54600f5460408051638dbdbe6d60e01b8152600481019290925260248201849052306044830152516001600160a01b0390921691638dbdbe6d9160648082019260009290919082900301818387803b15801561166457600080fd5b505af1158015611678573d6000803e3d6000fd5b505050507f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384266116a5610e74565b60408051918252519081900360200190a150565b60085481565b6116c7610fc3565b6001600160a01b0316336001600160a01b031614806116f057506001546001600160a01b031633145b610bd5576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b611734612158565b6001600160a01b0316611745610fc3565b6001600160a01b03161461178e576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6014818154811061143657fe5b603281565b6013818154811061143657fe5b600e54600f546040805163065509bb60e21b81526004810192909252306024830152516000926001600160a01b03169163195426ec916044808301926020929190829003018186803b15801561149b57600080fd5b60105481565b600a546001600160a01b031681565b611841612158565b6001600160a01b0316611852610fc3565b6001600160a01b03161461189b576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b6001600160a01b0381166118e05760405162461bcd60e51b8152600401808060200182810382526026815260200180612e416026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611983576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600e54600f54604080516302f940c760e41b81526004810192909252306024830152516001600160a01b0390921691632f940c709160448082019260009290919082900301818387803b1580156119d957600080fd5b505af11580156119ed573d6000803e3d6000fd5b5050600b54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600b54600480546040805163a9059cbb60e01b81526001600160a01b039283169381019390935260248301859052519394509091169163a9059cbb916044808201926020929091908290030181600087803b158015611ac857600080fd5b505af1158015611adc573d6000803e3d6000fd5b505050506040513d6020811015611af257600080fd5b505050565b6004546001600160a01b031681565b801580611b8c575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611b5e57600080fd5b505afa158015611b72573d6000803e3d6000fd5b505050506040513d6020811015611b8857600080fd5b5051155b611bc75760405162461bcd60e51b8152600401808060200182810382526036815260200180612ef86036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611af29084906122d5565b6060611c288484600085612386565b90505b9392505050565b600082821115611c89576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611af29084906122d5565b600082611cf557506000611c8e565b82820282848281611d0257fe5b0414611c2b5760405162461bcd60e51b8152600401808060200182810382526021815260200180612e8d6021913960400191505060405180910390fd5b6000808211611d95576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611d9e57fe5b049392505050565b611dae610d1c565b611df6576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e2c612158565b604080516001600160a01b039092168252519081900360200190a1565b600e54600b54611e68916001600160a01b039182169116600019611b06565b600354600954611e87916001600160a01b039182169116600019611b06565b600354600a54611ea6916001600160a01b039182169116600019611b06565b600354600c54611ec4916001600160a01b0391821691166000611b06565b600354600c54611ee3916001600160a01b039182169116600019611b06565b600354600d54611f01916001600160a01b0391821691166000611b06565b600354600d54610bd3916001600160a01b039182169116600019611b06565b611f28610d1c565b15611f6d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e54600f5460408051630c7e663b60e11b81526004810192909252306024830152516001600160a01b03909216916318fccc769160448082019260009290919082900301818387803b158015611fc357600080fd5b505af1158015611fd7573d6000803e3d6000fd5b5050600a54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b15801561202857600080fd5b505afa15801561203c573d6000803e3d6000fd5b505050506040513d602081101561205257600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156120a557600080fd5b505afa1580156120b9573d6000803e3d6000fd5b505050506040513d60208110156120cf57600080fd5b50519050811515806120e15750600081115b15611af2576120ef836124e2565b6120f7612823565b6000612101611450565b905061210b61153b565b42601055337f9bc239f1724cacfb88cb1d66a2dc437467699b68a8c90d7b63110cf4b6f924108261213a610e74565b6040805192835260208301919091528051918290030190a250505050565b3390565b600082820183811015611c2b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6121be610d1c565b15612203576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e2c612158565b600e54600b5461225d916001600160a01b0391821691166000611b06565b60035460095461227b916001600160a01b0391821691166000611b06565b600354600a54612299916001600160a01b0391821691166000611b06565b600354600c546122b7916001600160a01b0391821691166000611b06565b600354600d54610bd3916001600160a01b0391821691166000611b06565b606061232a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c199092919063ffffffff16565b805190915015611af25780806020019051602081101561234957600080fd5b5051611af25760405162461bcd60e51b815260040180806020018281038252602a815260200180612ece602a913960400191505060405180910390fd5b6060824710156123c75760405162461bcd60e51b8152600401808060200182810382526026815260200180612e676026913960400191505060405180910390fd5b6123d085612d96565b612421576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106124605780518252601f199092019160209182019101612441565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146124c2576040519150601f19603f3d011682016040523d82523d6000602084013e6124c7565b606091505b50915091506124d7828286612d9c565b979650505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561252d57600080fd5b505afa158015612541573d6000803e3d6000fd5b505050506040513d602081101561255757600080fd5b50516003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526012805460a488018190529899506001600160a01b03909716976338ed1739978a979596909590929160c490910190869080156125f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125da575b50509650505050505050600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561265957600080fd5b8101908080516040519392919084600160201b82111561267857600080fd5b90830190602082018581111561268d57600080fd5b82518660208202830111600160201b821117156126a957600080fd5b82525081516020918201928201910280838360005b838110156126d65781810151838201526020016126be565b505050509190910160408181526009546370a0823160e01b835230600484015290516000975061277296506103e89550610ad29450602d93506001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505050506040513d602081101561276a57600080fd5b505190611ce6565b905060006127916103e8610ad260075485611ce690919063ffffffff16565b6009549091506127ab906001600160a01b03168583611c94565b60006127c86103e8610ad260085486611ce690919063ffffffff16565b6005546009549192506127e8916001600160a01b03908116911683611c94565b60006127fb6103e8610ad2866070611ce6565b60025460095491925061281b916001600160a01b03908116911683611c94565b505050505050565b600954604080516370a0823160e01b815230600482015290516000926128aa926002926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561287857600080fd5b505afa15801561288c573d6000803e3d6000fd5b505050506040513d60208110156128a257600080fd5b505190611d3f565b600954600c549192506001600160a01b03918216911614612a4c576003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526013805460a488018190526001600160a01b03909816976338ed1739978a97929594939160c4909101908690801561295f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612941575b50509650505050505050600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156129c057600080fd5b8101908080516040519392919084600160201b8211156129df57600080fd5b9083019060208201858111156129f457600080fd5b82518660208202830111600160201b82111715612a1057600080fd5b82525081516020918201928201910280838360005b83811015612a3d578181015183820152602001612a25565b50505050905001604052505050505b600954600d546001600160a01b03908116911614612beb576003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526014805460a488018190526001600160a01b03909816976338ed1739978a97929594939160c49091019086908015612afe57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ae0575b50509650505050505050600060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b5f57600080fd5b8101908080516040519392919084600160201b821115612b7e57600080fd5b908301906020820185811115612b9357600080fd5b82518660208202830111600160201b82111715612baf57600080fd5b82525081516020918201928201910280838360005b83811015612bdc578181015183820152602001612bc4565b50505050905001604052505050505b600c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612c3657600080fd5b505afa158015612c4a573d6000803e3d6000fd5b505050506040513d6020811015612c6057600080fd5b5051600d54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b5051600354600c54600d546040805162e8e33760e81b81526001600160a01b0393841660048201529183166024830152604482018790526064820185905260016084830181905260a48301523060c48301524260e48301525193945091169163e8e3370091610104808201926060929091908290030181600087803b158015612d6557600080fd5b505af1158015612d79573d6000803e3d6000fd5b505050506040513d6060811015612d8f57600080fd5b5050505050565b3b151590565b60608315612dab575081611c2b565b825115612dbb5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e05578181015183820152602001612ded565b50505050905090810190601f168015612e325780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220dbb52b785e7c1640ccac31a536f5b5e3d596d66042213b93e21e4516a8bc7c2e64736f6c634300060c0033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000a364ede5590b46e618527d7535506743d978bbf200000000000000000000000000000000000000000000000000000000000000050000000000000000000000008084936982d089130e001b470edf58faca445008000000000000000000000000c8acba0068b0f80f5176b6e14b9c7d1af9b0f9a20000000000000000000000001421bde4b10e8dd459b3bcb598810b1337d5684200000000000000000000000010aee6b5594942433e7fc2783598c979b030ef3d000000000000000000000000010da5ff62b6e45f89fa7b2d8ced5a8b5754ec1b00000000000000000000000032c82ee8fca98ce5114d2060c5715aec714152fb000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000200000000000000000000000029dfce9c22003a4999930382fd00f9fd6133acd1000000000000000000000000471ece3750da237f93b8e339c536989b8978a4380000000000000000000000000000000000000000000000000000000000000003000000000000000000000000471ece3750da237f93b8e339c536989b8978a438000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000471ece3750da237f93b8e339c536989b8978a438000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a000000000000000000000000ef4229c8c3250c675f21bcefa42f58efbff6002a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80638912cb8b1161019d578063d0e30db0116100e9578063e270dbf3116100a2578063f20eaeb81161007c578063f20eaeb81461061e578063f2fde38b14610626578063fb6177871461064c578063fbfa77cf146106545761030c565b8063e270dbf3146105f1578063e7a7250a1461060e578063f1a392da146106165761030c565b8063d0e30db01461058e578063d310258914610596578063d801d9461461059e578063d92f3d73146105a6578063dc4987cc146105cc578063dfbdc437146105e95761030c565b8063a68833e511610156578063bc063e1a11610130578063bc063e1a1461053b578063be12a97814610543578063c1a3d44c14610560578063c7b9d530146105685761030c565b8063a68833e5146104f0578063ac1e502514610516578063aced1661146105335761030c565b80638912cb8b146104c05780638bc7e8c4146104c85780638da5cb5b146104d05780638e145459146104d857806390321e1a146104e057806397fd323d146104e85761030c565b80634700d3051161025c5780636817031b11610215578063748747e6116101ef578063748747e6146104825780637d38ca65146104a85780638456cb59146104b0578063877562b6146104b85761030c565b80636817031b1461044c578063715018a614610472578063722713f71461047a5761030c565b80634700d305146103ea57806354518b1a146103f2578063573fef0a146103fa5780635c975abb146104025780635ee167c01461041e578063623d8bd2146104265761030c565b8063257ae0de116102c95780632e1a7d4d116102a35780632e1a7d4d146103b55780633e0dc34e146103d25780633f4ba83a146103da5780634641257d146103e25761030c565b8063257ae0de1461038857806326465826146103905780632ad5a53f146103ad5761030c565b80630e8fbb5a14610311578063115880861461033257806311b0b42d1461034c5780631f1fcd51146103705780631fc8bc5d146103785780631fe4a68614610380575b600080fd5b6103306004803603602081101561032757600080fd5b5035151561065c565b005b61033a6106fd565b60408051918252519081900360200190f35b610354610784565b604080516001600160a01b039092168252519081900360200190f35b610354610793565b6103546107a2565b6103546107b1565b6103546107c0565b610330600480360360208110156103a657600080fd5b50356107cf565b61033a610889565b610330600480360360208110156103cb57600080fd5b503561088e565b61033a610b48565b610330610b4e565b610330610bd5565b610330610bde565b61033a610cc3565b610330610cc9565b61040a610d1c565b604080519115158252519081900360200190f35b610354610d2c565b6103306004803603602081101561043c57600080fd5b50356001600160a01b0316610d3b565b6103306004803603602081101561046257600080fd5b50356001600160a01b0316610d44565b610330610dc8565b61033a610e74565b6103306004803603602081101561049857600080fd5b50356001600160a01b0316610e94565b61033a610f23565b610330610f28565b610354610fa5565b61040a610fb4565b61033a610fbd565b610354610fc3565b610354610fd2565b61033a610fe1565b61033a610fe7565b6103306004803603602081101561050657600080fd5b50356001600160a01b03166112df565b6103306004803603602081101561052c57600080fd5b5035611363565b610354611414565b61033a611423565b6103546004803603602081101561055957600080fd5b5035611429565b61033a611450565b6103306004803603602081101561057e57600080fd5b50356001600160a01b03166114cc565b61033061153b565b61033a6116b9565b6103306116bf565b610330600480360360208110156105bc57600080fd5b50356001600160a01b031661172c565b610354600480360360208110156105e257600080fd5b50356117b0565b61033a6117bd565b6103546004803603602081101561060757600080fd5b50356117c2565b61033a6117cf565b61033a611824565b61035461182a565b6103306004803603602081101561063c57600080fd5b50356001600160a01b0316611839565b61033061193b565b610354611af7565b610664610fc3565b6001600160a01b0316336001600160a01b0316148061068d57506001546001600160a01b031633145b6106c9576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b6011805460ff1916821515179081905560ff16156106f0576106eb6000611363565b6106fa565b6106fa600a611363565b50565b600e54600f54604080516393f1a40b60e01b81526004810192909252306024830152805160009384936001600160a01b03909116926393f1a40b92604480840193829003018186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d604081101561077c57600080fd5b505191505090565b6009546001600160a01b031681565b600b546001600160a01b031681565b600e546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6107d7610fc3565b6001600160a01b0316336001600160a01b0316148061080057506001546001600160a01b031633145b61083c576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b606f81111561087b576040805162461bcd60e51b815260206004808301919091526024820152630216361760e41b604482015290519081900360640190fd5b600781905561037803600855565b606f81565b6004546001600160a01b031633146108d6576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561092157600080fd5b505afa158015610935573d6000803e3d6000fd5b505050506040513d602081101561094b57600080fd5b5051905081811015610a5957600e54600f546001600160a01b0390911690630ad58d2f906109798585611c32565b306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b1580156109c757600080fd5b505af11580156109db573d6000803e3d6000fd5b5050600b54604080516370a0823160e01b815230600482015290516001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b505190505b81811115610a645750805b610a6c610fc3565b6001600160a01b0316326001600160a01b03161480610a8e5750610a8e610d1c565b15610ab557600454600b54610ab0916001600160a01b03918216911683611c94565b610b0a565b6000610ad8612710610ad260065485611ce690919063ffffffff16565b90611d3f565b600454909150610b08906001600160a01b0316610af58484611c32565b600b546001600160a01b03169190611c94565b505b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d610b33610e74565b60408051918252519081900360200190a15050565b600f5481565b610b56610fc3565b6001600160a01b0316336001600160a01b03161480610b7f57506001546001600160a01b031633145b610bbb576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610bc3611da6565b610bcb611e49565b610bd361153b565b565b610bd332611f20565b610be6610fc3565b6001600160a01b0316336001600160a01b03161480610c0f57506001546001600160a01b031633145b610c4b576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610c53610f28565b600e54600f54604080516302f940c760e41b81526004810192909252306024830152516001600160a01b0390921691632f940c709160448082019260009290919082900301818387803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b50505050565b61271081565b60115460ff1615610bd3576004546001600160a01b03163314610bd5576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600054600160a01b900460ff1690565b600c546001600160a01b031681565b6106fa81611f20565b610d4c612158565b6001600160a01b0316610d5d610fc3565b6001600160a01b031614610da6576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610dd0612158565b6001600160a01b0316610de1610fc3565b6001600160a01b031614610e2a576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e8f610e816106fd565b610e89611450565b9061215c565b905090565b610e9c610fc3565b6001600160a01b0316336001600160a01b03161480610ec557506001546001600160a01b031633145b610f01576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b607081565b610f30610fc3565b6001600160a01b0316336001600160a01b03161480610f5957506001546001600160a01b031633145b610f95576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b610f9d6121b6565b610bd361223f565b600d546001600160a01b031681565b60115460ff1681565b60065481565b6000546001600160a01b031690565b6005546001600160a01b031681565b60075481565b6000806000600e60009054906101000a90046001600160a01b03166001600160a01b031663c346253d600f546040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d602081101561107157600080fd5b505190506001600160a01b0381161561110357600f54604080516312390ebd60e21b81526004810192909252306024830152516001600160a01b038316916348e43af4916044808301926020929190829003018186803b1580156110d457600080fd5b505afa1580156110e8573d6000803e3d6000fd5b505050506040513d60208110156110fe57600080fd5b505191505b600061110d6117cf565b90506000811561129b576003546040805163d06ca61f60e01b8152600481018581526024820192835260128054604484018190526001600160a01b039095169463d06ca61f94889492939290916064909101908490801561119757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611179575b5050935050505060006040518083038186803b1580156111b657600080fd5b505afa92505050801561127657506040513d6000823e601f3d908101601f1916820160405260208110156111e957600080fd5b8101908080516040519392919084600160201b82111561120857600080fd5b90830190602082018581111561121d57600080fd5b82518660208202830111600160201b8211171561123957600080fd5b82525081516020918201928201910280838360005b8381101561126657818101518382015260200161124e565b5050505090500160405250505060015b61127f5761129b565b8060018251038151811061128f57fe5b60200260200101519150505b60006112a7828661215c565b90506112d56103e8610ad26007546112cf6103e8610ad2602d88611ce690919063ffffffff16565b90611ce6565b9550505050505090565b6112e7612158565b6001600160a01b03166112f8610fc3565b6001600160a01b031614611341576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61136b610fc3565b6001600160a01b0316336001600160a01b0316148061139457506001546001600160a01b031633145b6113d0576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b603281111561140f576040805162461bcd60e51b815260206004808301919091526024820152630216361760e41b604482015290519081900360640190fd5b600655565b6001546001600160a01b031681565b6103e881565b6012818154811061143657fe5b6000918252602090912001546001600160a01b0316905081565b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561149b57600080fd5b505afa1580156114af573d6000803e3d6000fd5b505050506040513d60208110156114c557600080fd5b5051905090565b6002546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611543610d1c565b15611588576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156115d357600080fd5b505afa1580156115e7573d6000803e3d6000fd5b505050506040513d60208110156115fd57600080fd5b5051905080156106fa57600e54600f5460408051638dbdbe6d60e01b8152600481019290925260248201849052306044830152516001600160a01b0390921691638dbdbe6d9160648082019260009290919082900301818387803b15801561166457600080fd5b505af1158015611678573d6000803e3d6000fd5b505050507f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384266116a5610e74565b60408051918252519081900360200190a150565b60085481565b6116c7610fc3565b6001600160a01b0316336001600160a01b031614806116f057506001546001600160a01b031633145b610bd5576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b611734612158565b6001600160a01b0316611745610fc3565b6001600160a01b03161461178e576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6014818154811061143657fe5b603281565b6013818154811061143657fe5b600e54600f546040805163065509bb60e21b81526004810192909252306024830152516000926001600160a01b03169163195426ec916044808301926020929190829003018186803b15801561149b57600080fd5b60105481565b600a546001600160a01b031681565b611841612158565b6001600160a01b0316611852610fc3565b6001600160a01b03161461189b576040805162461bcd60e51b81526020600482018190526024820152600080516020612eae833981519152604482015290519081900360640190fd5b6001600160a01b0381166118e05760405162461bcd60e51b8152600401808060200182810382526026815260200180612e416026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611983576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b600e54600f54604080516302f940c760e41b81526004810192909252306024830152516001600160a01b0390921691632f940c709160448082019260009290919082900301818387803b1580156119d957600080fd5b505af11580156119ed573d6000803e3d6000fd5b5050600b54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600b54600480546040805163a9059cbb60e01b81526001600160a01b039283169381019390935260248301859052519394509091169163a9059cbb916044808201926020929091908290030181600087803b158015611ac857600080fd5b505af1158015611adc573d6000803e3d6000fd5b505050506040513d6020811015611af257600080fd5b505050565b6004546001600160a01b031681565b801580611b8c575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611b5e57600080fd5b505afa158015611b72573d6000803e3d6000fd5b505050506040513d6020811015611b8857600080fd5b5051155b611bc75760405162461bcd60e51b8152600401808060200182810382526036815260200180612ef86036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611af29084906122d5565b6060611c288484600085612386565b90505b9392505050565b600082821115611c89576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611af29084906122d5565b600082611cf557506000611c8e565b82820282848281611d0257fe5b0414611c2b5760405162461bcd60e51b8152600401808060200182810382526021815260200180612e8d6021913960400191505060405180910390fd5b6000808211611d95576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611d9e57fe5b049392505050565b611dae610d1c565b611df6576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e2c612158565b604080516001600160a01b039092168252519081900360200190a1565b600e54600b54611e68916001600160a01b039182169116600019611b06565b600354600954611e87916001600160a01b039182169116600019611b06565b600354600a54611ea6916001600160a01b039182169116600019611b06565b600354600c54611ec4916001600160a01b0391821691166000611b06565b600354600c54611ee3916001600160a01b039182169116600019611b06565b600354600d54611f01916001600160a01b0391821691166000611b06565b600354600d54610bd3916001600160a01b039182169116600019611b06565b611f28610d1c565b15611f6d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e54600f5460408051630c7e663b60e11b81526004810192909252306024830152516001600160a01b03909216916318fccc769160448082019260009290919082900301818387803b158015611fc357600080fd5b505af1158015611fd7573d6000803e3d6000fd5b5050600a54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b15801561202857600080fd5b505afa15801561203c573d6000803e3d6000fd5b505050506040513d602081101561205257600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156120a557600080fd5b505afa1580156120b9573d6000803e3d6000fd5b505050506040513d60208110156120cf57600080fd5b50519050811515806120e15750600081115b15611af2576120ef836124e2565b6120f7612823565b6000612101611450565b905061210b61153b565b42601055337f9bc239f1724cacfb88cb1d66a2dc437467699b68a8c90d7b63110cf4b6f924108261213a610e74565b6040805192835260208301919091528051918290030190a250505050565b3390565b600082820183811015611c2b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6121be610d1c565b15612203576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e2c612158565b600e54600b5461225d916001600160a01b0391821691166000611b06565b60035460095461227b916001600160a01b0391821691166000611b06565b600354600a54612299916001600160a01b0391821691166000611b06565b600354600c546122b7916001600160a01b0391821691166000611b06565b600354600d54610bd3916001600160a01b0391821691166000611b06565b606061232a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c199092919063ffffffff16565b805190915015611af25780806020019051602081101561234957600080fd5b5051611af25760405162461bcd60e51b815260040180806020018281038252602a815260200180612ece602a913960400191505060405180910390fd5b6060824710156123c75760405162461bcd60e51b8152600401808060200182810382526026815260200180612e676026913960400191505060405180910390fd5b6123d085612d96565b612421576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106124605780518252601f199092019160209182019101612441565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146124c2576040519150601f19603f3d011682016040523d82523d6000602084013e6124c7565b606091505b50915091506124d7828286612d9c565b979650505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561252d57600080fd5b505afa158015612541573d6000803e3d6000fd5b505050506040513d602081101561255757600080fd5b50516003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526012805460a488018190529899506001600160a01b03909716976338ed1739978a979596909590929160c490910190869080156125f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125da575b50509650505050505050600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561265957600080fd5b8101908080516040519392919084600160201b82111561267857600080fd5b90830190602082018581111561268d57600080fd5b82518660208202830111600160201b821117156126a957600080fd5b82525081516020918201928201910280838360005b838110156126d65781810151838201526020016126be565b505050509190910160408181526009546370a0823160e01b835230600484015290516000975061277296506103e89550610ad29450602d93506001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505050506040513d602081101561276a57600080fd5b505190611ce6565b905060006127916103e8610ad260075485611ce690919063ffffffff16565b6009549091506127ab906001600160a01b03168583611c94565b60006127c86103e8610ad260085486611ce690919063ffffffff16565b6005546009549192506127e8916001600160a01b03908116911683611c94565b60006127fb6103e8610ad2866070611ce6565b60025460095491925061281b916001600160a01b03908116911683611c94565b505050505050565b600954604080516370a0823160e01b815230600482015290516000926128aa926002926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561287857600080fd5b505afa15801561288c573d6000803e3d6000fd5b505050506040513d60208110156128a257600080fd5b505190611d3f565b600954600c549192506001600160a01b03918216911614612a4c576003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526013805460a488018190526001600160a01b03909816976338ed1739978a97929594939160c4909101908690801561295f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612941575b50509650505050505050600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156129c057600080fd5b8101908080516040519392919084600160201b8211156129df57600080fd5b9083019060208201858111156129f457600080fd5b82518660208202830111600160201b82111715612a1057600080fd5b82525081516020918201928201910280838360005b83811015612a3d578181015183820152602001612a25565b50505050905001604052505050505b600954600d546001600160a01b03908116911614612beb576003546040516338ed173960e01b8152600481018381526000602483018190523060648401819052426084850181905260a0604486019081526014805460a488018190526001600160a01b03909816976338ed1739978a97929594939160c49091019086908015612afe57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612ae0575b50509650505050505050600060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b5f57600080fd5b8101908080516040519392919084600160201b821115612b7e57600080fd5b908301906020820185811115612b9357600080fd5b82518660208202830111600160201b82111715612baf57600080fd5b82525081516020918201928201910280838360005b83811015612bdc578181015183820152602001612bc4565b50505050905001604052505050505b600c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612c3657600080fd5b505afa158015612c4a573d6000803e3d6000fd5b505050506040513d6020811015612c6057600080fd5b5051600d54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d6020811015612cdd57600080fd5b5051600354600c54600d546040805162e8e33760e81b81526001600160a01b0393841660048201529183166024830152604482018790526064820185905260016084830181905260a48301523060c48301524260e48301525193945091169163e8e3370091610104808201926060929091908290030181600087803b158015612d6557600080fd5b505af1158015612d79573d6000803e3d6000fd5b505050506040513d6060811015612d8f57600080fd5b5050505050565b3b151590565b60608315612dab575081611c2b565b825115612dbb5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e05578181015183820152602001612ded565b50505050905090810190601f168015612e325780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220dbb52b785e7c1640ccac31a536f5b5e3d596d66042213b93e21e4516a8bc7c2e64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a364ede5590b46e618527d7535506743d978bbf200000000000000000000000000000000000000000000000000000000000000050000000000000000000000008084936982d089130e001b470edf58faca445008000000000000000000000000c8acba0068b0f80f5176b6e14b9c7d1af9b0f9a20000000000000000000000001421bde4b10e8dd459b3bcb598810b1337d5684200000000000000000000000010aee6b5594942433e7fc2783598c979b030ef3d000000000000000000000000010da5ff62b6e45f89fa7b2d8ced5a8b5754ec1b00000000000000000000000032c82ee8fca98ce5114d2060c5715aec714152fb000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000200000000000000000000000029dfce9c22003a4999930382fd00f9fd6133acd1000000000000000000000000471ece3750da237f93b8e339c536989b8978a4380000000000000000000000000000000000000000000000000000000000000003000000000000000000000000471ece3750da237f93b8e339c536989b8978a438000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000471ece3750da237f93b8e339c536989b8978a438000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a000000000000000000000000ef4229c8c3250c675f21bcefa42f58efbff6002a
-----Decoded View---------------
Arg [0] : _want (address): 0xA364EdE5590B46E618527d7535506743D978bBF2
Arg [1] : _poolId (uint256): 5
Arg [2] : _chef (address): 0x8084936982D089130e001b470eDf58faCA445008
Arg [3] : _vault (address): 0xc8Acba0068B0F80F5176B6e14b9c7D1aF9B0F9A2
Arg [4] : _unirouter (address): 0x1421bDe4B10e8dd459b3BCb598810B1337D56842
Arg [5] : _keeper (address): 0x10aee6B5594942433e7Fc2783598c979B030eF3D
Arg [6] : _strategist (address): 0x010dA5FF62B6e45f89FA7B2d8CEd5a8b5754eC1b
Arg [7] : _beefyFeeRecipient (address): 0x32C82EE8Fca98ce5114D2060c5715AEc714152FB
Arg [8] : _outputToNativeRoute (address[]): 0x29dFce9c22003A4999930382Fd00f9Fd6133Acd1,0x471EcE3750Da237f93B8E339c536989b8978a438
Arg [9] : _nativeToLp0Route (address[]): 0x471EcE3750Da237f93B8E339c536989b8978a438,0x122013fd7dF1C6F636a5bb8f03108E876548b455,0x765DE816845861e75A25fCA122bb6898B8B1282a
Arg [10] : _nativeToLp1Route (address[]): 0x471EcE3750Da237f93B8E339c536989b8978a438,0x122013fd7dF1C6F636a5bb8f03108E876548b455,0x765DE816845861e75A25fCA122bb6898B8B1282a,0xef4229c8c3250C675F21BCefa42f58EfbfF6002a
-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 000000000000000000000000a364ede5590b46e618527d7535506743d978bbf2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [2] : 0000000000000000000000008084936982d089130e001b470edf58faca445008
Arg [3] : 000000000000000000000000c8acba0068b0f80f5176b6e14b9c7d1af9b0f9a2
Arg [4] : 0000000000000000000000001421bde4b10e8dd459b3bcb598810b1337d56842
Arg [5] : 00000000000000000000000010aee6b5594942433e7fc2783598c979b030ef3d
Arg [6] : 000000000000000000000000010da5ff62b6e45f89fa7b2d8ced5a8b5754ec1b
Arg [7] : 00000000000000000000000032c82ee8fca98ce5114d2060c5715aec714152fb
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 00000000000000000000000029dfce9c22003a4999930382fd00f9fd6133acd1
Arg [13] : 000000000000000000000000471ece3750da237f93b8e339c536989b8978a438
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [15] : 000000000000000000000000471ece3750da237f93b8e339c536989b8978a438
Arg [16] : 000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455
Arg [17] : 000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [19] : 000000000000000000000000471ece3750da237f93b8e339c536989b8978a438
Arg [20] : 000000000000000000000000122013fd7df1c6f636a5bb8f03108e876548b455
Arg [21] : 000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a
Arg [22] : 000000000000000000000000ef4229c8c3250c675f21bcefa42f58efbff6002a
Deployed Bytecode Sourcemap
45249:9298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53086:254;;;;;;;;;;;;;;;;-1:-1:-1;53086:254:0;;;;:::i;:::-;;51532:167;;;:::i;:::-;;;;;;;;;;;;;;;;45402:21;;;:::i;:::-;;;;-1:-1:-1;;;;;45402:21:0;;;;;;;;;;;;;;45456:19;;;:::i;45569:::-;;;:::i;41958:25::-;;;:::i;41989:24::-;;;:::i;44786:195::-;;;;;;;;;;;;;;;;-1:-1:-1;44786:195:0;;:::i;44508:39::-;;;:::i;47613:768::-;;;;;;;;;;;;;;;;-1:-1:-1;47613:768:0;;:::i;45594:21::-;;;:::i;53650:115::-;;;:::i;48570:72::-;;;:::i;53419:128::-;;;:::i;44604:43::-;;;:::i;48387:177::-;;;:::i;40315:84::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;45481:23;;;:::i;48648:123::-;;;;;;;;;;;;;;;;-1:-1:-1;48648:123:0;-1:-1:-1;;;;;48648:123:0;;:::i;43756:84::-;;;;;;;;;;;;;;;;-1:-1:-1;43756:84:0;-1:-1:-1;;;;;43756:84:0;;:::i;38728:145::-;;;:::i;51160:111::-;;;:::i;43053:90::-;;;;;;;;;;;;;;;;-1:-1:-1;43053:90:0;-1:-1:-1;;;;;43053:90:0;;:::i;44420:41::-;;;:::i;53553:91::-;;;:::i;45510:23::-;;;:::i;45654:28::-;;;:::i;44654:30::-;;;:::i;38096:85::-;;;:::i;42045:32::-;;;:::i;44691:25::-;;;:::i;52295:785::-;;;:::i;43969:132::-;;;;;;;;;;;;;;;;-1:-1:-1;43969:132:0;-1:-1:-1;;;;;43969:132:0;;:::i;44987:150::-;;;;;;;;;;;;;;;;-1:-1:-1;44987:150:0;;:::i;41931:21::-;;;:::i;44467:35::-;;;:::i;45703:36::-;;;;;;;;;;;;;;;;-1:-1:-1;45703:36:0;;:::i;51335:116::-;;;:::i;43282:152::-;;;;;;;;;;;;;;;;-1:-1:-1;43282:152:0;-1:-1:-1;;;;;43282:152:0;;:::i;47347:260::-;;;:::i;44722:57::-;;;:::i;48777:83::-;;;:::i;43560:100::-;;;;;;;;;;;;;;;;-1:-1:-1;43560:100:0;-1:-1:-1;;;;;43560:100:0;;:::i;45784:33::-;;;;;;;;;;;;;;;;-1:-1:-1;45784:33:0;;:::i;44554:44::-;;;:::i;45745:33::-;;;;;;;;;;;;;;;;-1:-1:-1;45745:33:0;;:::i;52106:135::-;;;:::i;45622:26::-;;;:::i;45429:21::-;;;:::i;39022:240::-;;;;;;;;;;;;;;;;-1:-1:-1;39022:240:0;-1:-1:-1;;;;;39022:240:0;;:::i;51796:269::-;;;:::i;42019:20::-;;;:::i;53086:254::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;53170:16:::1;:36:::0;;-1:-1:-1;;53170:36:0::1;::::0;::::1;;;::::0;;;;::::1;53221:16;53217:117;;;53253:19;53270:1;53253:16;:19::i;:::-;53217:117;;;53303:20;53320:2;53303:16;:20::i;:::-;53086:254:::0;:::o;51532:167::-;51631:4;;51646:6;;51619:49;;;-1:-1:-1;;;51619:49:0;;;;;;;;;51662:4;51619:49;;;;;;51578:7;;;;-1:-1:-1;;;;;51631:4:0;;;;51619:26;;:49;;;;;;;;;;51631:4;51619:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51619:49:0;;-1:-1:-1;;51532:167:0;:::o;45402:21::-;;;-1:-1:-1;;;;;45402:21:0;;:::o;45456:19::-;;;-1:-1:-1;;;;;45456:19:0;;:::o;45569:::-;;;-1:-1:-1;;;;;45569:19:0;;:::o;41958:25::-;;;-1:-1:-1;;;;;41958:25:0;;:::o;41989:24::-;;;-1:-1:-1;;;;;41989:24:0;;:::o;44786:195::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;44544:3:::1;44857:4;:20;;44849:37;;;::::0;;-1:-1:-1;;;44849:37:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;44849:37:0;;;;;;;;;;;;;::::1;;44905:7;:14:::0;;;44940:24;:34:::1;44929:8;:45:::0;44786:195::o;44508:39::-;44544:3;44508:39;:::o;47613:768::-;47689:5;;-1:-1:-1;;;;;47689:5:0;47675:10;:19;47667:38;;;;;-1:-1:-1;;;47667:38:0;;;;;;;;;;;;-1:-1:-1;;;47667:38:0;;;;;;;;;;;;;;;47741:4;;47734:37;;;-1:-1:-1;;;47734:37:0;;47765:4;47734:37;;;;;;47716:15;;-1:-1:-1;;;;;47741:4:0;;47734:22;;:37;;;;;;;;;;;;;;47741:4;47734:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47734:37:0;;-1:-1:-1;47786:17:0;;;47782:180;;;47831:4;;47846:6;;-1:-1:-1;;;;;47831:4:0;;;;47819:26;;47854:20;:7;47866;47854:11;:20::i;:::-;47884:4;47819:71;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47819:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47921:4:0;;47914:37;;;-1:-1:-1;;;47914:37:0;;47945:4;47914:37;;;;;;-1:-1:-1;;;;;47921:4:0;;;;-1:-1:-1;47914:22:0;;-1:-1:-1;47914:37:0;;;;;;;;;;;;;;;47921:4;47914:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47914:37:0;;-1:-1:-1;47782:180:0;47986:7;47976;:17;47972:65;;;-1:-1:-1;48019:7:0;47972:65;48064:7;:5;:7::i;:::-;-1:-1:-1;;;;;48051:20:0;:9;-1:-1:-1;;;;;48051:20:0;;:32;;;;48075:8;:6;:8::i;:::-;48047:291;;;48125:5;;48106:4;;48099:41;;-1:-1:-1;;;;;48106:4:0;;;;48125:5;48132:7;48099:25;:41::i;:::-;48047:291;;;48171:27;48201:46;44642:5;48201:26;48213:13;;48201:7;:11;;:26;;;;:::i;:::-;:30;;:46::i;:::-;48287:5;;48171:76;;-1:-1:-1;48261:66:0;;-1:-1:-1;;;;;48287:5:0;48294:32;:7;48171:76;48294:11;:32::i;:::-;48268:4;;-1:-1:-1;;;;;48268:4:0;;48261:66;:25;:66::i;:::-;48047:291;;48353:21;48362:11;:9;:11::i;:::-;48353:21;;;;;;;;;;;;;;;47613:768;;:::o;45594:21::-;;;;:::o;53650:115::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;53700:10:::1;:8;:10::i;:::-;53721:17;:15;:17::i;:::-;53749:9;:7;:9::i;:::-;53650:115::o:0;48570:72::-;48616:19;48625:9;48616:8;:19::i;53419:128::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;53465:7:::1;:5;:7::i;:::-;53494:4;::::0;53518:6:::1;::::0;53482:58:::1;::::0;;-1:-1:-1;;;53482:58:0;;::::1;::::0;::::1;::::0;;;;53534:4:::1;53482:58:::0;;;;;-1:-1:-1;;;;;53494:4:0;;::::1;::::0;53482:35:::1;::::0;:58;;;;;53494:4:::1;::::0;53482:58;;;;;;;;53494:4;;53482:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53419:128::o:0;44604:43::-;44642:5;44604:43;:::o;48387:177::-;48444:16;;;;48440:118;;;48498:5;;-1:-1:-1;;;;;48498:5:0;48484:10;:19;48476:38;;;;;-1:-1:-1;;;48476:38:0;;;;;;;;;;;;-1:-1:-1;;;48476:38:0;;;;;;;;;;;;;;40315:84;40362:4;40385:7;-1:-1:-1;;;40385:7:0;;;;;40315:84::o;45481:23::-;;;-1:-1:-1;;;;;45481:23:0;;:::o;48648:123::-;48738:26;48747:16;48738:8;:26::i;43756:84::-;38319:12;:10;:12::i;:::-;-1:-1:-1;;;;;38308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38308:23:0;;38300:68;;;;;-1:-1:-1;;;38300:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38300:68:0;;;;;;;;;;;;;;;43819:5:::1;:14:::0;;-1:-1:-1;;;;;;43819:14:0::1;-1:-1:-1::0;;;;;43819:14:0;;;::::1;::::0;;;::::1;::::0;;43756:84::o;38728:145::-;38319:12;:10;:12::i;:::-;-1:-1:-1;;;;;38308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38308:23:0;;38300:68;;;;;-1:-1:-1;;;38300:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38300:68:0;;;;;;;;;;;;;;;38834:1:::1;38818:6:::0;;38797:40:::1;::::0;-1:-1:-1;;;;;38818:6:0;;::::1;::::0;38797:40:::1;::::0;38834:1;;38797:40:::1;38864:1;38847:19:::0;;-1:-1:-1;;;;;;38847:19:0::1;::::0;;38728:145::o;51160:111::-;51202:7;51228:36;51248:15;:13;:15::i;:::-;51228;:13;:15::i;:::-;:19;;:36::i;:::-;51221:43;;51160:111;:::o;43053:90::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;43120:6:::1;:16:::0;;-1:-1:-1;;;;;;43120:16:0::1;-1:-1:-1::0;;;;;43120:16:0;;;::::1;::::0;;;::::1;::::0;;43053:90::o;44420:41::-;44458:3;44420:41;:::o;53553:91::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;53599:8:::1;:6;:8::i;:::-;53618:19;:17;:19::i;45510:23::-:0;;;-1:-1:-1;;;;;45510:23:0;;:::o;45654:28::-;;;;;;:::o;44654:30::-;;;;:::o;38096:85::-;38142:7;38168:6;-1:-1:-1;;;;;38168:6:0;38096:85;:::o;42045:32::-;;;-1:-1:-1;;;;;42045:32:0;;:::o;44691:25::-;;;;:::o;52295:785::-;52338:7;52357:21;52388:16;52419:4;;;;;;;;;-1:-1:-1;;;;;52419:4:0;-1:-1:-1;;;;;52407:26:0;;52434:6;;52407:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52407:34:0;;-1:-1:-1;;;;;;52455:22:0;;;52451:124;;52542:6;;52509:55;;;-1:-1:-1;;;52509:55:0;;;;;;;;;52558:4;52509:55;;;;;-1:-1:-1;;;;;52509:32:0;;;;;:55;;;;;;;;;;;;;;:32;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52509:55:0;;-1:-1:-1;52451:124:0;52586:17;52606:18;:16;:18::i;:::-;52586:38;-1:-1:-1;52634:17:0;52665:13;;52661:284;;52716:9;;52698:74;;;-1:-1:-1;;;52698:74:0;;;;;;;;;;;;;;52752:19;52698:74;;;;;;;;-1:-1:-1;;;;;52716:9:0;;;;52698:42;;52741:9;;52752:19;;52698:74;;;;;;;;52752:19;;52698:74;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52698:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52698:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52698:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52698:74:0;;;;;;;;;;;;-1:-1:-1;52698:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52694:241;;;;;52869:9;52897:1;52879:9;:16;:19;52869:30;;;;;;;;;;;;;;52857:42;;52789:125;52694:241;52954:17;52974:28;:9;52988:13;52974;:28::i;:::-;52954:48;;53020:53;44498:4;53020:40;53052:7;;53020:27;53042:4;53020:17;53034:2;53020:9;:13;;:17;;;;:::i;:27::-;:31;;:40::i;:53::-;53013:60;;;;;;;52295:785;:::o;43969:132::-;38319:12;:10;:12::i;:::-;-1:-1:-1;;;;;38308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38308:23:0;;38300:68;;;;;-1:-1:-1;;;38300:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38300:68:0;;;;;;;;;;;;;;;44056:17:::1;:38:::0;;-1:-1:-1;;;;;;44056:38:0::1;-1:-1:-1::0;;;;;44056:38:0;;;::::1;::::0;;;::::1;::::0;;43969:132::o;44987:150::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;;44596:2:::1;45064:4;:26;;45056:43;;;::::0;;-1:-1:-1;;;45056:43:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;45056:43:0;;;;;;;;;;;;;::::1;;45110:13;:20:::0;44987:150::o;41931:21::-;;;-1:-1:-1;;;;;41931:21:0;;:::o;44467:35::-;44498:4;44467:35;:::o;45703:36::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45703:36:0;;-1:-1:-1;45703:36:0;:::o;51335:116::-;51414:4;;51407:37;;;-1:-1:-1;;;51407:37:0;;51438:4;51407:37;;;;;;51381:7;;-1:-1:-1;;;;;51414:4:0;;51407:22;;:37;;;;;;;;;;;;;;51414:4;51407:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51407:37:0;;-1:-1:-1;51335:116:0;:::o;43282:152::-;43367:10;;-1:-1:-1;;;;;43367:10:0;43353;:24;43345:48;;;;;-1:-1:-1;;;43345:48:0;;;;;;;;;;;;-1:-1:-1;;;43345:48:0;;;;;;;;;;;;;;;43403:10;:24;;-1:-1:-1;;;;;;43403:24:0;-1:-1:-1;;;;;43403:24:0;;;;;;;;;;43282:152::o;47347:260::-;40629:8;:6;:8::i;:::-;40628:9;40620:38;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;;;;47422:4:::1;::::0;47415:37:::1;::::0;;-1:-1:-1;;;47415:37:0;;47446:4:::1;47415:37;::::0;::::1;::::0;;;47397:15:::1;::::0;-1:-1:-1;;;;;47422:4:0::1;::::0;47415:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;47422:4;47415:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47415:37:0;;-1:-1:-1;47467:11:0;;47463:138:::1;;47506:4;::::0;47520:6:::1;::::0;47494:57:::1;::::0;;-1:-1:-1;;;47494:57:0;;::::1;::::0;::::1;::::0;;;;;;;;;;47545:4:::1;47494:57:::0;;;;;-1:-1:-1;;;;;47506:4:0;;::::1;::::0;47494:25:::1;::::0;:57;;;;;47506:4:::1;::::0;47494:57;;;;;;;;47506:4;;47494:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47570:20;47578:11;:9;:11::i;:::-;47570:20;::::0;;;;;;;;;;::::1;::::0;;::::1;40668:1;47347:260::o:0;44722:57::-;;;;:::o;48777:83::-;42878:7;:5;:7::i;:::-;-1:-1:-1;;;;;42864:21:0;:10;-1:-1:-1;;;;;42864:21:0;;:45;;;-1:-1:-1;42903:6:0;;-1:-1:-1;;;;;42903:6:0;42889:10;:20;42864:45;42856:66;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;-1:-1:-1;;;42856:66:0;;;;;;;;;;;;;;43560:100;38319:12;:10;:12::i;:::-;-1:-1:-1;;;;;38308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38308:23:0;;38300:68;;;;;-1:-1:-1;;;38300:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38300:68:0;;;;;;;;;;;;;;;43631:9:::1;:22:::0;;-1:-1:-1;;;;;;43631:22:0::1;-1:-1:-1::0;;;;;43631:22:0;;;::::1;::::0;;;::::1;::::0;;43560:100::o;45784:33::-;;;;;;;;;;44554:44;44596:2;44554:44;:::o;45745:33::-;;;;;;;;;;52106:135;52193:4;;52212:6;;52181:53;;;-1:-1:-1;;;52181:53:0;;;;;;;;;52228:4;52181:53;;;;;52155:7;;-1:-1:-1;;;;;52193:4:0;;52181:30;;:53;;;;;;;;;;;;;;52193:4;52181:53;;;;;;;;;;45622:26;;;;:::o;45429:21::-;;;-1:-1:-1;;;;;45429:21:0;;:::o;39022:240::-;38319:12;:10;:12::i;:::-;-1:-1:-1;;;;;38308:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;38308:23:0;;38300:68;;;;;-1:-1:-1;;;38300:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;38300:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39110:22:0;::::1;39102:73;;;;-1:-1:-1::0;;;39102:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39211:6;::::0;;39190:38:::1;::::0;-1:-1:-1;;;;;39190:38:0;;::::1;::::0;39211:6;::::1;::::0;39190:38:::1;::::0;::::1;39238:6;:17:::0;;-1:-1:-1;;;;;;39238:17:0::1;-1:-1:-1::0;;;;;39238:17:0;;;::::1;::::0;;;::::1;::::0;;39022:240::o;51796:269::-;51860:5;;-1:-1:-1;;;;;51860:5:0;51846:10;:19;51838:38;;;;;-1:-1:-1;;;51838:38:0;;;;;;;;;;;;-1:-1:-1;;;51838:38:0;;;;;;;;;;;;;;;51899:4;;51923:6;;51887:58;;;-1:-1:-1;;;51887:58:0;;;;;;;;;51939:4;51887:58;;;;;-1:-1:-1;;;;;51899:4:0;;;;51887:35;;:58;;;;;51899:4;;51887:58;;;;;;;;51899:4;;51887:58;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51981:4:0;;51974:37;;;-1:-1:-1;;;51974:37:0;;52005:4;51974:37;;;;;;51956:15;;-1:-1:-1;;;;;;51981:4:0;;;;-1:-1:-1;51974:22:0;;:37;;;;;;;;;;;;;;51981:4;51974:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51974:37:0;52028:4;;52043:5;;;52021:37;;;-1:-1:-1;;;52021:37:0;;-1:-1:-1;;;;;52043:5:0;;;52021:37;;;;;;;;;;;;;;51974;;-1:-1:-1;52028:4:0;;;;52021:21;;:37;;;;;51974;;52021;;;;;;;;52028:4;;52021:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51796:269:0:o;42019:20::-;;;-1:-1:-1;;;;;42019:20:0;;:::o;30829:613::-;31194:10;;;31193:62;;-1:-1:-1;31210:39:0;;;-1:-1:-1;;;31210:39:0;;31234:4;31210:39;;;;-1:-1:-1;;;;;31210:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31210:39:0;:44;31193:62;31185:150;;;;-1:-1:-1;;;31185:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31372:62;;;-1:-1:-1;;;;;31372:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31372:62:0;-1:-1:-1;;;31372:62:0;;;31345:90;;31365:5;;31345:19;:90::i;25303:193::-;25406:12;25437:52;25459:6;25467:4;25473:1;25476:12;25437:21;:52::i;:::-;25430:59;;25303:193;;;;;;:::o;6880:155::-;6938:7;6970:1;6965;:6;;6957:49;;;;;-1:-1:-1;;;6957:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7023:5:0;;;6880:155;;;;;:::o;30185:175::-;30294:58;;;-1:-1:-1;;;;;30294:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30294:58:0;-1:-1:-1;;;30294:58:0;;;30267:86;;30287:5;;30267:19;:86::i;7282:215::-;7340:7;7363:6;7359:20;;-1:-1:-1;7378:1:0;7371:8;;7359:20;7401:5;;;7405:1;7401;:5;:1;7424:5;;;;;:10;7416:56;;;;-1:-1:-1;;;7416:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7961:150;8019:7;8050:1;8046;:5;8038:44;;;;;-1:-1:-1;;;8038:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8103:1;8099;:5;;;;;;;7961:150;-1:-1:-1;;;7961:150:0:o;41327:117::-;40894:8;:6;:8::i;:::-;40886:41;;;;;-1:-1:-1;;;40886:41:0;;;;;;;;;;;;-1:-1:-1;;;40886:41:0;;;;;;;;;;;;;;;41395:5:::1;41385:15:::0;;-1:-1:-1;;;;41385:15:0::1;::::0;;41415:22:::1;41424:12;:10;:12::i;:::-;41415:22;::::0;;-1:-1:-1;;;;;41415:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;41327:117::o:0;53771:476::-;53842:4;;53824;;53817:49;;-1:-1:-1;;;;;53824:4:0;;;;53842;-1:-1:-1;;53817:24:0;:49::i;:::-;53903:9;;53883:6;;53876:56;;-1:-1:-1;;;;;53883:6:0;;;;53903:9;-1:-1:-1;;53876:26:0;:56::i;:::-;53969:9;;53949:6;;53942:56;;-1:-1:-1;;;;;53949:6:0;;;;53969:9;-1:-1:-1;;53942:26:0;:56::i;:::-;54038:9;;54016:8;;54009:42;;-1:-1:-1;;;;;54016:8:0;;;;54038:9;;54009:28;:42::i;:::-;54090:9;;54068:8;;54061:58;;-1:-1:-1;;;;;54068:8:0;;;;54090:9;-1:-1:-1;;54061:28:0;:58::i;:::-;54159:9;;54137:8;;54130:42;;-1:-1:-1;;;;;54137:8:0;;;;54159:9;;54130:28;:42::i;:::-;54211:9;;54189:8;;54182:58;;-1:-1:-1;;;;;54189:8:0;;;;54211:9;-1:-1:-1;;54182:28:0;:58::i;48920:586::-;40629:8;:6;:8::i;:::-;40628:9;40620:38;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;;;;49009:4:::1;::::0;49023:6:::1;::::0;48997:48:::1;::::0;;-1:-1:-1;;;48997:48:0;;::::1;::::0;::::1;::::0;;;;49039:4:::1;48997:48:::0;;;;;-1:-1:-1;;;;;49009:4:0;;::::1;::::0;48997:25:::1;::::0;:48;;;;;49009:4:::1;::::0;48997:48;;;;;;;;49009:4;;48997:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49082:6:0::1;::::0;49075:39:::1;::::0;;-1:-1:-1;;;49075:39:0;;49108:4:::1;49075:39;::::0;::::1;::::0;;;49055:17:::1;::::0;-1:-1:-1;;;;;;49082:6:0;;::::1;::::0;-1:-1:-1;49075:24:0::1;::::0;:39;;;;;::::1;::::0;;;;;;;;49082:6;49075:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;49075:39:0;49151:6:::1;::::0;49144:39:::1;::::0;;-1:-1:-1;;;49144:39:0;;49177:4:::1;49144:39;::::0;::::1;::::0;;;49075;;-1:-1:-1;49124:17:0::1;::::0;-1:-1:-1;;;;;49151:6:0;;::::1;::::0;49144:24:::1;::::0;:39;;;;;49075::::1;::::0;49144;;;;;;;;49151:6;49144:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;49144:39:0;;-1:-1:-1;49197:13:0;;;;:30:::1;;;49226:1;49214:9;:13;49197:30;49193:307;;;49243:28;49254:16;49243:10;:28::i;:::-;49285:14;:12;:14::i;:::-;49313:21;49337:15;:13;:15::i;:::-;49313:39;;49366:9;:7;:9::i;:::-;49403:15;49389:11;:29:::0;49450:10:::1;49437:52;49462:13:::0;49477:11:::1;:9;:11::i;:::-;49437:52;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;49193:307;40668:1;;48920:586:::0;:::o;650:104::-;737:10;650:104;:::o;6434:175::-;6492:7;6523:5;;;6546:6;;;;6538:46;;;;;-1:-1:-1;;;6538:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;41080:115;40629:8;:6;:8::i;:::-;40628:9;40620:38;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;-1:-1:-1;;;40620:38:0;;;;;;;;;;;;;;;41139:7:::1;:14:::0;;-1:-1:-1;;;;41139:14:0::1;-1:-1:-1::0;;;41139:14:0::1;::::0;;41168:20:::1;41175:12;:10;:12::i;54253:292::-:0;54326:4;;54308;;54301:33;;-1:-1:-1;;;;;54308:4:0;;;;54326;;54301:24;:33::i;:::-;54371:9;;54351:6;;54344:40;;-1:-1:-1;;;;;54351:6:0;;;;54371:9;;54344:26;:40::i;:::-;54421:9;;54401:6;;54394:40;;-1:-1:-1;;;;;54401:6:0;;;;54421:9;;54394:26;:40::i;:::-;54473:9;;54451:8;;54444:42;;-1:-1:-1;;;;;54451:8:0;;;;54473:9;;54444:28;:42::i;:::-;54525:9;;54503:8;;54496:42;;-1:-1:-1;;;;;54503:8:0;;;;54525:9;;54496:28;:42::i;32448:751::-;32867:23;32893:69;32921:4;32893:69;;;;;;;;;;;;;;;;;32901:5;-1:-1:-1;;;;;32893:27:0;;;:69;;;;;:::i;:::-;32976:17;;32867:95;;-1:-1:-1;32976:21:0;32972:221;;33116:10;33105:30;;;;;;;;;;;;;;;-1:-1:-1;33105:30:0;33097:85;;;;-1:-1:-1;;;33097:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26330:523;26457:12;26514:5;26489:21;:30;;26481:81;;;;-1:-1:-1;;;26481:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26580:18;26591:6;26580:10;:18::i;:::-;26572:60;;;;;-1:-1:-1;;;26572:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26703:12;26717:23;26744:6;-1:-1:-1;;;;;26744:11:0;26764:5;26772:4;26744:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26744:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26702:75;;;;26794:52;26812:7;26821:10;26833:12;26794:17;:52::i;:::-;26787:59;26330:523;-1:-1:-1;;;;;;;26330:523:0:o;49536:760::-;49627:6;;49620:39;;;-1:-1:-1;;;49620:39:0;;49653:4;49620:39;;;;;;49601:16;;-1:-1:-1;;;;;49627:6:0;;49620:24;;:39;;;;;;;;;;;;;;49627:6;49620:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49620:39:0;49687:9;;49669:119;;-1:-1:-1;;;49669:119:0;;;;;;;;49687:9;49669:119;;;;;;49765:4;49669:119;;;;;;49772:15;49669:119;;;;;;;;;;;;;49736:19;49669:119;;;;;;;;49620:39;;-1:-1:-1;;;;;;49687:9:0;;;;49669:53;;49620:39;;49687:9;;49736:19;;49669:119;;;;;;;;49736:19;;49669:119;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49669:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49669:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;49669:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;49669:119:0;;;;;;;;;;;;-1:-1:-1;49669:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;49669:119:0;;;;;;;;49823:6;;-1:-1:-1;;;49816:39:0;;49849:4;49816:39;;;;;;49799:14;;-1:-1:-1;49816:57:0;;-1:-1:-1;49868:4:0;;-1:-1:-1;49816:47:0;;-1:-1:-1;49860:2:0;;-1:-1:-1;;;;;;49823:6:0;;;;49816:24;;:39;;;;;;;;;;;;;;49823:6;49816:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49816:39:0;;:43;:47::i;:57::-;49799:74;;49884:21;49908:32;44498:4;49908:19;49919:7;;49908:6;:10;;:19;;;;:::i;:32::-;49957:6;;49884:56;;-1:-1:-1;49950:60:0;;-1:-1:-1;;;;;49957:6:0;49978:16;49884:56;49950:27;:60::i;:::-;50021:22;50046:33;44498:4;50046:20;50057:8;;50046:6;:10;;:20;;;;:::i;:33::-;50117:17;;50096:6;;50021:58;;-1:-1:-1;50089:62:0;;-1:-1:-1;;;;;50096:6:0;;;;50117:17;50021:58;50089:27;:62::i;:::-;50162:21;50186:39;44498:4;50186:26;:6;44458:3;50186:10;:26::i;:39::-;50263:10;;50242:6;;50162:63;;-1:-1:-1;50235:54:0;;-1:-1:-1;;;;;50242:6:0;;;;50263:10;50162:63;50235:27;:54::i;:::-;49536:760;;;;;;:::o;50356:733::-;50427:6;;50420:39;;;-1:-1:-1;;;50420:39:0;;50453:4;50420:39;;;;;;50399:18;;50420:46;;50464:1;;-1:-1:-1;;;;;50427:6:0;;;;50420:24;;:39;;;;;;;;;;;;;;;50427:6;50420:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50420:39:0;;:43;:46::i;:::-;50493:6;;50481:8;;50399:67;;-1:-1:-1;;;;;;50481:8:0;;;50493:6;;50481:18;50477:167;;50533:9;;50515:118;;-1:-1:-1;;;50515:118:0;;;;;;;;50533:9;50515:118;;;;;;50610:4;50515:118;;;;;;50617:15;50515:118;;;;;;;;;;;;;50584:16;50515:118;;;;;;;;-1:-1:-1;;;;;50533:9:0;;;;50515:53;;50569:10;;50584:16;;50610:4;50617:15;50515:118;;;;;;50584:16;;50515:118;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50515:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50515:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50515:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50515:118:0;;;;;;;;;;;;-1:-1:-1;50515:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50477:167;50670:6;;50658:8;;-1:-1:-1;;;;;50658:8:0;;;50670:6;;50658:18;50654:167;;50710:9;;50692:118;;-1:-1:-1;;;50692:118:0;;;;;;;;50710:9;50692:118;;;;;;50787:4;50692:118;;;;;;50794:15;50692:118;;;;;;;;;;;;;50761:16;50692:118;;;;;;;;-1:-1:-1;;;;;50710:9:0;;;;50692:53;;50746:10;;50761:16;;50787:4;50794:15;50692:118;;;;;;50761:16;;50692:118;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50692:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50692:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50692:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50692:118:0;;;;;;;;;;;;-1:-1:-1;50692:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50654:167;50855:8;;50848:41;;;-1:-1:-1;;;50848:41:0;;50883:4;50848:41;;;;;;50831:14;;-1:-1:-1;;;;;50855:8:0;;50848:26;;:41;;;;;;;;;;;;;;50855:8;50848:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50848:41:0;50923:8;;50916:41;;;-1:-1:-1;;;50916:41:0;;50951:4;50916:41;;;;;;50848;;-1:-1:-1;50899:14:0;;-1:-1:-1;;;;;50923:8:0;;;;50916:26;;:41;;;;;50848;;50916;;;;;;;;50923:8;50916:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50916:41:0;50985:9;;51009:8;;51019;;50967:115;;;-1:-1:-1;;;50967:115:0;;-1:-1:-1;;;;;51009:8:0;;;50967:115;;;;51019:8;;;50967:115;;;;;;;;;;;;;;;;50985:9;50967:115;;;;;;;;;;51059:4;50967:115;;;;51066:15;50967:115;;;;;50916:41;;-1:-1:-1;50985:9:0;;;50967:41;;:115;;;;;;;;;;;;;;;50985:9;;50967:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50356:733:0:o;22448:413::-;22808:20;22846:8;;;22448:413::o;28813:725::-;28928:12;28956:7;28952:580;;;-1:-1:-1;28986:10:0;28979:17;;28952:580;29097:17;;:21;29093:429;;29355:10;29349:17;29415:15;29402:10;29398:2;29394:19;29387:44;29304:145;29494:12;29487:20;;-1:-1:-1;;;29487:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://dbb52b785e7c1640ccac31a536f5b5e3d596d66042213b93e21e4516a8bc7c2e
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.