Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x315dd54fe22cb676d0450d786a513295f518fd60a94ceb2686f67186194b14b3 | 33021376 | 161 days 8 hrs ago | Dark Spartans: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
StrategydKnightswapswapLP
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2022-03-10 */ /** *Submitted for verification at BscScan.com on 2022-03-05 */ /** *Submitted for verification at BscScan.com on 2021-05-21 */ // 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/IUniswapRouter.sol pragma solidity ^0.6.0; interface IUniswapRouter { function factory() external pure returns (address); function WBNB() external pure returns (address); 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 addLiquidityBNB( address token, uint amountTokenDesired, uint amountTokenMin, uint amountBNBMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountBNB, 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 removeLiquidityBNB( address token, uint liquidity, uint amountTokenMin, uint amountBNBMin, address to, uint deadline ) external returns (uint amountToken, uint amountBNB); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityBNBWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountBNBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountBNB); function removeLiquidityBNBSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountBNBMin, address to, uint deadline ) external returns (uint amountBNB); function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountBNBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountBNB); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactBNBForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForBNBSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactBNB(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForBNB(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, 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); } // File: contracts/BIFI/interfaces/pancake/IMasterChef.sol pragma solidity ^0.6.0; interface IMasterChef { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function enterStaking(uint256 _amount) external; function leaveStaking(uint256 _amount) external; function pendingCake(uint256 _pid, address _user) external view returns (uint256); function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function emergencyWithdraw(uint256 _pid) external; } // File: contracts/BIFI/utils/IGasPrice.sol pragma solidity ^0.6.12; interface IGasPrice { function maxGasPrice() external returns (uint); } // File: contracts/BIFI/utils/GasThrottler.sol pragma solidity ^0.6.12; contract GasThrottler { address public gasprice = address(0x16cD932c494Ac1B3452d6C8453fB7665aB49EC6b); modifier gasThrottle() { require(tx.gasprice <= IGasPrice(gasprice).maxGasPrice(), "gas is too high!"); _; } } // 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"); _; } // verifies that the caller is not a contract. modifier onlyEOA() { require(msg.sender == tx.origin, "!EOA"); _; } /** * @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) external onlyManager { require(_fee <= MAX_CALL_FEE, "!cap"); callFee = _fee; beefyFee = MAX_FEE - STRATEGIST_FEE - callFee; } function setWithdrawalFee(uint256 _fee) external onlyManager { require(_fee <= WITHDRAWAL_FEE_CAP, "!cap"); withdrawalFee = _fee; } } // File: contracts/BIFI/strategies/degens/StrategyJetswapLP.sol pragma solidity ^0.6.0; contract StrategydKnightswapswapLP is StratManager, FeeManager { using SafeERC20 for IERC20; using SafeMath for uint256; // Tokens used address constant public wftm = address(0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83); address constant public usd = address(0x04068DA6C83AFCFA0e13ba15A6696662335D5B75); address constant public output = address(0x6cc0E0AedbbD3C35283e38668D959F6eb3034856); address public want; address public lpToken0; address public lpToken1; // Third party contracts address constant public masterchef = address(0xb02e3A4B5ebC315137753e24b6Eb6aEF7D602E40); uint256 public poolId; // Routes address[] public outputToWftmRoute = [output, wftm]; address[] public outputToLp0Route; address[] public outputToLp1Route; /** * @dev Event that is fired each time someone harvests the strat. */ event StratHarvest(address indexed harvester); constructor( address _want, uint256 _poolId, address _vault, address _unirouter, address _keeper, address _strategist, address _beefyFeeRecipient ) StratManager(_keeper, _strategist, _unirouter, _vault, _beefyFeeRecipient) public { want = _want; lpToken0 = IUniswapV2Pair(want).token0(); lpToken1 = IUniswapV2Pair(want).token1(); poolId = _poolId; if (lpToken0 == wftm) { outputToLp0Route = [output, wftm]; } else if (lpToken0 == usd) { outputToLp0Route = [output, usd]; } else if (lpToken0 != output) { outputToLp0Route = [output, wftm, lpToken0]; } if (lpToken1 == wftm) { outputToLp1Route = [output, wftm]; } else if (lpToken1 == usd) { outputToLp1Route = [output, usd]; } else if (lpToken1 != output) { outputToLp1Route = [output, wftm, lpToken1]; } _giveAllowances(); } // puts the funds to work function deposit() public whenNotPaused { uint256 wantBal = IERC20(want).balanceOf(address(this)); if (wantBal > 0) { IMasterChef(masterchef).deposit(poolId, wantBal); } } function withdraw(uint256 _amount) external { require(msg.sender == vault, "!vault"); uint256 wantBal = IERC20(want).balanceOf(address(this)); if (wantBal < _amount) { IMasterChef(masterchef).withdraw(poolId, _amount.sub(wantBal)); 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)); } } // compounds earnings and charges performance fee function harvest() external whenNotPaused onlyEOA { IMasterChef(masterchef).deposit(poolId, 0); chargeFees(); addLiquidity(); deposit(); emit StratHarvest(msg.sender); } // performance fees function chargeFees() internal { uint256 toWbnb = IERC20(output).balanceOf(address(this)).mul(45).div(1000); IUniswapRouter(unirouter).swapExactTokensForTokens(toWbnb, 0, outputToWftmRoute, address(this), now); uint256 wbnbBal = IERC20(wftm).balanceOf(address(this)); uint256 callFeeAmount = wbnbBal.mul(callFee).div(MAX_FEE); IERC20(wftm).safeTransfer(msg.sender, callFeeAmount); uint256 beefyFeeAmount = wbnbBal.mul(beefyFee).div(MAX_FEE); IERC20(wftm).safeTransfer(beefyFeeRecipient, beefyFeeAmount); uint256 strategistFee = wbnbBal.mul(STRATEGIST_FEE).div(MAX_FEE); IERC20(wftm).safeTransfer(strategist, strategistFee); } // Adds liquidity to AMM and gets more LP tokens. function addLiquidity() internal { uint256 outputHalf = IERC20(output).balanceOf(address(this)).div(2); if (lpToken0 != output) { IUniswapRouter(unirouter).swapExactTokensForTokens(outputHalf, 0, outputToLp0Route, address(this), now); } if (lpToken1 != output) { IUniswapRouter(unirouter).swapExactTokensForTokens(outputHalf, 0, outputToLp1Route, address(this), now); } uint256 lp0Bal = IERC20(lpToken0).balanceOf(address(this)); uint256 lp1Bal = IERC20(lpToken1).balanceOf(address(this)); IUniswapRouter(unirouter).addLiquidity(lpToken0, lpToken1, lp0Bal, lp1Bal, 1, 1, address(this), now); } // 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, ) = IMasterChef(masterchef).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"); IMasterChef(masterchef).emergencyWithdraw(poolId); uint256 wantBal = IERC20(want).balanceOf(address(this)); IERC20(want).transfer(vault, wantBal); } // pauses deposits and withdraws all funds from third party systems. function panic() public onlyManager { pause(); IMasterChef(masterchef).emergencyWithdraw(poolId); } function pause() public onlyManager { _pause(); _removeAllowances(); } function unpause() external onlyManager { _unpause(); _giveAllowances(); deposit(); } function _giveAllowances() internal { IERC20(want).safeApprove(masterchef, uint256(-1)); IERC20(output).safeApprove(unirouter, uint256(-1)); IERC20(lpToken0).safeApprove(unirouter, 0); IERC20(lpToken0).safeApprove(unirouter, uint256(-1)); IERC20(lpToken1).safeApprove(unirouter, 0); IERC20(lpToken1).safeApprove(unirouter, uint256(-1)); } function _removeAllowances() internal { IERC20(want).safeApprove(masterchef, 0); IERC20(output).safeApprove(unirouter, 0); IERC20(lpToken0).safeApprove(unirouter, 0); IERC20(lpToken1).safeApprove(unirouter, 0); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_want","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"},{"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"}],"stateMutability":"nonpayable","type":"constructor"},{"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"}],"name":"StratHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"masterchef","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":"outputToLp0Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToLp1Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToWftmRoute","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":[{"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":"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":"usd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"wftm","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
6080604052600a600655606f60075560075460706103e803036008556040518060400160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600d906002620000c292919062001589565b50348015620000d057600080fd5b5060405162005e2e38038062005e2e833981810160405260e0811015620000f657600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050828285878460006200015a62000cc360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060146101000a81548160ff02191690831515021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505086600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d60208110156200043257600080fd5b8101908080519060200190929190505050600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ec57600080fd5b505afa15801562000501573d6000803e3d6000fd5b505050506040513d60208110156200051857600080fd5b8101908080519060200190929190505050600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600c819055507321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000689576040518060400160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600e9060026200068292919062001589565b506200090b565b7304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620007a2576040518060400160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600e9060026200079b92919062001589565b506200090a565b736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000909576040518060600160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600e9060036200090792919062001618565b505b5b5b7321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000a24576040518060400160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600f90600262000a1d92919062001589565b5062000ca6565b7304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000b3d576040518060400160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600f90600262000b3692919062001589565b5062000ca5565b736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000ca4576040518060600160405280736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600f90600362000ca292919062001618565b505b5b5b62000cb662000ccb60201b60201c565b50505050505050620016e4565b600033905090565b62000d5373b02e3a4b5ebc315137753e24b6eb6aef7d602e407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b62000ddb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b62000e52600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b62000ee8600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b62000f5f600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b62000ff5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000ff760201b62002951179092919060201c565b565b6000811480620010c9575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156200108a57600080fd5b505afa1580156200109f573d6000803e3d6000fd5b505050506040513d6020811015620010b657600080fd5b8101908080519060200190929190505050145b62001120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018062005df86036913960400191505060405180910390fd5b620011c58363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050620011ca60201b60201c565b505050565b606062001233826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620012c460201b62002b16179092919060201c565b9050600081511115620012bf578080602001905160208110156200125657600080fd5b8101908080519060200190929190505050620012be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062005dce602a913960400191505060405180910390fd5b5b505050565b6060620012db8484600085620012e460201b60201c565b90509392505050565b60608247101562001341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062005da86026913960400191505060405180910390fd5b6200135285620014a460201b60201c565b620013c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310620014175780518252602082019150602081019050602083039250620013f2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146200147b576040519150601f19603f3d011682016040523d82523d6000602084013e62001480565b606091505b509150915062001498828286620014b760201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b60608315620014c95782905062001582565b600083511115620014dd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200154657808201518184015260208101905062001529565b50505050905090810190601f168015620015745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b82805482825590600052602060002090810192821562001605579160200282015b82811115620016045782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620015aa565b5b509050620016149190620016a7565b5090565b82805482825590600052602060002090810192821562001694579160200282015b82811115620016935782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062001639565b5b509050620016a39190620016a7565b5090565b5b80821115620016e057600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101620016a8565b5090565b6146b480620016f46000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638bc7e8c41161015c578063d3102589116100ce578063f2fde38b11610087578063f2fde38b146108f3578063f4f45b4614610937578063fb1db2781461096b578063fb6177871461099f578063fbfa77cf146109a9578063fd63a887146109dd5761028a565b8063d3102589146107b3578063d63a6ccd146107d1578063d6c6647814610805578063d92f3d731461085d578063dfbdc437146108a1578063f20eaeb8146108bf5761028a565b8063ac1e502511610120578063ac1e5025146106c7578063aced1661146106f5578063bc063e1a14610729578063c1a3d44c14610747578063c7b9d53014610765578063d0e30db0146107a95761028a565b80638bc7e8c4146105df5780638da5cb5b146105fd5780638e1454591461063157806390321e1a14610665578063a68833e5146106835761028a565b80634700d30511610200578063715018a6116101b9578063715018a614610517578063722713f714610521578063748747e61461053f5780637d38ca65146105835780638456cb59146105a1578063877562b6146105ab5761028a565b80634700d3051461044d57806354518b1a14610457578063573fef0a146104755780635c975abb1461047f5780635ee167c01461049f5780636817031b146104d35761028a565b80632ad5a53f116102525780632ad5a53f146103775780632e1a7d4d1461039557806336c6cf21146103c35780633e0dc34e1461041b5780633f4ba83a146104395780634641257d146104435761028a565b8063115880861461028f5780631f1fcd51146102ad5780631fe4a686146102e1578063257ae0de146103155780632646582614610349575b600080fd5b610297610a35565b6040518082815260200191505060405180910390f35b6102b5610b0b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e9610b31565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031d610b57565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103756004803603602081101561035f57600080fd5b8101908080359060200190929190505050610b7d565b005b61037f610d0e565b6040518082815260200191505060405180910390f35b6103c1600480360360208110156103ab57600080fd5b8101908080359060200190929190505050610d13565b005b6103ef600480360360208110156103d957600080fd5b8101908080359060200190929190505050611186565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104236111c2565b6040518082815260200191505060405180910390f35b6104416111c8565b005b61044b6112e2565b005b6104556114e5565b005b61045f611670565b6040518082815260200191505060405180910390f35b61047d611676565b005b610487611678565b60405180821515815260200191505060405180910390f35b6104a761168e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610515600480360360208110156104e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b4565b005b61051f6117a7565b005b610529611914565b6040518082815260200191505060405180910390f35b6105816004803603602081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061193c565b005b61058b611a80565b6040518082815260200191505060405180910390f35b6105a9611a85565b005b6105b3611b97565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e7611bbd565b6040518082815260200191505060405180910390f35b610605611bc3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610639611bec565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61066d611c12565b6040518082815260200191505060405180910390f35b6106c56004803603602081101561069957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c18565b005b6106f3600480360360208110156106dd57600080fd5b8101908080359060200190929190505050611d0b565b005b6106fd611e8c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610731611eb2565b6040518082815260200191505060405180910390f35b61074f611eb8565b6040518082815260200191505060405180910390f35b6107a76004803603602081101561077b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f83565b005b6107b161208a565b005b6107bb612263565b6040518082815260200191505060405180910390f35b6107d9612269565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108316004803603602081101561081b57600080fd5b8101908080359060200190929190505050612281565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61089f6004803603602081101561087357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122bd565b005b6108a96123b0565b6040518082815260200191505060405180910390f35b6108c76123b5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109356004803603602081101561090957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123cd565b005b61093f6125bf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109736125d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109a76125ef565b005b6109b16128ef565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a09600480360360208110156109f357600080fd5b8101908080359060200190929190505050612915565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008073b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff166393f1a40b600c54306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b505050506040513d6040811015610ae657600080fd5b8101908080519060200190929190805190602001909291905050505090508091505090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b85611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c0b5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b606f811115610cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f216361700000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555060075460706103e8030360088190555050565b606f81565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f217661756c74000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6157600080fd5b505afa158015610e75573d6000803e3d6000fd5b505050506040513d6020811015610e8b57600080fd5b81019080805190602001909291905050509050818110156110085773b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff1663441a3e70600c54610eec8486612b2e90919063ffffffff16565b6040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fca57600080fd5b505afa158015610fde573d6000803e3d6000fd5b505050506040513d6020811015610ff457600080fd5b810190808051906020019092919050505090505b81811115611014578190505b61101c611bc3565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614806110595750611058611678565b5b156110d2576110cd600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612bb19092919063ffffffff16565b611182565b60006110fd6127106110ef60065485612c5390919063ffffffff16565b612cd990919063ffffffff16565b9050611180600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111388385612b2e90919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612bb19092919063ffffffff16565b505b5050565b600e818154811061119357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6111d0611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112565750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112d0612d62565b6112d8612e4c565b6112e061208a565b565b6112ea611678565b1561135d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f21454f410000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b73b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600c5460006040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561147057600080fd5b505af1158015611484573d6000803e3d6000fd5b5050505061149061314e565b61149861366e565b6114a061208a565b3373ffffffffffffffffffffffffffffffffffffffff167f577a37fdb49a88d66684922c6f913df5239b4f214b2b97c53ef8e3bbb2034cb560405160405180910390a2565b6114ed611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115735750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6115ed611a85565b73b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff16635312ea8e600c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561165657600080fd5b505af115801561166a573d6000803e3d6000fd5b50505050565b61271081565b565b60008060149054906101000a900460ff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116bc613f18565b73ffffffffffffffffffffffffffffffffffffffff166116da611bc3565b73ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117af613f18565b73ffffffffffffffffffffffffffffffffffffffff166117cd611bc3565b73ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611937611921610a35565b611929611eb8565b613f2090919063ffffffff16565b905090565b611944611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119ca5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b607081565b611a8d611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611b135750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611b85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611b8d613fa8565b611b95614094565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b611c20613f18565b73ffffffffffffffffffffffffffffffffffffffff16611c3e611bc3565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d13611bc3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d995750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216d616e6167657200000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6032811115611e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260048152602001807f216361700000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060068190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103e881565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d6020811015611f6d57600080fd5b8101908080519060200190929190505050905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f217374726174656769737400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612092611678565b15612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d60208110156121ba57600080fd5b8101908080519060200190929190505050905060008111156122605773b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600c54836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561224757600080fd5b505af115801561225b573d6000803e3d6000fd5b505050505b50565b60085481565b7304068da6c83afcfa0e13ba15a6696662335d5b7581565b600d818154811061228e57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122c5613f18565b73ffffffffffffffffffffffffffffffffffffffff166122e3611bc3565b73ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603281565b736cc0e0aedbbd3c35283e38668d959f6eb303485681565b6123d5613f18565b73ffffffffffffffffffffffffffffffffffffffff166123f3611bc3565b73ffffffffffffffffffffffffffffffffffffffff161461247c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145b26026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7321be370d5312f44cb42ce377bc9b8a0cef1a4c8381565b73b02e3a4b5ebc315137753e24b6eb6aef7d602e4081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f217661756c74000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b73b02e3a4b5ebc315137753e24b6eb6aef7d602e4073ffffffffffffffffffffffffffffffffffffffff16635312ea8e600c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561271b57600080fd5b505af115801561272f573d6000803e3d6000fd5b505050506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156127be57600080fd5b505afa1580156127d2573d6000803e3d6000fd5b505050506040513d60208110156127e857600080fd5b81019080805190602001909291905050509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128b057600080fd5b505af11580156128c4573d6000803e3d6000fd5b505050506040513d60208110156128da57600080fd5b81019080805190602001909291905050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f818154811061292257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811480612a1f575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156129e257600080fd5b505afa1580156129f6573d6000803e3d6000fd5b505050506040513d6020811015612a0c57600080fd5b8101908080519060200190929190505050145b612a74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806146496036913960400191505060405180910390fd5b612b118363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061423a565b505050565b6060612b258484600085614329565b90509392505050565b600082821115612ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b612c4e8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061423a565b505050565b600080831415612c665760009050612cd3565b6000828402905082848281612c7757fe5b0414612cce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145fe6021913960400191505060405180910390fd5b809150505b92915050565b6000808211612d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381612d5957fe5b04905092915050565b612d6a611678565b612ddc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612e1f613f18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b612ecd73b02e3a4b5ebc315137753e24b6eb6aef7d602e407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b612f4e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b612fbe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b61304d600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b6130bd600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b61314c600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b565b600061322d6103e861321f602d736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156131d657600080fd5b505afa1580156131ea573d6000803e3d6000fd5b505050506040513d602081101561320057600080fd5b8101908080519060200190929190505050612c5390919063ffffffff16565b612cd990919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600d30426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818154815260200191508054801561332c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116132e2575b50509650505050505050600060405180830381600087803b15801561335057600080fd5b505af1158015613364573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561338e57600080fd5b81019080805160405193929190846401000000008211156133ae57600080fd5b838201915060208201858111156133c457600080fd5b82518660208202830111640100000000821117156133e157600080fd5b8083526020830192505050908051906020019060200280838360005b838110156134185780820151818401526020810190506133fd565b505050509050016040525050505060007321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134a357600080fd5b505afa1580156134b7573d6000803e3d6000fd5b505050506040513d60208110156134cd57600080fd5b81019080805190602001909291905050509050600061350b6103e86134fd60075485612c5390919063ffffffff16565b612cd990919063ffffffff16565b905061354c33827321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff16612bb19092919063ffffffff16565b60006135776103e861356960085486612c5390919063ffffffff16565b612cd990919063ffffffff16565b90506135da600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff16612bb19092919063ffffffff16565b60006136046103e86135f6607087612c5390919063ffffffff16565b612cd990919063ffffffff16565b9050613667600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16827321be370d5312f44cb42ce377bc9b8a0cef1a4c8373ffffffffffffffffffffffffffffffffffffffff16612bb19092919063ffffffff16565b5050505050565b60006137396002736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156136f057600080fd5b505afa158015613704573d6000803e3d6000fd5b505050506040513d602081101561371a57600080fd5b8101908080519060200190929190505050612cd990919063ffffffff16565b9050736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461399c57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600e30426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182810382528581815481526020019150805480156138a157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613857575b50509650505050505050600060405180830381600087803b1580156138c557600080fd5b505af11580156138d9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561390357600080fd5b810190808051604051939291908464010000000082111561392357600080fd5b8382019150602082018581111561393957600080fd5b825186602082028301116401000000008211171561395657600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561398d578082015181840152602081019050613972565b50505050905001604052505050505b736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613bfd57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739826000600f30426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281038252858181548152602001915080548015613b0257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613ab8575b50509650505050505050600060405180830381600087803b158015613b2657600080fd5b505af1158015613b3a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015613b6457600080fd5b8101908080516040519392919084640100000000821115613b8457600080fd5b83820191506020820185811115613b9a57600080fd5b8251866020820283011164010000000082111715613bb757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015613bee578082015181840152602081019050613bd3565b50505050905001604052505050505b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c8857600080fd5b505afa158015613c9c573d6000803e3d6000fd5b505050506040513d6020811015613cb257600080fd5b810190808051906020019092919050505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d5057600080fd5b505afa158015613d64573d6000803e3d6000fd5b505050506040513d6020811015613d7a57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560018030426040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b158015613ec157600080fd5b505af1158015613ed5573d6000803e3d6000fd5b505050506040513d6060811015613eeb57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505050565b600033905090565b600080828401905083811015613f9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613fb0611678565b15614023576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614067613f18565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6140f673b02e3a4b5ebc315137753e24b6eb6aef7d602e406000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b614158600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000736cc0e0aedbbd3c35283e38668d959f6eb303485673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b6141c8600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b614238600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166129519092919063ffffffff16565b565b606061429c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b169092919063ffffffff16565b9050600081511115614324578080602001905160208110156142bd57600080fd5b8101908080519060200190929190505050614323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061461f602a913960400191505060405180910390fd5b5b505050565b606082471015614384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145d86026913960400191505060405180910390fd5b61438d856144d2565b6143ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061444f578051825260208201915060208101905060208303925061442c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144b1576040519150601f19603f3d011682016040523d82523d6000602084013e6144b6565b606091505b50915091506144c68282866144e5565b92505050949350505050565b600080823b905060008111915050919050565b606083156144f5578290506145aa565b6000835111156145085782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561456f578082015181840152602081019050614554565b50505050905090810190601f16801561459c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220305cd31e592bf479fff5782e50e8aed32925598a561f95b888f6e89dc18edb6c64736f6c634300060c0033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000d519ae779eb7987cddda63be2ceffe0c35759e040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000631e253c932016eec6f90bdd81c31818903659f2000000000000000000000000045312c737a6b7a115906be0ad0ef53a6aa381060000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d519ae779eb7987cddda63be2ceffe0c35759e040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000631e253c932016eec6f90bdd81c31818903659f2000000000000000000000000045312c737a6b7a115906be0ad0ef53a6aa381060000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de
-----Decoded View---------------
Arg [0] : _want (address): 0xd519ae779eb7987cddda63be2ceffe0c35759e04
Arg [1] : _poolId (uint256): 1
Arg [2] : _vault (address): 0x631e253c932016eec6f90bdd81c31818903659f2
Arg [3] : _unirouter (address): 0x045312c737a6b7a115906be0ad0ef53a6aa38106
Arg [4] : _keeper (address): 0x1b8d0e5095bf368a962df1222282720fa33c60de
Arg [5] : _strategist (address): 0x1b8d0e5095bf368a962df1222282720fa33c60de
Arg [6] : _beefyFeeRecipient (address): 0x1b8d0e5095bf368a962df1222282720fa33c60de
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000d519ae779eb7987cddda63be2ceffe0c35759e04
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 000000000000000000000000631e253c932016eec6f90bdd81c31818903659f2
Arg [3] : 000000000000000000000000045312c737a6b7a115906be0ad0ef53a6aa38106
Arg [4] : 0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de
Arg [5] : 0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de
Arg [6] : 0000000000000000000000001b8d0e5095bf368a962df1222282720fa33c60de
Deployed ByteCode Sourcemap
49190:6934:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54472:176;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49617:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45625:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45657:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48703:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48415:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51473:742;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49933:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49830:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55330:121;;;:::i;:::-;;52278:221;;;:::i;:::-;;55097:122;;;:::i;:::-;;48514:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48130:44;;;:::i;:::-;;43913:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49643:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47635:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42272:148;;;:::i;:::-;;54090:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46907:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48325:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;55227:95;;;:::i;:::-;;49673:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48566:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41621:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45715:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48605:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47856:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48913:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45597:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48373:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54270:118;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47144:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51246:218;;;:::i;:::-;;48637:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49438:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49875:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47431:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48463:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49526:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42575:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49349:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49735:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;54748:267;;;:::i;:::-;;45688:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49973:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;54472:176;54518:7;54539:15;49780:42;54560:32;;;54593:6;;54609:4;54560:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54538:77;;;54633:7;54626:14;;;54472:176;:::o;49617:19::-;;;;;;;;;;;;;:::o;45625:25::-;;;;;;;;;;;;;:::o;45657:24::-;;;;;;;;;;;;;:::o;48703:202::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48451:3:::1;48777:4;:20;;48769:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48837:4;48827:7;:14;;;;48890:7;;48363:3;48404:4;48863:24;:34;48852:8;:45;;;;48703:202:::0;:::o;48415:39::-;48451:3;48415:39;:::o;51473:742::-;51550:5;;;;;;;;;;;51536:19;;:10;:19;;;51528:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51579:15;51604:4;;;;;;;;;;;51597:22;;;51628:4;51597:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51579:55;;51661:7;51651;:17;51647:174;;;49780:42;51685:32;;;51718:6;;51726:20;51738:7;51726;:11;;:20;;;;:::i;:::-;51685:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51779:4;;;;;;;;;;;51772:22;;;51803:4;51772:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51762:47;;51647:174;51847:7;51837;:17;51833:67;;;51881:7;51871:17;;51833:67;51929:7;:5;:7::i;:::-;51916:20;;:9;:20;;;:32;;;;51940:8;:6;:8::i;:::-;51916:32;51912:296;;;51965:41;51991:5;;;;;;;;;;;51998:7;51972:4;;;;;;;;;;;51965:25;;;;:41;;;;;:::i;:::-;51912:296;;;52039:27;52069:46;48552:5;52069:26;52081:13;;52069:7;:11;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;52039:76;;52130:66;52156:5;;;;;;;;;;;52163:32;52175:19;52163:7;:11;;:32;;;;:::i;:::-;52137:4;;;;;;;;;;;52130:25;;;;:66;;;;;:::i;:::-;51912:296;;51473:742;;:::o;49933:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49830:21::-;;;;:::o;55330:121::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55381:10:::1;:8;:10::i;:::-;55404:17;:15;:17::i;:::-;55434:9;:7;:9::i;:::-;55330:121::o:0;52278:221::-;44239:8;:6;:8::i;:::-;44238:9;44230:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46750:9:::1;46736:23;;:10;:23;;;46728:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;49780:42:::2;52339:31;;;52371:6;;52379:1;52339:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;52392:12;:10;:12::i;:::-;52415:14;:12;:14::i;:::-;52440:9;:7;:9::i;:::-;52480:10;52467:24;;;;;;;;;;;;52278:221::o:0;55097:122::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55144:7:::1;:5;:7::i;:::-;49780:42;55162:41;;;55204:6;;55162:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55097:122::o:0;48514:43::-;48552:5;48514:43;:::o;48130:44::-;:::o;43913:86::-;43960:4;43984:7;;;;;;;;;;;43977:14;;43913:86;:::o;49643:23::-;;;;;;;;;;;;;:::o;47635:86::-;41852:12;:10;:12::i;:::-;41841:23;;:7;:5;:7::i;:::-;:23;;;41833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47707:6:::1;47699:5;;:14;;;;;;;;;;;;;;;;;;47635:86:::0;:::o;42272:148::-;41852:12;:10;:12::i;:::-;41841:23;;:7;:5;:7::i;:::-;:23;;;41833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42379:1:::1;42342:40;;42363:6;::::0;::::1;;;;;;;;42342:40;;;;;;;;;;;;42410:1;42393:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;42272:148::o:0;54090:113::-;54132:7;54159:36;54179:15;:13;:15::i;:::-;54159;:13;:15::i;:::-;:19;;:36;;;;:::i;:::-;54152:43;;54090:113;:::o;46907:92::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46984:7:::1;46975:6;;:16;;;;;;;;;;;;;;;;;;46907:92:::0;:::o;48325:41::-;48363:3;48325:41;:::o;55227:95::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55274:8:::1;:6;:8::i;:::-;55295:19;:17;:19::i;:::-;55227:95::o:0;49673:23::-;;;;;;;;;;;;;:::o;48566:30::-;;;;:::o;41621:87::-;41667:7;41694:6;;;;;;;;;;;41687:13;;41621:87;:::o;45715:32::-;;;;;;;;;;;;;:::o;48605:25::-;;;;:::o;47856:134::-;41852:12;:10;:12::i;:::-;41841:23;;:7;:5;:7::i;:::-;:23;;;41833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47964:18:::1;47944:17;;:38;;;;;;;;;;;;;;;;;;47856:134:::0;:::o;48913:156::-;46574:7;:5;:7::i;:::-;46560:21;;:10;:21;;;:45;;;;46599:6;;;;;;;;;;;46585:20;;:10;:20;;;46560:45;46552:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48505:2:::1;48993:4;:26;;48985:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;49057:4;49041:13;:20;;;;48913:156:::0;:::o;45597:21::-;;;;;;;;;;;;;:::o;48373:35::-;48404:4;48373:35;:::o;54270:118::-;54316:7;54350:4;;;;;;;;;;;54343:22;;;54374:4;54343:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54336:44;;54270:118;:::o;47144:155::-;47230:10;;;;;;;;;;;47216:24;;:10;:24;;;47208:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47280:11;47267:10;;:24;;;;;;;;;;;;;;;;;;47144:155;:::o;51246:218::-;44239:8;:6;:8::i;:::-;44238:9;44230:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51297:15:::1;51322:4;;;;;;;;;;;51315:22;;;51346:4;51315:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;51297:55;;51379:1;51369:7;:11;51365:92;;;49780:42;51397:31;;;51429:6;;51437:7;51397:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51365:92;44279:1;51246:218::o:0;48637:57::-;;;;:::o;49438:81::-;49476:42;49438:81;:::o;49875:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47431:102::-;41852:12;:10;:12::i;:::-;41841:23;;:7;:5;:7::i;:::-;:23;;;41833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47515:10:::1;47503:9;;:22;;;;;;;;;;;;;;;;;;47431:102:::0;:::o;48463:44::-;48505:2;48463:44;:::o;49526:84::-;49567:42;49526:84;:::o;42575:244::-;41852:12;:10;:12::i;:::-;41841:23;;:7;:5;:7::i;:::-;:23;;;41833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42684:1:::1;42664:22;;:8;:22;;;;42656:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42774:8;42745:38;;42766:6;::::0;::::1;;;;;;;;42745:38;;;;;;;;;;;;42803:8;42794:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;42575:244:::0;:::o;49349:82::-;49388:42;49349:82;:::o;49735:88::-;49780:42;49735:88;:::o;54748:267::-;54813:5;;;;;;;;;;;54799:19;;:10;:19;;;54791:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49780:42;54842:41;;;54884:6;;54842:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54904:15;54929:4;;;;;;;;;;;54922:22;;;54953:4;54922:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54904:55;;54977:4;;;;;;;;;;;54970:21;;;54992:5;;;;;;;;;;;54999:7;54970:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54748:267;:::o;45688:20::-;;;;;;;;;;;;;:::o;49973:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31825:622::-;32204:1;32195:5;:10;32194:62;;;;32254:1;32211:5;:15;;;32235:4;32242:7;32211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;32194:62;32186:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32349:90;32369:5;32399:22;;;32423:7;32432:5;32376:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32349:19;:90::i;:::-;31825:622;;;:::o;26161:195::-;26264:12;26296:52;26318:6;26326:4;26332:1;26335:12;26296:21;:52::i;:::-;26289:59;;26161:195;;;;;:::o;7227:158::-;7285:7;7318:1;7313;:6;;7305:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7376:1;7372;:5;7365:12;;7227:158;;;;:::o;31166:177::-;31249:86;31269:5;31299:23;;;31324:2;31328:5;31276:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31249:19;:86::i;:::-;31166:177;;;:::o;7644:220::-;7702:7;7731:1;7726;:6;7722:20;;;7741:1;7734:8;;;;7722:20;7753:9;7769:1;7765;:5;7753:17;;7798:1;7793;7789;:5;;;;;;:10;7781:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7855:1;7848:8;;;7644:220;;;;;:::o;8342:153::-;8400:7;8432:1;8428;:5;8420:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8486:1;8482;:5;;;;;;8475:12;;8342:153;;;;:::o;44972:120::-;44516:8;:6;:8::i;:::-;44508:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45041:5:::1;45031:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;45062:22;45071:12;:10;:12::i;:::-;45062:22;;;;;;;;;;;;;;;;;;;;44972:120::o:0;55459:401::-;55506:49;49780:42;55551:2;55513:4;;;;;;;;;;;55506:24;;;;:49;;;;;:::i;:::-;55566:50;55593:9;;;;;;;;;;;55612:2;49567:42;55566:26;;;;:50;;;;;:::i;:::-;55629:42;55658:9;;;;;;;;;;;55669:1;55636:8;;;;;;;;;;;55629:28;;;;:42;;;;;:::i;:::-;55682:52;55711:9;;;;;;;;;;;55730:2;55689:8;;;;;;;;;;;55682:28;;;;:52;;;;;:::i;:::-;55747:42;55776:9;;;;;;;;;;;55787:1;55754:8;;;;;;;;;;;55747:28;;;;:42;;;;;:::i;:::-;55800:52;55829:9;;;;;;;;;;;55848:2;55807:8;;;;;;;;;;;55800:28;;;;:52;;;;;:::i;:::-;55459:401::o;52532:719::-;52574:14;52591:57;52643:4;52591:47;52635:2;49567:42;52591:24;;;52624:4;52591:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;52574:74;;52674:9;;;;;;;;;;;52659:50;;;52710:6;52718:1;52721:17;52748:4;52755:3;52659:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52772:15;49388:42;52790:22;;;52821:4;52790:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52772:55;;52840:21;52864:33;48404:4;52864:20;52876:7;;52864;:11;;:20;;;;:::i;:::-;:24;;:33;;;;:::i;:::-;52840:57;;52908:52;52934:10;52946:13;49388:42;52908:25;;;;:52;;;;;:::i;:::-;52973:22;52998:34;48404:4;52998:21;53010:8;;52998:7;:11;;:21;;;;:::i;:::-;:25;;:34;;;;:::i;:::-;52973:59;;53043:60;53069:17;;;;;;;;;;;53088:14;49388:42;53043:25;;;;:60;;;;;:::i;:::-;53116:21;53140:40;48404:4;53140:27;48363:3;53140:7;:11;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;53116:64;;53191:52;53217:10;;;;;;;;;;;53229:13;49388:42;53191:25;;;;:52;;;;;:::i;:::-;52532:719;;;;;:::o;53314:702::-;53358:18;53379:46;53423:1;49567:42;53379:24;;;53412:4;53379:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;:46;;;;:::i;:::-;53358:67;;49567:42;53442:18;;:8;;;;;;;;;;;:18;;;53438:154;;53492:9;;;;;;;;;;;53477:50;;;53528:10;53540:1;53543:16;53569:4;53576:3;53477:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53438:154;49567:42;53608:18;;:8;;;;;;;;;;;:18;;;53604:154;;53658:9;;;;;;;;;;;53643:50;;;53694:10;53706:1;53709:16;53735:4;53742:3;53643:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53604:154;53770:14;53794:8;;;;;;;;;;;53787:26;;;53822:4;53787:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53770:58;;53839:14;53863:8;;;;;;;;;;;53856:26;;;53891:4;53856:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53839:58;;53923:9;;;;;;;;;;;53908:38;;;53947:8;;;;;;;;;;;53957;;;;;;;;;;;53967:6;53975;53983:1;53986;53997:4;54004:3;53908:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53314:702;;;:::o;807:106::-;860:15;895:10;888:17;;807:106;:::o;6765:179::-;6823:7;6843:9;6859:1;6855;:5;6843:17;;6884:1;6879;:6;;6871:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6935:1;6928:8;;;6765:179;;;;:::o;44713:118::-;44239:8;:6;:8::i;:::-;44238:9;44230:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44783:4:::1;44773:7;;:14;;;;;;;;;;;;;;;;;;44803:20;44810:12;:10;:12::i;:::-;44803:20;;;;;;;;;;;;;;;;;;;;44713:118::o:0;55868:253::-;55917:39;49780:42;55954:1;55924:4;;;;;;;;;;;55917:24;;;;:39;;;;;:::i;:::-;55967:40;55994:9;;;;;;;;;;;56005:1;49567:42;55967:26;;;;:40;;;;;:::i;:::-;56018:42;56047:9;;;;;;;;;;;56058:1;56025:8;;;;;;;;;;;56018:28;;;;:42;;;;;:::i;:::-;56071;56100:9;;;;;;;;;;;56111:1;56078:8;;;;;;;;;;;56071:28;;;;:42;;;;;:::i;:::-;55868:253::o;33471:761::-;33895:23;33921:69;33949:4;33921:69;;;;;;;;;;;;;;;;;33929:5;33921:27;;;;:69;;;;;:::i;:::-;33895:95;;34025:1;34005:10;:17;:21;34001:224;;;34147:10;34136:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34128:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34001:224;33471:761;;;:::o;27213:530::-;27340:12;27398:5;27373:21;:30;;27365:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27465:18;27476:6;27465:10;:18::i;:::-;27457:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27591:12;27605:23;27632:6;:11;;27652:5;27660:4;27632:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27590:75;;;;27683:52;27701:7;27710:10;27722:12;27683:17;:52::i;:::-;27676:59;;;;27213:530;;;;;;:::o;23243:422::-;23303:4;23511:12;23622:7;23610:20;23602:28;;23656:1;23649:4;:8;23642:15;;;23243:422;;;:::o;29753:742::-;29868:12;29897:7;29893:595;;;29928:10;29921:17;;;;29893:595;30062:1;30042:10;:17;:21;30038:439;;;30305:10;30299:17;30366:15;30353:10;30349:2;30345:19;30338:44;30253:148;30448:12;30441:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29753:742;;;;;;:::o
Swarm Source
ipfs://305cd31e592bf479fff5782e50e8aed32925598a561f95b888f6e89dc18edb6c
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.