Overview
GLMR Balance
0 GLMR
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator:
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Harvest | 4737022 | 153 days ago | IN | 0 GLMR | 0.11077541 | ||||
Harvest | 4737010 | 153 days ago | IN | 0 GLMR | 0.45914112 | ||||
Harvest | 4737006 | 153 days ago | IN | 0 GLMR | 0.054523 | ||||
Harvest | 4668879 | 163 days ago | IN | 0 GLMR | 0.089676 | ||||
Harvest | 4668875 | 163 days ago | IN | 0 GLMR | 0.044838 | ||||
Harvest | 3291509 | 358 days ago | IN | 0 GLMR | 0.0717307 | ||||
Harvest | 3082758 | 389 days ago | IN | 0 GLMR | 0.0744724 | ||||
Set Strategist | 2116420 | 525 days ago | IN | 0 GLMR | 0.00268538 | ||||
Harvest | 266780 | 793 days ago | IN | 0 GLMR | 0.0697347 | ||||
Harvest | 250660 | 796 days ago | IN | 0 GLMR | 0.0119568 | ||||
0x60806040 | 250629 | 796 days ago | IN | Create: StrategyGlintUsdcEthLp | 0 GLMR | 0.532823 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StrategyGlintUsdcEthLp
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-01-22 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // File src/lib/safe-math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File src/lib/context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.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 src/lib/erc20.sol // File: contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; // File: contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File src/interfaces/jar.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IJar is IERC20 { function token() external view returns (address); function reward() external view returns (address); function claimInsurance() external; // NOTE: Only yDelegatedVault implements this function getRatio() external view returns (uint256); function depositAll() external; function balance() external view returns (uint256); function deposit(uint256) external; function withdrawAll() external; function withdraw(uint256) external; function earn() external; function decimals() external view returns (uint8); } // File src/interfaces/staking-rewards.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IStakingRewards { function balanceOf(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function exit() external; function getReward() external; function getRewardForDuration() external view returns (uint256); function lastTimeRewardApplicable() external view returns (uint256); function lastUpdateTime() external view returns (uint256); function notifyRewardAmount(uint256 reward) external; function periodFinish() external view returns (uint256); function rewardPerToken() external view returns (uint256); function rewardPerTokenStored() external view returns (uint256); function rewardRate() external view returns (uint256); function rewards(address) external view returns (uint256); function rewardsDistribution() external view returns (address); function rewardsDuration() external view returns (uint256); function rewardsToken() external view returns (address); function stake(uint256 amount) external; function deposit(uint256 amount) external; function stakeWithPermit( uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function stakingToken() external view returns (address); function totalSupply() external view returns (uint256); function userRewardPerTokenPaid(address) external view returns (uint256); function withdraw(uint256 amount) external; } interface IStakingRewardsFactory { function deploy(address stakingToken, uint256 rewardAmount) external; function isOwner() external view returns (bool); function notifyRewardAmount(address stakingToken) external; function notifyRewardAmounts() external; function owner() external view returns (address); function renounceOwnership() external; function rewardsToken() external view returns (address); function stakingRewardsGenesis() external view returns (uint256); function stakingRewardsInfoByStakingToken(address) external view returns (address stakingRewards, uint256 rewardAmount); function stakingTokens(uint256) external view returns (address); function transferOwnership(address newOwner) external; } // File src/interfaces/masterchef.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; interface IMasterchef { function BONUS_MULTIPLIER() external view returns (uint256); function add( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; function bonusEndBlock() external view returns (uint256); function deposit(uint256 _pid, uint256 _amount) external; function dev(address _devaddr) external; function devFundDivRate() external view returns (uint256); function devaddr() external view returns (address); function emergencyWithdraw(uint256 _pid) external; function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); function massUpdatePools() external; function owner() external view returns (address); function pendingPickle(uint256 _pid, address _user) external view returns (uint256); function pendingReward(uint256 _pid, address _user) external view returns (uint256); function pending(uint256 _pid, address _user) external view returns (uint256); function pickle() external view returns (address); function picklePerBlock() external view returns (uint256); function poolInfo(uint256) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accPicklePerShare ); function poolLength() external view returns (uint256); function renounceOwnership() external; function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; function setBonusEndBlock(uint256 _bonusEndBlock) external; function setDevFundDivRate(uint256 _devFundDivRate) external; function setPicklePerBlock(uint256 _picklePerBlock) external; function startBlock() external view returns (uint256); function totalAllocPoint() external view returns (uint256); function transferOwnership(address newOwner) external; function updatePool(uint256 _pid) external; function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); function withdraw(uint256 _pid, uint256 _amount) external; } // File src/interfaces/uniswapv2.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface UniswapRouterV2 { function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function createPair(address tokenA, address tokenB) external returns (address pair); } // File src/interfaces/controller.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IController { function jars(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function withdrawReward(address, uint256) external; function earn(address, uint256) external; function strategies(address) external view returns (address); } // File src/strategies/moonbeam/strategy-base.sol pragma solidity ^0.6.7; // Strategy Contract Basics abstract contract StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Perfomance fees uint256 public performanceTreasuryFee = 0; uint256 public constant performanceTreasuryMax = 10000; uint256 public performanceDevFee = 0; uint256 public constant performanceDevMax = 10000; // Withdrawal fee 0% // - 0% to treasury // - 0% to dev fund uint256 public withdrawalTreasuryFee = 0; uint256 public constant withdrawalTreasuryMax = 100000; uint256 public withdrawalDevFundFee = 0; uint256 public constant withdrawalDevFundMax = 100000; // Tokens address public want; address public constant glmr = 0xAcc15dC74880C9944775448304B263D191c6077F; // User accounts address public governance; address public controller; address public strategist; address public timelock; // Dex address public sushiRouter; mapping(address => bool) public harvesters; constructor( address _want, address _governance, address _strategist, address _controller, address _timelock ) public { require(_want != address(0)); require(_governance != address(0)); require(_strategist != address(0)); require(_controller != address(0)); require(_timelock != address(0)); want = _want; governance = _governance; strategist = _strategist; controller = _controller; timelock = _timelock; } // **** Modifiers **** // modifier onlyBenevolent { require( harvesters[msg.sender] || msg.sender == governance || msg.sender == strategist ); _; } // **** Views **** // function balanceOfWant() public view returns (uint256) { return IERC20(want).balanceOf(address(this)); } function balanceOfPool() public virtual view returns (uint256); function balanceOf() public view returns (uint256) { return balanceOfWant().add(balanceOfPool()); } function getName() external virtual pure returns (string memory); // **** Setters **** // function whitelistHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist || harvesters[msg.sender], "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = true; } } function revokeHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist, "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = false; } } function setWithdrawalDevFundFee(uint256 _withdrawalDevFundFee) external { require(msg.sender == timelock, "!timelock"); withdrawalDevFundFee = _withdrawalDevFundFee; } function setWithdrawalTreasuryFee(uint256 _withdrawalTreasuryFee) external { require(msg.sender == timelock, "!timelock"); withdrawalTreasuryFee = _withdrawalTreasuryFee; } function setPerformanceDevFee(uint256 _performanceDevFee) external { require(msg.sender == timelock, "!timelock"); performanceDevFee = _performanceDevFee; } function setPerformanceTreasuryFee(uint256 _performanceTreasuryFee) external { require(msg.sender == timelock, "!timelock"); performanceTreasuryFee = _performanceTreasuryFee; } function setStrategist(address _strategist) external { require(msg.sender == governance, "!governance"); strategist = _strategist; } function setGovernance(address _governance) external { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) external { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setController(address _controller) external { require(msg.sender == timelock, "!timelock"); controller = _controller; } // **** State mutations **** // function deposit() public virtual; // Controller only function for creating additional rewards from dust function withdraw(IERC20 _asset) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); require(want != address(_asset), "want"); balance = _asset.balanceOf(address(this)); _asset.safeTransfer(controller, balance); } // Withdraw partial funds, normally used with a jar withdrawal function withdraw(uint256 _amount) external { require(msg.sender == controller, "!controller"); uint256 _balance = IERC20(want).balanceOf(address(this)); if (_balance < _amount) { _amount = _withdrawSome(_amount.sub(_balance)); _amount = _amount.add(_balance); } uint256 _feeDev = _amount.mul(withdrawalDevFundFee).div( withdrawalDevFundMax ); IERC20(want).safeTransfer(IController(controller).devfund(), _feeDev); uint256 _feeTreasury = _amount.mul(withdrawalTreasuryFee).div( withdrawalTreasuryMax ); IERC20(want).safeTransfer( IController(controller).treasury(), _feeTreasury ); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, _amount.sub(_feeDev).sub(_feeTreasury)); } // Withdraw funds, used to swap between strategies function withdrawForSwap(uint256 _amount) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawSome(_amount); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); IERC20(want).safeTransfer(_jar, balance); } // Withdraw all funds, normally used when migrating strategies function withdrawAll() external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawAll(); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, balance); } function _withdrawAll() internal { _withdrawSome(balanceOfPool()); } function _withdrawSome(uint256 _amount) internal virtual returns (uint256); function harvest() public virtual; // **** Emergency functions **** function execute(address _target, bytes memory _data) public payable returns (bytes memory response) { require(msg.sender == timelock, "!timelock"); require(_target != address(0), "!target"); // call contract in current context assembly { let succeeded := delegatecall( sub(gas(), 5000), _target, add(_data, 0x20), mload(_data), 0, 0 ) let size := returndatasize() response := mload(0x40) mstore( 0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))) ) mstore(response, size) returndatacopy(add(response, 0x20), 0, size) switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(add(response, 0x20), size) } } } // **** Internal functions **** function _swapSushiswap( address _from, address _to, uint256 _amount ) internal { require(_to != address(0)); address[] memory path; if (_from == glmr || _to == glmr) { path = new address[](2); path[0] = _from; path[1] = _to; } else { path = new address[](3); path[0] = _from; path[1] = glmr; path[2] = _to; } IERC20(_from).safeApprove(sushiRouter, 0); IERC20(_from).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), now.add(60) ); } function _swapSushiswapWithPath( address[] memory path, uint256 _amount ) internal { require(path[1] != address(0)); IERC20(path[0]).safeApprove(sushiRouter, 0); IERC20(path[0]).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 1, path, address(this), block.timestamp ); } function _distributePerformanceFeesAndDeposit() internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _want.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _want.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } } // File src/interfaces/beam-chef.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; pragma experimental ABIEncoderV2; // interface for Beamchef contract interface IBeamChef { function deposit(uint256 _pid, uint256 _amount) external; function pendingTokens(uint256 _pid, address _user) external view returns ( address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory amounts ); function userInfo(uint256, address) external view returns ( uint256 amount, uint256 rewardDebt, uint256 rewardLockedUp, uint256 nextHarvestUntil ); function withdraw(uint256 _pid, uint256 _amount) external; } // File src/strategies/moonbeam/beamswap/strategy-beam-farm-base.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; abstract contract StrategyBeamFarmBase is StrategyBase { // Token addresses address public glint = 0xcd3B51D98478D53F4515A306bE565c6EebeF1D58; address public constant beamChef = 0xC6ca172FC8BDB803c5e12731109744fb0200587b; address public token0; address public token1; // How much GLINT tokens to keep? uint256 public keepGLINT = 1000; uint256 public constant keepGLINTMax = 10000; uint256 public poolId; mapping(address => address[]) public swapRoutes; constructor( address _lp, uint256 _poolId, address _governance, address _strategist, address _controller, address _timelock ) public StrategyBase(_lp, _governance, _strategist, _controller, _timelock) { // Beamswap router sushiRouter = 0x96b244391D98B62D19aE89b1A4dCcf0fc56970C7; poolId = _poolId; token0 = IUniswapV2Pair(_lp).token0(); token1 = IUniswapV2Pair(_lp).token1(); } function balanceOfPool() public view override returns (uint256) { (uint256 amount, , , ) = IBeamChef(beamChef).userInfo( poolId, address(this) ); return amount; } function getHarvestable() external view returns (uint256) { (, , , uint256[] memory amounts) = IBeamChef(beamChef).pendingTokens( poolId, address(this) ); return amounts[0]; } // **** Setters **** function deposit() public override { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { IERC20(want).safeApprove(beamChef, 0); IERC20(want).safeApprove(beamChef, _want); IBeamChef(beamChef).deposit(poolId, _want); } } function _withdrawSome(uint256 _amount) internal override returns (uint256) { IBeamChef(beamChef).withdraw(poolId, _amount); return _amount; } function setKeepGLINT(uint256 _keepGLINT) external { require(msg.sender == timelock, "!timelock"); keepGLINT = _keepGLINT; } // **** State Mutations **** function harvest() public override { // Collects GLINT tokens IBeamChef(beamChef).deposit(poolId, 0); uint256 _glint = IERC20(glint).balanceOf(address(this)); if (_glint > 0) { uint256 _keepGLINT = _glint.mul(keepGLINT).div(keepGLINTMax); IERC20(glint).safeTransfer( IController(controller).treasury(), _keepGLINT ); _glint = _glint.sub(_keepGLINT); uint256 toToken0 = _glint.div(2); uint256 toToken1 = _glint.sub(toToken0); if (swapRoutes[token0].length > 1) { _swapSushiswapWithPath(swapRoutes[token0], toToken0); } if (swapRoutes[token1].length > 1) { _swapSushiswapWithPath(swapRoutes[token1], toToken1); } } // Adds in liquidity for token0/token1 uint256 _token0 = IERC20(token0).balanceOf(address(this)); uint256 _token1 = IERC20(token1).balanceOf(address(this)); if (_token0 > 0 && _token1 > 0) { IERC20(token0).safeApprove(sushiRouter, 0); IERC20(token0).safeApprove(sushiRouter, _token0); IERC20(token1).safeApprove(sushiRouter, 0); IERC20(token1).safeApprove(sushiRouter, _token1); UniswapRouterV2(sushiRouter).addLiquidity( token0, token1, _token0, _token1, 0, 0, address(this), now + 60 ); // Donates DUST IERC20(token0).transfer( IController(controller).treasury(), IERC20(token0).balanceOf(address(this)) ); IERC20(token1).safeTransfer( IController(controller).treasury(), IERC20(token1).balanceOf(address(this)) ); } _distributePerformanceFeesAndDeposit(); } } // File src/strategies/moonbeam/beamswap/strategy-beam-eth-usdc-lp.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; contract StrategyGlintUsdcEthLp is StrategyBeamFarmBase { uint256 public usdc_eth_poolId = 4; // Token addresses address public usdc_eth_lp = 0x6BA3071760d46040FB4dc7B627C9f68efAca3000; address public usdc = 0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b; address public eth = 0xfA9343C3897324496A05fC75abeD6bAC29f8A40f; constructor( address _governance, address _strategist, address _controller, address _timelock ) public StrategyBeamFarmBase( usdc_eth_lp, usdc_eth_poolId, _governance, _strategist, _controller, _timelock ) { swapRoutes[eth] = [glint, glmr, usdc, eth]; swapRoutes[usdc] = [glint, glmr, usdc]; } // **** Views **** function getName() external pure override returns (string memory) { return "StrategyGlintUsdcEthLp"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beamChef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getHarvestable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"glint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glmr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"harvesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepGLINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepGLINTMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"revokeHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keepGLINT","type":"uint256"}],"name":"setKeepGLINT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceDevFee","type":"uint256"}],"name":"setPerformanceDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceTreasuryFee","type":"uint256"}],"name":"setPerformanceTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalDevFundFee","type":"uint256"}],"name":"setWithdrawalDevFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalTreasuryFee","type":"uint256"}],"name":"setWithdrawalTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"swapRoutes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc_eth_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc_eth_poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"whitelistHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawForSwap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalDevFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalDevFundMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000805560006001556000600255600060035573cd3b51d98478d53f4515a306be565c6eebef1d58600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600e556004601155736ba3071760d46040fb4dc7b627c9f68efaca3000601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073818ec0a7fe18ff94269904fced6ae3dae6d6dc0b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fa9343c3897324496a05fc75abed6bac29f8a40f601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200018357600080fd5b5060405162006145380380620061458339818101604052810190620001a9919062000b06565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601154858585858584848484600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156200021357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200024e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200028957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002c457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002ff57600080fd5b84600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050507396b244391d98b62d19ae89b1a4dccf0fc56970c7600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600f819055508573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ec57600080fd5b505afa15801562000501573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000527919062000ada565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508573ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620005ae57600080fd5b505afa158015620005c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e9919062000ada565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506040518060800160405280600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060106000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020906004620007eb9291906200095f565b506040518060600160405280600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060106000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090600362000954929190620009ee565b505050505062000bc0565b828054828255906000526020600020908101928215620009db579160200282015b82811115620009da5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000980565b5b509050620009ea919062000a7d565b5090565b82805482825590600052602060002090810192821562000a6a579160200282015b8281111562000a695782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000a0f565b5b50905062000a79919062000a7d565b5090565b62000ac091905b8082111562000abc57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010162000a84565b5090565b90565b60008151905062000ad48162000ba6565b92915050565b60006020828403121562000aed57600080fd5b600062000afd8482850162000ac3565b91505092915050565b6000806000806080858703121562000b1d57600080fd5b600062000b2d8782880162000ac3565b945050602062000b408782880162000ac3565b935050604062000b538782880162000ac3565b925050606062000b668782880162000ac3565b91505092959194509250565b600062000b7f8262000b86565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62000bb18162000b72565b811462000bbd57600080fd5b50565b6155758062000bd06000396000f3fe6080604052600436106102e45760003560e01c806373aef09911610190578063bdacb303116100dc578063d21220a711610095578063de207c7a1161006f578063de207c7a14610adb578063f77c479114610b06578063fe1f8f7a14610b31578063feb53b9d14610b5c576102e4565b8063d21220a714610a48578063d2a7098a14610a73578063d33219b414610ab0576102e4565b8063bdacb3031461094e578063c1a3d44c14610977578063c6223e26146109a2578063c65e3242146109df578063c7b9d53014610a08578063d0e30db014610a31576102e4565b80638ccdbb7011610149578063ab73e43311610123578063ab73e433146108a8578063b1f55bd4146108d1578063b58b349f146108fa578063b9c8245a14610923576102e4565b80638ccdbb701461082b57806392eefe9b14610856578063ab033ea91461087f576102e4565b806373aef099146107195780638237859414610744578063853828b61461076d578063879765831461079857806388993f22146107d55780638c7c9e0c14610800576102e4565b80632e1a7d4d1161024f57806351cff8d9116102085780635aa6e675116101e25780635aa6e6751461066d578063618c3bdc146106985780636d13582c146106c3578063722713f7146106ee576102e4565b806351cff8d9146105da57806351f3d0b81461061757806359739ec414610642576102e4565b80632e1a7d4d146104ee5780633e0dc34e146105175780633e413bee146105425780634641257d1461056d578063479119be146105845780634fe809cc146105af576102e4565b806317d7de7c116102a157806317d7de7c146103e95780631cff79cd146104145780631f1fcd51146104445780631fe4a6861461046f578063249fb9b41461049a57806326e886c6146104c3576102e4565b806301887fd8146102e95780630547104d146103145780630dfe16811461033f5780630e364fb61461036a578063115880861461039357806312d8e41b146103be575b600080fd5b3480156102f557600080fd5b506102fe610b87565b60405161030b91906151a9565b60405180910390f35b34801561032057600080fd5b50610329610b8d565b60405161033691906151a9565b60405180910390f35b34801561034b57600080fd5b50610354610c57565b6040516103619190614edf565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c9190614744565b610c7d565b005b34801561039f57600080fd5b506103a8610e54565b6040516103b591906151a9565b60405180910390f35b3480156103ca57600080fd5b506103d3610f04565b6040516103e09190614edf565b60405180910390f35b3480156103f557600080fd5b506103fe610f1c565b60405161040b9190615007565b60405180910390f35b61042e600480360381019061042991906146b4565b610f59565b60405161043b9190614fe5565b60405180910390f35b34801561045057600080fd5b506104596110ab565b6040516104669190614edf565b60405180910390f35b34801561047b57600080fd5b506104846110d1565b6040516104919190614edf565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906148df565b6110f7565b005b3480156104cf57600080fd5b506104d8611191565b6040516104e591906151a9565b60405180910390f35b3480156104fa57600080fd5b50610515600480360381019061051091906148df565b611197565b005b34801561052357600080fd5b5061052c6116fe565b60405161053991906151a9565b60405180910390f35b34801561054e57600080fd5b50610557611704565b6040516105649190614edf565b60405180910390f35b34801561057957600080fd5b5061058261172a565b005b34801561059057600080fd5b50610599612455565b6040516105a691906151a9565b60405180910390f35b3480156105bb57600080fd5b506105c461245c565b6040516105d191906151a9565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906148b6565b612462565b60405161060e91906151a9565b60405180910390f35b34801561062357600080fd5b5061062c612662565b60405161063991906151a9565b60405180910390f35b34801561064e57600080fd5b50610657612668565b60405161066491906151a9565b60405180910390f35b34801561067957600080fd5b5061068261266e565b60405161068f9190614edf565b60405180910390f35b3480156106a457600080fd5b506106ad612694565b6040516106ba9190614edf565b60405180910390f35b3480156106cf57600080fd5b506106d86126ba565b6040516106e59190614edf565b60405180910390f35b3480156106fa57600080fd5b506107036126e0565b60405161071091906151a9565b60405180910390f35b34801561072557600080fd5b5061072e612708565b60405161073b9190614edf565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906148df565b612720565b005b34801561077957600080fd5b506107826127ba565b60405161078f91906151a9565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614662565b612a93565b6040516107cc9190614fca565b60405180910390f35b3480156107e157600080fd5b506107ea612ab3565b6040516107f791906151a9565b60405180910390f35b34801561080c57600080fd5b50610815612ab9565b6040516108229190614edf565b60405180910390f35b34801561083757600080fd5b50610840612adf565b60405161084d91906151a9565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614662565b612ae5565b005b34801561088b57600080fd5b506108a660048036038101906108a19190614662565b612bb9565b005b3480156108b457600080fd5b506108cf60048036038101906108ca91906148df565b612c8d565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614744565b612d27565b005b34801561090657600080fd5b50610921600480360381019061091c91906148df565b612eaa565b005b34801561092f57600080fd5b50610938612f44565b60405161094591906151a9565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614662565b612f4a565b005b34801561098357600080fd5b5061098c61301e565b60405161099991906151a9565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906148df565b6130d0565b6040516109d691906151a9565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906148df565b6133ad565b005b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614662565b613447565b005b348015610a3d57600080fd5b50610a4661351b565b005b348015610a5457600080fd5b50610a5d61371d565b604051610a6a9190614edf565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a959190614708565b613743565b604051610aa79190614edf565b60405180910390f35b348015610abc57600080fd5b50610ac561378e565b604051610ad29190614edf565b60405180910390f35b348015610ae757600080fd5b50610af06137b4565b604051610afd9190614edf565b60405180910390f35b348015610b1257600080fd5b50610b1b6137da565b604051610b289190614edf565b60405180910390f35b348015610b3d57600080fd5b50610b46613800565b604051610b5391906151a9565b60405180910390f35b348015610b6857600080fd5b50610b71613807565b604051610b7e91906151a9565b60405180910390f35b60115481565b6000606073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663ffcd4263600f54306040518363ffffffff1660e01b8152600401610be29291906151c4565b60006040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c379190614789565b935050505080600081518110610c4957fe5b602002602001015191505090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d265750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610d7a5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db0906150c9565b60405180910390fd5b60008090505b82829050811015610e4f576001600a6000858585818110610ddc57fe5b9050602002016020810190610df19190614662565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610dbf565b505050565b60008073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff166393f1a40b600f54306040518363ffffffff1660e01b8152600401610ea89291906151c4565b60806040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190614980565b50505090508091505090565b73acc15dc74880c9944775448304b263d191c6077f81565b60606040518060400160405280601681526020017f5374726174656779476c696e74557364634574684c7000000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290615169565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290615049565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461109b576110a2565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90615169565b60405180910390fd5b8060008190555050565b61271081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90615069565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112849190614edf565b60206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614908565b905081811015611311576112f96112f4828461380d90919063ffffffff16565b613857565b915061130e81836138e490919063ffffffff16565b91505b600061133d620186a061132f6003548661393990919063ffffffff16565b6139a990919063ffffffff16565b905061142b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e2919061468b565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b6000611457620186a06114496002548761393990919063ffffffff16565b6139a990919063ffffffff16565b9050611545600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c457600080fd5b505afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc919061468b565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016115c49190614edf565b60206040518083038186803b1580156115dc57600080fd5b505afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611614919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90615109565b60405180910390fd5b6116f7816116af846116a1878a61380d90919063ffffffff16565b61380d90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5050505050565b600f5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600f5460006040518363ffffffff1660e01b815260040161177c9291906151ed565b600060405180830381600087803b15801561179657600080fd5b505af11580156117aa573d6000803e3d6000fd5b505050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180b9190614edf565b60206040518083038186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b9190614908565b90506000811115611c81576000611891612710611883600e548561393990919063ffffffff16565b6139a990919063ffffffff16565b905061197f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611936919061468b565b82600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b611992818361380d90919063ffffffff16565b915060006119aa6002846139a990919063ffffffff16565b905060006119c1828561380d90919063ffffffff16565b9050600160106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611b2057611b1f60106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b1457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611aca575b505050505083613a79565b5b600160106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611c7d57611c7c60106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c27575b505050505082613a79565b5b5050505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cde9190614edf565b60206040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2e9190614908565b90506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d8d9190614edf565b60206040518083038186803b158015611da557600080fd5b505afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614908565b9050600082118015611def5750600081115b1561244857611e64600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611ed3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611f43600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611fb2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030603c42016040518963ffffffff1660e01b8152600401612063989796959493929190614f23565b606060405180830381600087803b15801561207d57600080fd5b505af1158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190614931565b505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561215e57600080fd5b505afa158015612172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612196919061468b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121f19190614edf565b60206040518083038186803b15801561220957600080fd5b505afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122419190614908565b6040518363ffffffff1660e01b815260040161225e929190614fa1565b602060405180830381600087803b15801561227857600080fd5b505af115801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b0919061488d565b50612447600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561231c57600080fd5b505afa158015612330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612354919061468b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123af9190614edf565b60206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190614908565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5b612450613da8565b505050565b620186a081565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90615069565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906150a9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125be9190614edf565b60206040518083038186803b1580156125d657600080fd5b505afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e9190614908565b905061265d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b919050565b60035481565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006127036126ed610e54565b6126f561301e565b6138e490919063ffffffff16565b905090565b73c6ca172fc8bdb803c5e12731109744fb0200587b81565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a790615169565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615069565b60405180910390fd5b612854614094565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128af9190614edf565b60206040518083038186803b1580156128c757600080fd5b505afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff9190614908565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016129809190614edf565b60206040518083038186803b15801561299857600080fd5b505afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d0919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990615109565b60405180910390fd5b612a8f8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60015481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6c90615169565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090615029565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1490615169565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612dd05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e06906150c9565b60405180910390fd5b60008090505b82829050811015612ea5576000600a6000858585818110612e3257fe5b9050602002016020810190612e479190614662565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612e15565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3190615169565b60405180910390fd5b80600e8190555050565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190615169565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161307b9190614edf565b60206040518083038186803b15801561309357600080fd5b505afa1580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb9190614908565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315990615069565b60405180910390fd5b61316b82613857565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131c79190614edf565b60206040518083038186803b1580156131df57600080fd5b505afa1580156131f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132179190614908565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016132989190614edf565b60206040518083038186803b1580156132b057600080fd5b505afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e8919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561335a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335190615109565b60405180910390fd5b6133a78183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b50919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343490615169565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615029565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135789190614edf565b60206040518083038186803b15801561359057600080fd5b505afa1580156135a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c89190614908565b9050600081111561371a5761363573c6ca172fc8bdb803c5e12731109744fb0200587b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b61369673c6ca172fc8bdb803c5e12731109744fb0200587b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b73c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600f54836040518363ffffffff1660e01b81526004016136e7929190615270565b600060405180830381600087803b15801561370157600080fd5b505af1158015613715573d6000803e3d6000fd5b505050505b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6010602052816000526040600020818154811061375c57fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b61271081565b600061384f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140a7565b905092915050565b600073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663441a3e70600f54846040518363ffffffff1660e01b81526004016138aa929190615270565b600060405180830381600087803b1580156138c457600080fd5b505af11580156138d8573d6000803e3d6000fd5b50505050819050919050565b60008082840190508381101561392f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392690615089565b60405180910390fd5b8091505092915050565b60008083141561394c57600090506139a3565b600082840290508284828161395d57fe5b041461399e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613995906150e9565b60405180910390fd5b809150505b92915050565b60006139eb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614102565b905092915050565b613a748363a9059cbb60e01b8484604051602401613a12929190614fa1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614163565b505050565b600073ffffffffffffffffffffffffffffffffffffffff1682600181518110613a9e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613ac757600080fd5b613b29600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600084600081518110613afc57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b613b8a600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284600081518110613b5d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398260018530426040518663ffffffff1660e01b8152600401613bee959493929190615216565b600060405180830381600087803b158015613c0857600080fd5b505af1158015613c1c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613c45919061484c565b505050565b6000811480613ce3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613c91929190614efa565b60206040518083038186803b158015613ca957600080fd5b505afa158015613cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce19190614908565b145b613d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1990615189565b60405180910390fd5b613da38363095ea7b360e01b8484604051602401613d41929190614fa1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614163565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e059190614edf565b60206040518083038186803b158015613e1d57600080fd5b505afa158015613e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e559190614908565b9050600081111561409157613f74600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015613ecb57600080fd5b505afa158015613edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f03919061468b565b613f2c612710613f1e6000548661393990919063ffffffff16565b6139a990919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b614088600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015613fdf57600080fd5b505afa158015613ff3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614017919061468b565b6140406127106140326001548661393990919063ffffffff16565b6139a990919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b61409061351b565b5b50565b6140a461409f610e54565b613857565b50565b60008383111582906140ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e69190615007565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290614149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141409190615007565b60405180910390fd5b50600083858161415557fe5b049050809150509392505050565b60606141c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661422a9092919063ffffffff16565b905060008151111561422557808060200190518101906141e5919061488d565b614224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161421b90615149565b60405180910390fd5b5b505050565b60606142398484600085614242565b90509392505050565b606061424d85614365565b61428c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428390615129565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516142b69190614ec8565b60006040518083038185875af1925050503d80600081146142f3576040519150601f19603f3d011682016040523d82523d6000602084013e6142f8565b606091505b5091509150811561430d57809250505061435d565b6000815111156143205780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143549190615007565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050614387816154e3565b92915050565b60008151905061439c816154e3565b92915050565b60008083601f8401126143b457600080fd5b8235905067ffffffffffffffff8111156143cd57600080fd5b6020830191508360208202830111156143e557600080fd5b9250929050565b600082601f8301126143fd57600080fd5b815161441061440b826152c6565b615299565b9150818183526020840193506020810190508385602084028201111561443557600080fd5b60005b83811015614465578161444b888261438d565b845260208401935060208301925050600181019050614438565b5050505092915050565b600082601f83011261448057600080fd5b815161449361448e826152ee565b615299565b9150818183526020840193506020810190508360005b838110156144d957815186016144bf88826145e4565b8452602084019350602083019250506001810190506144a9565b5050505092915050565b600082601f8301126144f457600080fd5b815161450761450282615316565b615299565b9150818183526020840193506020810190508385602084028201111561452c57600080fd5b60005b8381101561455c5781614542888261464d565b84526020840193506020830192505060018101905061452f565b5050505092915050565b600081519050614575816154fa565b92915050565b600082601f83011261458c57600080fd5b813561459f61459a8261533e565b615299565b915080825260208301602083018583830111156145bb57600080fd5b6145c6838284615490565b50505092915050565b6000813590506145de81615511565b92915050565b600082601f8301126145f557600080fd5b81516146086146038261536a565b615299565b9150808252602083016020830185838301111561462457600080fd5b61462f83828461549f565b50505092915050565b60008135905061464781615528565b92915050565b60008151905061465c81615528565b92915050565b60006020828403121561467457600080fd5b600061468284828501614378565b91505092915050565b60006020828403121561469d57600080fd5b60006146ab8482850161438d565b91505092915050565b600080604083850312156146c757600080fd5b60006146d585828601614378565b925050602083013567ffffffffffffffff8111156146f257600080fd5b6146fe8582860161457b565b9150509250929050565b6000806040838503121561471b57600080fd5b600061472985828601614378565b925050602061473a85828601614638565b9150509250929050565b6000806020838503121561475757600080fd5b600083013567ffffffffffffffff81111561477157600080fd5b61477d858286016143a2565b92509250509250929050565b6000806000806080858703121561479f57600080fd5b600085015167ffffffffffffffff8111156147b957600080fd5b6147c5878288016143ec565b945050602085015167ffffffffffffffff8111156147e257600080fd5b6147ee8782880161446f565b935050604085015167ffffffffffffffff81111561480b57600080fd5b614817878288016144e3565b925050606085015167ffffffffffffffff81111561483457600080fd5b614840878288016144e3565b91505092959194509250565b60006020828403121561485e57600080fd5b600082015167ffffffffffffffff81111561487857600080fd5b614884848285016144e3565b91505092915050565b60006020828403121561489f57600080fd5b60006148ad84828501614566565b91505092915050565b6000602082840312156148c857600080fd5b60006148d6848285016145cf565b91505092915050565b6000602082840312156148f157600080fd5b60006148ff84828501614638565b91505092915050565b60006020828403121561491a57600080fd5b60006149288482850161464d565b91505092915050565b60008060006060848603121561494657600080fd5b60006149548682870161464d565b93505060206149658682870161464d565b92505060406149768682870161464d565b9150509250925092565b6000806000806080858703121561499657600080fd5b60006149a48782880161464d565b94505060206149b58782880161464d565b93505060406149c68782880161464d565b92505060606149d78782880161464d565b91505092959194509250565b60006149ef83836149fb565b60208301905092915050565b614a0481615412565b82525050565b614a1381615412565b82525050565b6000614a24826153a6565b614a2e81856153d4565b9350614a3983615396565b8060005b83811015614a6a578151614a5188826149e3565b9750614a5c836153c7565b925050600181019050614a3d565b5085935050505092915050565b614a8081615424565b82525050565b6000614a91826153b1565b614a9b81856153e5565b9350614aab81856020860161549f565b614ab4816154d2565b840191505092915050565b6000614aca826153b1565b614ad481856153f6565b9350614ae481856020860161549f565b80840191505092915050565b614af98161546c565b82525050565b614b088161547e565b82525050565b6000614b19826153bc565b614b238185615401565b9350614b3381856020860161549f565b614b3c816154d2565b840191505092915050565b6000614b54600b83615401565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b6000614b94600783615401565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614bd4600b83615401565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b6000614c14601b83615401565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614c54600483615401565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614c94600e83615401565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b6000614cd4602183615401565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d3a600483615401565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614d7a601d83615401565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614dba602a83615401565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e20600983615401565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614e60603683615401565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b614ec281615462565b82525050565b6000614ed48284614abf565b915081905092915050565b6000602082019050614ef46000830184614a0a565b92915050565b6000604082019050614f0f6000830185614a0a565b614f1c6020830184614a0a565b9392505050565b600061010082019050614f39600083018b614a0a565b614f46602083018a614a0a565b614f536040830189614eb9565b614f606060830188614eb9565b614f6d6080830187614af0565b614f7a60a0830186614af0565b614f8760c0830185614a0a565b614f9460e0830184614eb9565b9998505050505050505050565b6000604082019050614fb66000830185614a0a565b614fc36020830184614eb9565b9392505050565b6000602082019050614fdf6000830184614a77565b92915050565b60006020820190508181036000830152614fff8184614a86565b905092915050565b600060208201905081810360008301526150218184614b0e565b905092915050565b6000602082019050818103600083015261504281614b47565b9050919050565b6000602082019050818103600083015261506281614b87565b9050919050565b6000602082019050818103600083015261508281614bc7565b9050919050565b600060208201905081810360008301526150a281614c07565b9050919050565b600060208201905081810360008301526150c281614c47565b9050919050565b600060208201905081810360008301526150e281614c87565b9050919050565b6000602082019050818103600083015261510281614cc7565b9050919050565b6000602082019050818103600083015261512281614d2d565b9050919050565b6000602082019050818103600083015261514281614d6d565b9050919050565b6000602082019050818103600083015261516281614dad565b9050919050565b6000602082019050818103600083015261518281614e13565b9050919050565b600060208201905081810360008301526151a281614e53565b9050919050565b60006020820190506151be6000830184614eb9565b92915050565b60006040820190506151d96000830185614eb9565b6151e66020830184614a0a565b9392505050565b60006040820190506152026000830185614eb9565b61520f6020830184614af0565b9392505050565b600060a08201905061522b6000830188614eb9565b6152386020830187614aff565b818103604083015261524a8186614a19565b90506152596060830185614a0a565b6152666080830184614eb9565b9695505050505050565b60006040820190506152856000830185614eb9565b6152926020830184614eb9565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156152bc57600080fd5b8060405250919050565b600067ffffffffffffffff8211156152dd57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561530557600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561532d57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561535557600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561538157600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061541d82615442565b9050919050565b60008115159050919050565b600061543b82615412565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061547782615462565b9050919050565b600061548982615462565b9050919050565b82818337600083830152505050565b60005b838110156154bd5780820151818401526020810190506154a2565b838111156154cc576000848401525b50505050565b6000601f19601f8301169050919050565b6154ec81615412565b81146154f757600080fd5b50565b61550381615424565b811461550e57600080fd5b50565b61551a81615430565b811461552557600080fd5b50565b61553181615462565b811461553c57600080fd5b5056fea26469706673582212207b2076aae1d9ff281b78c1c669a4dcca4a60c541909dbdd18155344588055eea64736f6c63430006070033000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000d34216f24dac965f9cc9a9762194d1cbcd58e5a100000000000000000000000095ca4584ea2007d578fa2693ccc76d930a96d165000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode
0x6080604052600436106102e45760003560e01c806373aef09911610190578063bdacb303116100dc578063d21220a711610095578063de207c7a1161006f578063de207c7a14610adb578063f77c479114610b06578063fe1f8f7a14610b31578063feb53b9d14610b5c576102e4565b8063d21220a714610a48578063d2a7098a14610a73578063d33219b414610ab0576102e4565b8063bdacb3031461094e578063c1a3d44c14610977578063c6223e26146109a2578063c65e3242146109df578063c7b9d53014610a08578063d0e30db014610a31576102e4565b80638ccdbb7011610149578063ab73e43311610123578063ab73e433146108a8578063b1f55bd4146108d1578063b58b349f146108fa578063b9c8245a14610923576102e4565b80638ccdbb701461082b57806392eefe9b14610856578063ab033ea91461087f576102e4565b806373aef099146107195780638237859414610744578063853828b61461076d578063879765831461079857806388993f22146107d55780638c7c9e0c14610800576102e4565b80632e1a7d4d1161024f57806351cff8d9116102085780635aa6e675116101e25780635aa6e6751461066d578063618c3bdc146106985780636d13582c146106c3578063722713f7146106ee576102e4565b806351cff8d9146105da57806351f3d0b81461061757806359739ec414610642576102e4565b80632e1a7d4d146104ee5780633e0dc34e146105175780633e413bee146105425780634641257d1461056d578063479119be146105845780634fe809cc146105af576102e4565b806317d7de7c116102a157806317d7de7c146103e95780631cff79cd146104145780631f1fcd51146104445780631fe4a6861461046f578063249fb9b41461049a57806326e886c6146104c3576102e4565b806301887fd8146102e95780630547104d146103145780630dfe16811461033f5780630e364fb61461036a578063115880861461039357806312d8e41b146103be575b600080fd5b3480156102f557600080fd5b506102fe610b87565b60405161030b91906151a9565b60405180910390f35b34801561032057600080fd5b50610329610b8d565b60405161033691906151a9565b60405180910390f35b34801561034b57600080fd5b50610354610c57565b6040516103619190614edf565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c9190614744565b610c7d565b005b34801561039f57600080fd5b506103a8610e54565b6040516103b591906151a9565b60405180910390f35b3480156103ca57600080fd5b506103d3610f04565b6040516103e09190614edf565b60405180910390f35b3480156103f557600080fd5b506103fe610f1c565b60405161040b9190615007565b60405180910390f35b61042e600480360381019061042991906146b4565b610f59565b60405161043b9190614fe5565b60405180910390f35b34801561045057600080fd5b506104596110ab565b6040516104669190614edf565b60405180910390f35b34801561047b57600080fd5b506104846110d1565b6040516104919190614edf565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906148df565b6110f7565b005b3480156104cf57600080fd5b506104d8611191565b6040516104e591906151a9565b60405180910390f35b3480156104fa57600080fd5b50610515600480360381019061051091906148df565b611197565b005b34801561052357600080fd5b5061052c6116fe565b60405161053991906151a9565b60405180910390f35b34801561054e57600080fd5b50610557611704565b6040516105649190614edf565b60405180910390f35b34801561057957600080fd5b5061058261172a565b005b34801561059057600080fd5b50610599612455565b6040516105a691906151a9565b60405180910390f35b3480156105bb57600080fd5b506105c461245c565b6040516105d191906151a9565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906148b6565b612462565b60405161060e91906151a9565b60405180910390f35b34801561062357600080fd5b5061062c612662565b60405161063991906151a9565b60405180910390f35b34801561064e57600080fd5b50610657612668565b60405161066491906151a9565b60405180910390f35b34801561067957600080fd5b5061068261266e565b60405161068f9190614edf565b60405180910390f35b3480156106a457600080fd5b506106ad612694565b6040516106ba9190614edf565b60405180910390f35b3480156106cf57600080fd5b506106d86126ba565b6040516106e59190614edf565b60405180910390f35b3480156106fa57600080fd5b506107036126e0565b60405161071091906151a9565b60405180910390f35b34801561072557600080fd5b5061072e612708565b60405161073b9190614edf565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906148df565b612720565b005b34801561077957600080fd5b506107826127ba565b60405161078f91906151a9565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614662565b612a93565b6040516107cc9190614fca565b60405180910390f35b3480156107e157600080fd5b506107ea612ab3565b6040516107f791906151a9565b60405180910390f35b34801561080c57600080fd5b50610815612ab9565b6040516108229190614edf565b60405180910390f35b34801561083757600080fd5b50610840612adf565b60405161084d91906151a9565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614662565b612ae5565b005b34801561088b57600080fd5b506108a660048036038101906108a19190614662565b612bb9565b005b3480156108b457600080fd5b506108cf60048036038101906108ca91906148df565b612c8d565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614744565b612d27565b005b34801561090657600080fd5b50610921600480360381019061091c91906148df565b612eaa565b005b34801561092f57600080fd5b50610938612f44565b60405161094591906151a9565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614662565b612f4a565b005b34801561098357600080fd5b5061098c61301e565b60405161099991906151a9565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906148df565b6130d0565b6040516109d691906151a9565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906148df565b6133ad565b005b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614662565b613447565b005b348015610a3d57600080fd5b50610a4661351b565b005b348015610a5457600080fd5b50610a5d61371d565b604051610a6a9190614edf565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a959190614708565b613743565b604051610aa79190614edf565b60405180910390f35b348015610abc57600080fd5b50610ac561378e565b604051610ad29190614edf565b60405180910390f35b348015610ae757600080fd5b50610af06137b4565b604051610afd9190614edf565b60405180910390f35b348015610b1257600080fd5b50610b1b6137da565b604051610b289190614edf565b60405180910390f35b348015610b3d57600080fd5b50610b46613800565b604051610b5391906151a9565b60405180910390f35b348015610b6857600080fd5b50610b71613807565b604051610b7e91906151a9565b60405180910390f35b60115481565b6000606073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663ffcd4263600f54306040518363ffffffff1660e01b8152600401610be29291906151c4565b60006040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c379190614789565b935050505080600081518110610c4957fe5b602002602001015191505090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d265750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610d7a5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db0906150c9565b60405180910390fd5b60008090505b82829050811015610e4f576001600a6000858585818110610ddc57fe5b9050602002016020810190610df19190614662565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610dbf565b505050565b60008073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff166393f1a40b600f54306040518363ffffffff1660e01b8152600401610ea89291906151c4565b60806040518083038186803b158015610ec057600080fd5b505afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190614980565b50505090508091505090565b73acc15dc74880c9944775448304b263d191c6077f81565b60606040518060400160405280601681526020017f5374726174656779476c696e74557364634574684c7000000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290615169565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290615049565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461109b576110a2565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90615169565b60405180910390fd5b8060008190555050565b61271081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e90615069565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112849190614edf565b60206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614908565b905081811015611311576112f96112f4828461380d90919063ffffffff16565b613857565b915061130e81836138e490919063ffffffff16565b91505b600061133d620186a061132f6003548661393990919063ffffffff16565b6139a990919063ffffffff16565b905061142b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e2919061468b565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b6000611457620186a06114496002548761393990919063ffffffff16565b6139a990919063ffffffff16565b9050611545600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c457600080fd5b505afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc919061468b565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016115c49190614edf565b60206040518083038186803b1580156115dc57600080fd5b505afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611614919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90615109565b60405180910390fd5b6116f7816116af846116a1878a61380d90919063ffffffff16565b61380d90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5050505050565b600f5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600f5460006040518363ffffffff1660e01b815260040161177c9291906151ed565b600060405180830381600087803b15801561179657600080fd5b505af11580156117aa573d6000803e3d6000fd5b505050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161180b9190614edf565b60206040518083038186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b9190614908565b90506000811115611c81576000611891612710611883600e548561393990919063ffffffff16565b6139a990919063ffffffff16565b905061197f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611936919061468b565b82600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b611992818361380d90919063ffffffff16565b915060006119aa6002846139a990919063ffffffff16565b905060006119c1828561380d90919063ffffffff16565b9050600160106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611b2057611b1f60106000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b1457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611aca575b505050505083613a79565b5b600160106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115611c7d57611c7c60106000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c27575b505050505082613a79565b5b5050505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cde9190614edf565b60206040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2e9190614908565b90506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d8d9190614edf565b60206040518083038186803b158015611da557600080fd5b505afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614908565b9050600082118015611def5750600081115b1561244857611e64600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611ed3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611f43600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b611fb2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030603c42016040518963ffffffff1660e01b8152600401612063989796959493929190614f23565b606060405180830381600087803b15801561207d57600080fd5b505af1158015612091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b59190614931565b505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561215e57600080fd5b505afa158015612172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612196919061468b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121f19190614edf565b60206040518083038186803b15801561220957600080fd5b505afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122419190614908565b6040518363ffffffff1660e01b815260040161225e929190614fa1565b602060405180830381600087803b15801561227857600080fd5b505af115801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b0919061488d565b50612447600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561231c57600080fd5b505afa158015612330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612354919061468b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123af9190614edf565b60206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190614908565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5b612450613da8565b505050565b620186a081565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90615069565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906150a9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125be9190614edf565b60206040518083038186803b1580156125d657600080fd5b505afa1580156125ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260e9190614908565b905061265d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b919050565b60035481565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006127036126ed610e54565b6126f561301e565b6138e490919063ffffffff16565b905090565b73c6ca172fc8bdb803c5e12731109744fb0200587b81565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a790615169565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615069565b60405180910390fd5b612854614094565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128af9190614edf565b60206040518083038186803b1580156128c757600080fd5b505afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff9190614908565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016129809190614edf565b60206040518083038186803b15801561299857600080fd5b505afa1580156129ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d0919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990615109565b60405180910390fd5b612a8f8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60015481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6c90615169565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090615029565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1490615169565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612dd05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e06906150c9565b60405180910390fd5b60008090505b82829050811015612ea5576000600a6000858585818110612e3257fe5b9050602002016020810190612e479190614662565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612e15565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3190615169565b60405180910390fd5b80600e8190555050565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190615169565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161307b9190614edf565b60206040518083038186803b15801561309357600080fd5b505afa1580156130a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cb9190614908565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315990615069565b60405180910390fd5b61316b82613857565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131c79190614edf565b60206040518083038186803b1580156131df57600080fd5b505afa1580156131f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132179190614908565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016132989190614edf565b60206040518083038186803b1580156132b057600080fd5b505afa1580156132c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e8919061468b565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561335a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335190615109565b60405180910390fd5b6133a78183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b50919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343490615169565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615029565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135789190614edf565b60206040518083038186803b15801561359057600080fd5b505afa1580156135a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c89190614908565b9050600081111561371a5761363573c6ca172fc8bdb803c5e12731109744fb0200587b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b61369673c6ca172fc8bdb803c5e12731109744fb0200587b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b73c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600f54836040518363ffffffff1660e01b81526004016136e7929190615270565b600060405180830381600087803b15801561370157600080fd5b505af1158015613715573d6000803e3d6000fd5b505050505b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6010602052816000526040600020818154811061375c57fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b61271081565b600061384f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140a7565b905092915050565b600073c6ca172fc8bdb803c5e12731109744fb0200587b73ffffffffffffffffffffffffffffffffffffffff1663441a3e70600f54846040518363ffffffff1660e01b81526004016138aa929190615270565b600060405180830381600087803b1580156138c457600080fd5b505af11580156138d8573d6000803e3d6000fd5b50505050819050919050565b60008082840190508381101561392f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392690615089565b60405180910390fd5b8091505092915050565b60008083141561394c57600090506139a3565b600082840290508284828161395d57fe5b041461399e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613995906150e9565b60405180910390fd5b809150505b92915050565b60006139eb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614102565b905092915050565b613a748363a9059cbb60e01b8484604051602401613a12929190614fa1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614163565b505050565b600073ffffffffffffffffffffffffffffffffffffffff1682600181518110613a9e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613ac757600080fd5b613b29600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600084600081518110613afc57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b613b8a600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168284600081518110613b5d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16613c4a9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398260018530426040518663ffffffff1660e01b8152600401613bee959493929190615216565b600060405180830381600087803b158015613c0857600080fd5b505af1158015613c1c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613c45919061484c565b505050565b6000811480613ce3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613c91929190614efa565b60206040518083038186803b158015613ca957600080fd5b505afa158015613cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce19190614908565b145b613d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1990615189565b60405180910390fd5b613da38363095ea7b360e01b8484604051602401613d41929190614fa1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614163565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e059190614edf565b60206040518083038186803b158015613e1d57600080fd5b505afa158015613e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e559190614908565b9050600081111561409157613f74600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015613ecb57600080fd5b505afa158015613edf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f03919061468b565b613f2c612710613f1e6000548661393990919063ffffffff16565b6139a990919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b614088600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015613fdf57600080fd5b505afa158015613ff3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614017919061468b565b6140406127106140326001548661393990919063ffffffff16565b6139a990919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139f39092919063ffffffff16565b61409061351b565b5b50565b6140a461409f610e54565b613857565b50565b60008383111582906140ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e69190615007565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290614149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141409190615007565b60405180910390fd5b50600083858161415557fe5b049050809150509392505050565b60606141c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661422a9092919063ffffffff16565b905060008151111561422557808060200190518101906141e5919061488d565b614224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161421b90615149565b60405180910390fd5b5b505050565b60606142398484600085614242565b90509392505050565b606061424d85614365565b61428c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428390615129565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516142b69190614ec8565b60006040518083038185875af1925050503d80600081146142f3576040519150601f19603f3d011682016040523d82523d6000602084013e6142f8565b606091505b5091509150811561430d57809250505061435d565b6000815111156143205780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143549190615007565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050614387816154e3565b92915050565b60008151905061439c816154e3565b92915050565b60008083601f8401126143b457600080fd5b8235905067ffffffffffffffff8111156143cd57600080fd5b6020830191508360208202830111156143e557600080fd5b9250929050565b600082601f8301126143fd57600080fd5b815161441061440b826152c6565b615299565b9150818183526020840193506020810190508385602084028201111561443557600080fd5b60005b83811015614465578161444b888261438d565b845260208401935060208301925050600181019050614438565b5050505092915050565b600082601f83011261448057600080fd5b815161449361448e826152ee565b615299565b9150818183526020840193506020810190508360005b838110156144d957815186016144bf88826145e4565b8452602084019350602083019250506001810190506144a9565b5050505092915050565b600082601f8301126144f457600080fd5b815161450761450282615316565b615299565b9150818183526020840193506020810190508385602084028201111561452c57600080fd5b60005b8381101561455c5781614542888261464d565b84526020840193506020830192505060018101905061452f565b5050505092915050565b600081519050614575816154fa565b92915050565b600082601f83011261458c57600080fd5b813561459f61459a8261533e565b615299565b915080825260208301602083018583830111156145bb57600080fd5b6145c6838284615490565b50505092915050565b6000813590506145de81615511565b92915050565b600082601f8301126145f557600080fd5b81516146086146038261536a565b615299565b9150808252602083016020830185838301111561462457600080fd5b61462f83828461549f565b50505092915050565b60008135905061464781615528565b92915050565b60008151905061465c81615528565b92915050565b60006020828403121561467457600080fd5b600061468284828501614378565b91505092915050565b60006020828403121561469d57600080fd5b60006146ab8482850161438d565b91505092915050565b600080604083850312156146c757600080fd5b60006146d585828601614378565b925050602083013567ffffffffffffffff8111156146f257600080fd5b6146fe8582860161457b565b9150509250929050565b6000806040838503121561471b57600080fd5b600061472985828601614378565b925050602061473a85828601614638565b9150509250929050565b6000806020838503121561475757600080fd5b600083013567ffffffffffffffff81111561477157600080fd5b61477d858286016143a2565b92509250509250929050565b6000806000806080858703121561479f57600080fd5b600085015167ffffffffffffffff8111156147b957600080fd5b6147c5878288016143ec565b945050602085015167ffffffffffffffff8111156147e257600080fd5b6147ee8782880161446f565b935050604085015167ffffffffffffffff81111561480b57600080fd5b614817878288016144e3565b925050606085015167ffffffffffffffff81111561483457600080fd5b614840878288016144e3565b91505092959194509250565b60006020828403121561485e57600080fd5b600082015167ffffffffffffffff81111561487857600080fd5b614884848285016144e3565b91505092915050565b60006020828403121561489f57600080fd5b60006148ad84828501614566565b91505092915050565b6000602082840312156148c857600080fd5b60006148d6848285016145cf565b91505092915050565b6000602082840312156148f157600080fd5b60006148ff84828501614638565b91505092915050565b60006020828403121561491a57600080fd5b60006149288482850161464d565b91505092915050565b60008060006060848603121561494657600080fd5b60006149548682870161464d565b93505060206149658682870161464d565b92505060406149768682870161464d565b9150509250925092565b6000806000806080858703121561499657600080fd5b60006149a48782880161464d565b94505060206149b58782880161464d565b93505060406149c68782880161464d565b92505060606149d78782880161464d565b91505092959194509250565b60006149ef83836149fb565b60208301905092915050565b614a0481615412565b82525050565b614a1381615412565b82525050565b6000614a24826153a6565b614a2e81856153d4565b9350614a3983615396565b8060005b83811015614a6a578151614a5188826149e3565b9750614a5c836153c7565b925050600181019050614a3d565b5085935050505092915050565b614a8081615424565b82525050565b6000614a91826153b1565b614a9b81856153e5565b9350614aab81856020860161549f565b614ab4816154d2565b840191505092915050565b6000614aca826153b1565b614ad481856153f6565b9350614ae481856020860161549f565b80840191505092915050565b614af98161546c565b82525050565b614b088161547e565b82525050565b6000614b19826153bc565b614b238185615401565b9350614b3381856020860161549f565b614b3c816154d2565b840191505092915050565b6000614b54600b83615401565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b6000614b94600783615401565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614bd4600b83615401565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b6000614c14601b83615401565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614c54600483615401565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614c94600e83615401565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b6000614cd4602183615401565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d3a600483615401565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614d7a601d83615401565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000614dba602a83615401565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e20600983615401565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614e60603683615401565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b614ec281615462565b82525050565b6000614ed48284614abf565b915081905092915050565b6000602082019050614ef46000830184614a0a565b92915050565b6000604082019050614f0f6000830185614a0a565b614f1c6020830184614a0a565b9392505050565b600061010082019050614f39600083018b614a0a565b614f46602083018a614a0a565b614f536040830189614eb9565b614f606060830188614eb9565b614f6d6080830187614af0565b614f7a60a0830186614af0565b614f8760c0830185614a0a565b614f9460e0830184614eb9565b9998505050505050505050565b6000604082019050614fb66000830185614a0a565b614fc36020830184614eb9565b9392505050565b6000602082019050614fdf6000830184614a77565b92915050565b60006020820190508181036000830152614fff8184614a86565b905092915050565b600060208201905081810360008301526150218184614b0e565b905092915050565b6000602082019050818103600083015261504281614b47565b9050919050565b6000602082019050818103600083015261506281614b87565b9050919050565b6000602082019050818103600083015261508281614bc7565b9050919050565b600060208201905081810360008301526150a281614c07565b9050919050565b600060208201905081810360008301526150c281614c47565b9050919050565b600060208201905081810360008301526150e281614c87565b9050919050565b6000602082019050818103600083015261510281614cc7565b9050919050565b6000602082019050818103600083015261512281614d2d565b9050919050565b6000602082019050818103600083015261514281614d6d565b9050919050565b6000602082019050818103600083015261516281614dad565b9050919050565b6000602082019050818103600083015261518281614e13565b9050919050565b600060208201905081810360008301526151a281614e53565b9050919050565b60006020820190506151be6000830184614eb9565b92915050565b60006040820190506151d96000830185614eb9565b6151e66020830184614a0a565b9392505050565b60006040820190506152026000830185614eb9565b61520f6020830184614af0565b9392505050565b600060a08201905061522b6000830188614eb9565b6152386020830187614aff565b818103604083015261524a8186614a19565b90506152596060830185614a0a565b6152666080830184614eb9565b9695505050505050565b60006040820190506152856000830185614eb9565b6152926020830184614eb9565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156152bc57600080fd5b8060405250919050565b600067ffffffffffffffff8211156152dd57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561530557600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561532d57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561535557600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561538157600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061541d82615442565b9050919050565b60008115159050919050565b600061543b82615412565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061547782615462565b9050919050565b600061548982615462565b9050919050565b82818337600083830152505050565b60005b838110156154bd5780820151818401526020810190506154a2565b838111156154cc576000848401525b50505050565b6000601f19601f8301169050919050565b6154ec81615412565b81146154f757600080fd5b50565b61550381615424565b811461550e57600080fd5b50565b61551a81615430565b811461552557600080fd5b50565b61553181615462565b811461553c57600080fd5b5056fea26469706673582212207b2076aae1d9ff281b78c1c669a4dcca4a60c541909dbdd18155344588055eea64736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000d34216f24dac965f9cc9a9762194d1cbcd58e5a100000000000000000000000095ca4584ea2007d578fa2693ccc76d930a96d165000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
-----Decoded View---------------
Arg [0] : _governance (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [1] : _strategist (address): 0xD34216F24DaC965F9CC9a9762194d1CBcD58e5a1
Arg [2] : _controller (address): 0x95ca4584eA2007D578fa2693CCC76D930a96d165
Arg [3] : _timelock (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [1] : 000000000000000000000000d34216f24dac965f9cc9a9762194d1cbcd58e5a1
Arg [2] : 00000000000000000000000095ca4584ea2007d578fa2693ccc76d930a96d165
Arg [3] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode Sourcemap
57699:971:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;57762:34:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57762:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;54538:233;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54538:233:0;;;:::i;:::-;;;;;;;;;;;;;;;;53521:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53521:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;44378:340;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44378:340:0;;;;;;;;;;;;;;;;:::i;:::-;;54310:220;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54310:220:0;;;:::i;:::-;;;;;;;;;;;;;;;;42793:74;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42793:74:0;;;:::i;:::-;;;;;;;;;;;;;;;;58551:116;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58551:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;49281:1053;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42767:19;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42767:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;42962:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42962:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;45622:213;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45622:213:0;;;;;;;;;;;;;;;;:::i;:::-;;42294:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42294:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;46998:1022;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46998:1022:0;;;;;;;;;;;;;;;;:::i;:::-;;53709:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53709:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;57907:64;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57907:64:0;;;:::i;:::-;;;;;;;;;;;;;;;;55520:2036;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55520:2036:0;;;:::i;:::-;;42690:53;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42690:53:0;;;:::i;:::-;;;;;;;;;;;;;;;;42400:49;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42400:49:0;;;:::i;:::-;;;;;;;;;;;;;;;;46633:289;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46633:289:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42644:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42644:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;42246:41;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42246:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;42898:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42898:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;53354:65;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53354:65:0;;;:::i;:::-;;;;;;;;;;;;;;;;43038:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43038:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;44153:113;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44153:113:0;;;:::i;:::-;;;;;;;;;;;;;;;;53426:86;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53426:86:0;;;:::i;:::-;;;;;;;;;;;;;;;;45232:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45232:195:0;;;;;;;;;;;;;;;;:::i;:::-;;48588:430;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48588:430:0;;;:::i;:::-;;;;;;;;;;;;;;;;43073:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43073:42:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42357:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42357:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;57978:63;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57978:63:0;;;:::i;:::-;;;;;;;;;;;;;;;;42534:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42534:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;46320:151;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46320:151:0;;;;;;;;;;;;;;;;:::i;:::-;;46006:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46006:155:0;;;;;;;;;;;;;;;;:::i;:::-;;45033:191;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45033:191:0;;;;;;;;;;;;;;;;:::i;:::-;;44726:299;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44726:299:0;;;;;;;;;;;;;;;;:::i;:::-;;55329:147;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55329:147:0;;;;;;;;;;;;;;;;:::i;:::-;;53618:31;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53618:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;46169:143;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46169:143:0;;;;;;;;;;;;;;;;:::i;:::-;;43956:118;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43956:118:0;;;:::i;:::-;;;;;;;;;;;;;;;;48084:428;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48084:428:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;45435:179;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45435:179:0;;;;;;;;;;;;;;;;:::i;:::-;;45843:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45843:155:0;;;;;;;;;;;;;;;;:::i;:::-;;54807:309;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54807:309:0;;;:::i;:::-;;53549:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53549:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;53737:47;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53737:47:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42994:23;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42994:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;57829:71;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57829:71:0;;;:::i;:::-;;;;;;;;;;;;;;;;42930:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42930:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;42581:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42581:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;53656:44;;5:9:-1;2:2;;;27:1;24;17:12;2:2;53656:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;57762:34;;;;:::o;54538:233::-;54587:7;54614:24;53470:42;54642:33;;;54690:6;;54719:4;54642:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54642:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54642:93:0;;;;;;39:16:-1;36:1;17:17;2:54;54642:93:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;54642:93:0;;;;;;;;;54607:128;;;;;54753:7;54761:1;54753:10;;;;;;;;;;;;;;54746:17;;;54538:233;:::o;53521:21::-;;;;;;;;;;;;;:::o;44378:340::-;44481:10;;;;;;;;;;;44467:24;;:10;:24;;;:66;;;;44523:10;;;;;;;;;;;44509:24;;:10;:24;;;44467:66;:92;;;;44537:10;:22;44548:10;44537:22;;;;;;;;;;;;;;;;;;;;;;;;;44467:92;44459:119;;;;;;;;;;;;;;;;;;;;;;44609:6;44618:1;44609:10;;44604:107;44625:11;;:18;;44621:1;:22;44604:107;;;44695:4;44666:10;:26;44677:11;;44689:1;44677:14;;;;;;;;;;;;;;;;;;;;;;44666:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;44645:4;;;;;;;44604:107;;;;44378:340;;:::o;54310:220::-;54365:7;54386:14;53470:42;54410:28;;;54453:6;;54482:4;54410:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54410:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54410:88:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;54410:88:0;;;;;;;;;54385:113;;;;;54516:6;54509:13;;;54310:220;:::o;42793:74::-;42825:42;42793:74;:::o;58551:116::-;58602:13;58628:31;;;;;;;;;;;;;;;;;;;58551:116;:::o;49281:1053::-;49386:21;49447:8;;;;;;;;;;;49433:22;;:10;:22;;;49425:44;;;;;;;;;;;;;;;;;;;;;;49507:1;49488:21;;:7;:21;;;;49480:41;;;;;;;;;;;;;;;;;;;;;;49798:1;49778;49753:5;49747:12;49723:4;49716:5;49712:16;49686:7;49662:4;49655:5;49651:16;49620:194;49840:16;49890:4;49884:11;49872:23;;50007:4;50003:9;49996:4;49989;49983;49979:15;49975:26;49971:42;49961:8;49957:57;49934:4;49909:120;50060:4;50050:8;50043:22;50118:4;50115:1;50108:4;50098:8;50094:19;50079:44;50153:9;50146:17;50186:1;50181:135;;;;50139:177;;50181:135;50292:4;50285;50275:8;50271:19;50264:33;50139:177;;49588:739;;;;;;:::o;42767:19::-;;;;;;;;;;;;;:::o;42962:25::-;;;;;;;;;;;;;:::o;45622:213::-;45746:8;;;;;;;;;;;45732:22;;:10;:22;;;45724:44;;;;;;;;;;;;;;;;;;;;;;45804:23;45779:22;:48;;;;45622:213;:::o;42294:54::-;42343:5;42294:54;:::o;46998:1022::-;47075:10;;;;;;;;;;;47061:24;;:10;:24;;;47053:48;;;;;;;;;;;;;;;;;;;;;;47112:16;47138:4;;;;;;;;;;;47131:22;;;47162:4;47131:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47131:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47131:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47131:37:0;;;;;;;;;47112:56;;47194:7;47183:8;:18;47179:143;;;47228:36;47242:21;47254:8;47242:7;:11;;:21;;;;:::i;:::-;47228:13;:36::i;:::-;47218:46;;47289:21;47301:8;47289:7;:11;;:21;;;;:::i;:::-;47279:31;;47179:143;47334:15;47352:83;42737:6;47352:33;47364:20;;47352:7;:11;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;47334:101;;47446:69;47484:10;;;;;;;;;;;47472:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47472:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47472:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47472:33:0;;;;;;;;;47507:7;47453:4;;;;;;;;;;;47446:25;;;;:69;;;;;:::i;:::-;47528:20;47551:85;42629:6;47551:34;47563:21;;47551:7;:11;;:34;;;;:::i;:::-;:38;;:85;;;;:::i;:::-;47528:108;;47647:112;47699:10;;;;;;;;;;;47687:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47687:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47687:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47687:34:0;;;;;;;;;47736:12;47654:4;;;;;;;;;;;47647:25;;;;:112;;;;;:::i;:::-;47772:12;47799:10;;;;;;;;;;;47787:28;;;47824:4;;;;;;;;;;;47787:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47787:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47787:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47787:43:0;;;;;;;;;47772:58;;47865:1;47849:18;;:4;:18;;;;47841:35;;;;;;;;;;;;;;;;;;;;;;47941:71;47967:4;47973:38;47998:12;47973:20;47985:7;47973;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;47948:4;;;;;;;;;;;47941:25;;;;:71;;;;;:::i;:::-;46998:1022;;;;;:::o;53709:21::-;;;;:::o;57907:64::-;;;;;;;;;;;;;:::o;55520:2036::-;53470:42;55600:27;;;55628:6;;55636:1;55600:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55600:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55600:38:0;;;;55649:14;55673:5;;;;;;;;;;;55666:23;;;55698:4;55666:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55666:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55666:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;55666:38:0;;;;;;;;;55649:55;;55730:1;55721:6;:10;55717:662;;;55748:18;55769:39;53695:5;55769:21;55780:9;;55769:6;:10;;:21;;;;:::i;:::-;:25;;:39;;;;:::i;:::-;55748:60;;55823:123;55880:10;;;;;;;;;;;55868:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55868:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55868:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;55868:34:0;;;;;;;;;55921:10;55830:5;;;;;;;;;;;55823:26;;;;:123;;;;;:::i;:::-;55970:22;55981:10;55970:6;:10;;:22;;;;:::i;:::-;55961:31;;56007:16;56026:13;56037:1;56026:6;:10;;:13;;;;:::i;:::-;56007:32;;56054:16;56073:20;56084:8;56073:6;:10;;:20;;;;:::i;:::-;56054:39;;56142:1;56114:10;:18;56125:6;;;;;;;;;;;56114:18;;;;;;;;;;;;;;;:25;;;;:29;56110:122;;;56164:52;56187:10;:18;56198:6;;;;;;;;;;;56187:18;;;;;;;;;;;;;;;56164:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56207:8;56164:22;:52::i;:::-;56110:122;56278:1;56250:10;:18;56261:6;;;;;;;;;;;56250:18;;;;;;;;;;;;;;;:25;;;;:29;56246:122;;;56300:52;56323:10;:18;56334:6;;;;;;;;;;;56323:18;;;;;;;;;;;;;;;56300:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56343:8;56300:22;:52::i;:::-;56246:122;55717:662;;;;56439:15;56464:6;;;;;;;;;;;56457:24;;;56490:4;56457:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56457:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56457:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56457:39:0;;;;;;;;;56439:57;;56507:15;56532:6;;;;;;;;;;;56525:24;;;56558:4;56525:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56525:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56525:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56525:39:0;;;;;;;;;56507:57;;56591:1;56581:7;:11;:26;;;;;56606:1;56596:7;:11;56581:26;56577:921;;;56624:42;56651:11;;;;;;;;;;;56664:1;56631:6;;;;;;;;;;;56624:26;;;;:42;;;;;:::i;:::-;56681:48;56708:11;;;;;;;;;;;56721:7;56688:6;;;;;;;;;;;56681:26;;;;:48;;;;;:::i;:::-;56744:42;56771:11;;;;;;;;;;;56784:1;56751:6;;;;;;;;;;;56744:26;;;;:42;;;;;:::i;:::-;56801:48;56828:11;;;;;;;;;;;56841:7;56808:6;;;;;;;;;;;56801:26;;;;:48;;;;;:::i;:::-;56882:11;;;;;;;;;;;56866:41;;;56926:6;;;;;;;;;;;56951;;;;;;;;;;;56976:7;57002;57028:1;57048;57076:4;57106:2;57100:3;:8;56866:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56866:257:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56866:257:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56866:257:0;;;;;;;;;;;;57176:6;;;;;;;;;;;57169:23;;;57223:10;;;;;;;;;;;57211:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57211:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57211:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57211:34:0;;;;;;;;;57271:6;;;;;;;;;;;57264:24;;;57297:4;57264:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57264:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57264:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57264:39:0;;;;;;;;;57169:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57169:149:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57169:149:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57169:149:0;;;;;;;;;;57333:153;57391:10;;;;;;;;;;;57379:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57379:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57379:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57379:34:0;;;;;;;;;57439:6;;;;;;;;;;;57432:24;;;57465:4;57432:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57432:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57432:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57432:39:0;;;;;;;;;57340:6;;;;;;;;;;;57333:27;;;;:153;;;;;:::i;:::-;56577:921;57510:38;:36;:38::i;:::-;55520:2036;;;:::o;42690:53::-;42737:6;42690:53;:::o;42400:49::-;42444:5;42400:49;:::o;46633:289::-;46684:15;46734:10;;;;;;;;;;;46720:24;;:10;:24;;;46712:48;;;;;;;;;;;;;;;;;;;;;;46795:6;46779:23;;:4;;;;;;;;;;;:23;;;;46771:40;;;;;;;;;;;;;;;;;;;;;;46832:6;:16;;;46857:4;46832:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46832:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46832:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;46832:31:0;;;;;;;;;46822:41;;46874:40;46894:10;;;;;;;;;;;46906:7;46874:6;:19;;;;:40;;;;;:::i;:::-;46633:289;;;:::o;42644:39::-;;;;:::o;42246:41::-;;;;:::o;42898:25::-;;;;;;;;;;;;;:::o;53354:65::-;;;;;;;;;;;;;:::o;43038:26::-;;;;;;;;;;;;;:::o;44153:113::-;44195:7;44222:36;44242:15;:13;:15::i;:::-;44222;:13;:15::i;:::-;:19;;:36;;;;:::i;:::-;44215:43;;44153:113;:::o;53426:86::-;53470:42;53426:86;:::o;45232:195::-;45340:8;;;;;;;;;;;45326:22;;:10;:22;;;45318:44;;;;;;;;;;;;;;;;;;;;;;45397:22;45373:21;:46;;;;45232:195;:::o;48588:430::-;48629:15;48679:10;;;;;;;;;;;48665:24;;:10;:24;;;48657:48;;;;;;;;;;;;;;;;;;;;;;48716:14;:12;:14::i;:::-;48760:4;;;;;;;;;;;48753:22;;;48784:4;48753:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48753:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48753:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48753:37:0;;;;;;;;;48743:47;;48803:12;48830:10;;;;;;;;;;;48818:28;;;48855:4;;;;;;;;;;;48818:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48818:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48818:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48818:43:0;;;;;;;;;48803:58;;48896:1;48880:18;;:4;:18;;;;48872:35;;;;;;;;;;;;;;;;;;;;;;48970:40;48996:4;49002:7;48977:4;;;;;;;;;;;48970:25;;;;:40;;;;;:::i;:::-;48588:430;;:::o;43073:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;42357:36::-;;;;:::o;57978:63::-;;;;;;;;;;;;;:::o;42534:40::-;;;;:::o;46320:151::-;46406:8;;;;;;;;;;;46392:22;;:10;:22;;;46384:44;;;;;;;;;;;;;;;;;;;;;;46452:11;46439:10;;:24;;;;;;;;;;;;;;;;;;46320:151;:::o;46006:155::-;46092:10;;;;;;;;;;;46078:24;;:10;:24;;;46070:48;;;;;;;;;;;;;;;;;;;;;;46142:11;46129:10;;:24;;;;;;;;;;;;;;;;;;46006:155;:::o;45033:191::-;45139:8;;;;;;;;;;;45125:22;;:10;:22;;;45117:44;;;;;;;;;;;;;;;;;;;;;;45195:21;45172:20;:44;;;;45033:191;:::o;44726:299::-;44826:10;;;;;;;;;;;44812:24;;:10;:24;;;:66;;;;44868:10;;;;;;;;;;;44854:24;;:10;:24;;;44812:66;44804:93;;;;;;;;;;;;;;;;;;;;;;44915:6;44924:1;44915:10;;44910:108;44931:11;;:18;;44927:1;:22;44910:108;;;45001:5;44972:10;:26;44983:11;;44995:1;44983:14;;;;;;;;;;;;;;;;;;;;;;44972:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44951:4;;;;;;;44910:108;;;;44726:299;;:::o;55329:147::-;55413:8;;;;;;;;;;;55399:22;;:10;:22;;;55391:44;;;;;;;;;;;;;;;;;;;;;;55458:10;55446:9;:22;;;;55329:147;:::o;53618:31::-;;;;:::o;46169:143::-;46251:8;;;;;;;;;;;46237:22;;:10;:22;;;46229:44;;;;;;;;;;;;;;;;;;;;;;46295:9;46284:8;;:20;;;;;;;;;;;;;;;;;;46169:143;:::o;43956:118::-;44002:7;44036:4;;;;;;;;;;;44029:22;;;44060:4;44029:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44029:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44029:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;44029:37:0;;;;;;;;;44022:44;;43956:118;:::o;48084:428::-;48162:15;48217:10;;;;;;;;;;;48203:24;;:10;:24;;;48195:48;;;;;;;;;;;;;;;;;;;;;;48254:22;48268:7;48254:13;:22::i;:::-;;48306:4;;;;;;;;;;;48299:22;;;48330:4;48299:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48299:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48299:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48299:37:0;;;;;;;;;48289:47;;48349:12;48376:10;;;;;;;;;;;48364:28;;;48401:4;;;;;;;;;;;48364:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48364:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48364:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48364:43:0;;;;;;;;;48349:58;;48442:1;48426:18;;:4;:18;;;;48418:35;;;;;;;;;;;;;;;;;;;;;;48464:40;48490:4;48496:7;48471:4;;;;;;;;;;;48464:25;;;;:40;;;;;:::i;:::-;48084:428;;;;:::o;45435:179::-;45535:8;;;;;;;;;;;45521:22;;:10;:22;;;45513:44;;;;;;;;;;;;;;;;;;;;;;45588:18;45568:17;:38;;;;45435:179;:::o;45843:155::-;45929:10;;;;;;;;;;;45915:24;;:10;:24;;;45907:48;;;;;;;;;;;;;;;;;;;;;;45979:11;45966:10;;:24;;;;;;;;;;;;;;;;;;45843:155;:::o;54807:309::-;54853:13;54876:4;;;;;;;;;;;54869:22;;;54900:4;54869:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54869:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54869:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;54869:37:0;;;;;;;;;54853:53;;54929:1;54921:5;:9;54917:192;;;54947:37;53470:42;54982:1;54954:4;;;;;;;;;;;54947:24;;;;:37;;;;;:::i;:::-;54999:41;53470:42;55034:5;55006:4;;;;;;;;;;;54999:24;;;;:41;;;;;:::i;:::-;53470:42;55055:27;;;55083:6;;55091:5;55055:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55055:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55055:42:0;;;;54917:192;54807:309;:::o;53549:21::-;;;;;;;;;;;;;:::o;53737:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42994:23::-;;;;;;;;;;;;;:::o;57829:71::-;;;;;;;;;;;;;:::o;42930:25::-;;;;;;;;;;;;;:::o;42581:54::-;42629:6;42581:54;:::o;53656:44::-;53695:5;53656:44;:::o;1463:136::-;1521:7;1548:43;1552:1;1555;1548:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1541:50;;1463:136;;;;:::o;55124:197::-;55218:7;53470:42;55243:28;;;55272:6;;55280:7;55243:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55243:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55243:45:0;;;;55306:7;55299:14;;55124:197;;;:::o;999:181::-;1057:7;1077:9;1093:1;1089;:5;1077:17;;1118:1;1113;:6;;1105:46;;;;;;;;;;;;;;;;;;;;;;1171:1;1164:8;;;999:181;;;;:::o;2353:471::-;2411:7;2661:1;2656;:6;2652:47;;;2686:1;2679:8;;;;2652:47;2711:9;2727:1;2723;:5;2711:17;;2756:1;2751;2747;:5;;;;;;:10;2739:56;;;;;;;;;;;;;;;;;;;;;;2815:1;2808:8;;;2353:471;;;;;:::o;3300:132::-;3358:7;3385:39;3389:1;3392;3385:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3378:46;;3300:132;;;;:::o;26859:177::-;26942:86;26962:5;26992:23;;;27017:2;27021:5;26969:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26969:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;26969:58:0;26942:19;:86::i;:::-;26859:177;;;:::o;51181:461::-;51325:1;51306:21;;:4;51311:1;51306:7;;;;;;;;;;;;;;:21;;;;51298:30;;12:1:-1;9;2:12;51298:30:0;51341:43;51369:11;;;;;;;;;;;51382:1;51348:4;51353:1;51348:7;;;;;;;;;;;;;;51341:27;;;;:43;;;;;:::i;:::-;51395:49;51423:11;;;;;;;;;;;51436:7;51402:4;51407:1;51402:7;;;;;;;;;;;;;;51395:27;;;;:49;;;;;:::i;:::-;51471:11;;;;;;;;;;;51455:53;;;51523:7;51545:1;51561:4;51588;51608:15;51455:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51455:179:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51455:179:0;;;;;;39:16:-1;36:1;17:17;2:54;51455:179:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51455:179:0;;;;;;;;;;51181:461;;:::o;27518:622::-;27897:1;27888:5;:10;27887:62;;;;27947:1;27904:5;:15;;;27928:4;27935:7;27904:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27904:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27904:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27904:39:0;;;;;;;;;:44;27887:62;27879:152;;;;;;;;;;;;;;;;;;;;;;28042:90;28062:5;28092:22;;;28116:7;28125:5;28069:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28069:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;28069:62:0;28042:19;:90::i;:::-;27518:622;;;:::o;51650:623::-;51718:13;51741:4;;;;;;;;;;;51734:22;;;51765:4;51734:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51734:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51734:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51734:37:0;;;;;;;;;51718:53;;51796:1;51788:5;:9;51784:482;;;51844:173;51900:10;;;;;;;;;;;51888:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51888:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51888:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51888:34:0;;;;;;;;;51941:61;42343:5;51941:33;51951:22;;51941:5;:9;;:33;;;;:::i;:::-;:37;;:61;;;;:::i;:::-;51851:4;;;;;;;;;;;51844:25;;;;:173;;;;;:::i;:::-;52066:162;52122:10;;;;;;;;;;;52110:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52110:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52110:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;52110:33:0;;;;;;;;;52162:51;42444:5;52162:28;52172:17;;52162:5;:9;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;52073:4;;;;;;;;;;;52066:25;;;;:162;;;;;:::i;:::-;52245:9;:7;:9::i;:::-;51784:482;51650:623;:::o;49026:82::-;49070:30;49084:15;:13;:15::i;:::-;49070:13;:30::i;:::-;;49026:82::o;1902:192::-;1988:7;2021:1;2016;:6;;2024:12;2008:29;;;;;;;;;;;;;;;;;;;;;;;;;2048:9;2064:1;2060;:5;2048:17;;2085:1;2078:8;;;1902:192;;;;;:::o;3928:278::-;4014:7;4046:1;4042;:5;4049:12;4034:28;;;;;;;;;;;;;;;;;;;;;;;;;4073:9;4089:1;4085;:5;;;;;;4073:17;;4197:1;4190:8;;;3928:278;;;;;:::o;29164:761::-;29588:23;29614:69;29642:4;29614:69;;;;;;;;;;;;;;;;;29622:5;29614:27;;;;:69;;;;;:::i;:::-;29588:95;;29718:1;29698:10;:17;:21;29694:224;;;29840:10;29829:30;;;;;;;;;;;;;;29821:85;;;;;;;;;;;;;;;;;;;;;;29694:224;29164:761;;;:::o;12985:196::-;13088:12;13120:53;13143:6;13151:4;13157:1;13160:12;13120:22;:53::i;:::-;13113:60;;12985:196;;;;;:::o;14362:979::-;14492:12;14525:18;14536:6;14525:10;:18::i;:::-;14517:60;;;;;;;;;;;;;;;;;;;;;;14651:12;14665:23;14692:6;:11;;14712:8;14723:4;14692:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14650:78:0;;;;14743:7;14739:595;;;14774:10;14767:17;;;;;;14739:595;14908:1;14888:10;:17;:21;14884:439;;;15151:10;15145:17;15212:15;15199:10;15195:2;15191:19;15184:44;15099:148;15294:12;15287:20;;;;;;;;;;;;;;;;;;;;14362:979;;;;;;;:::o;10067:422::-;10127:4;10335:12;10446:7;10434:20;10426:28;;10480:1;10473:4;:8;10466:15;;;10067:422;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;679:722;;807:3;800:4;792:6;788:17;784:27;774:2;;825:1;822;815:12;774:2;855:6;849:13;877:80;892:64;949:6;892:64;;;877:80;;;868:89;;974:5;999:6;992:5;985:21;1029:4;1021:6;1017:17;1007:27;;1051:4;1046:3;1042:14;1035:21;;1104:6;1151:3;1143:4;1135:6;1131:17;1126:3;1122:27;1119:36;1116:2;;;1168:1;1165;1158:12;1116:2;1193:1;1178:217;1203:6;1200:1;1197:13;1178:217;;;1261:3;1283:48;1327:3;1315:10;1283:48;;;1278:3;1271:61;1355:4;1350:3;1346:14;1339:21;;1383:4;1378:3;1374:14;1367:21;;1235:160;1225:1;1222;1218:9;1213:14;;1178:217;;;1182:14;767:634;;;;;;;;1426:716;;1564:3;1557:4;1549:6;1545:17;1541:27;1531:2;;1582:1;1579;1572:12;1531:2;1612:6;1606:13;1634:90;1649:74;1716:6;1649:74;;;1634:90;;;1625:99;;1741:5;1766:6;1759:5;1752:21;1796:4;1788:6;1784:17;1774:27;;1818:4;1813:3;1809:14;1802:21;;1871:6;1904:1;1889:247;1914:6;1911:1;1908:13;1889:247;;;1990:3;1984:10;1976:6;1972:23;2014:58;2068:3;2056:10;2014:58;;;2009:3;2002:71;2096:4;2091:3;2087:14;2080:21;;2124:4;2119:3;2115:14;2108:21;;1946:190;1936:1;1933;1929:9;1924:14;;1889:247;;;1893:14;1524:618;;;;;;;;2168:722;;2296:3;2289:4;2281:6;2277:17;2273:27;2263:2;;2314:1;2311;2304:12;2263:2;2344:6;2338:13;2366:80;2381:64;2438:6;2381:64;;;2366:80;;;2357:89;;2463:5;2488:6;2481:5;2474:21;2518:4;2510:6;2506:17;2496:27;;2540:4;2535:3;2531:14;2524:21;;2593:6;2640:3;2632:4;2624:6;2620:17;2615:3;2611:27;2608:36;2605:2;;;2657:1;2654;2647:12;2605:2;2682:1;2667:217;2692:6;2689:1;2686:13;2667:217;;;2750:3;2772:48;2816:3;2804:10;2772:48;;;2767:3;2760:61;2844:4;2839:3;2835:14;2828:21;;2872:4;2867:3;2863:14;2856:21;;2724:160;2714:1;2711;2707:9;2702:14;;2667:217;;;2671:14;2256:634;;;;;;;;2898:128;;2979:6;2973:13;2964:22;;2991:30;3015:5;2991:30;;;2958:68;;;;;3034:440;;3135:3;3128:4;3120:6;3116:17;3112:27;3102:2;;3153:1;3150;3143:12;3102:2;3190:6;3177:20;3212:64;3227:48;3268:6;3227:48;;;3212:64;;;3203:73;;3296:6;3289:5;3282:21;3332:4;3324:6;3320:17;3365:4;3358:5;3354:16;3400:3;3391:6;3386:3;3382:16;3379:25;3376:2;;;3417:1;3414;3407:12;3376:2;3427:41;3461:6;3456:3;3451;3427:41;;;3095:379;;;;;;;;3482:158;;3576:6;3563:20;3554:29;;3588:47;3629:5;3588:47;;;3548:92;;;;;3648:444;;3761:3;3754:4;3746:6;3742:17;3738:27;3728:2;;3779:1;3776;3769:12;3728:2;3809:6;3803:13;3831:65;3846:49;3888:6;3846:49;;;3831:65;;;3822:74;;3916:6;3909:5;3902:21;3952:4;3944:6;3940:17;3985:4;3978:5;3974:16;4020:3;4011:6;4006:3;4002:16;3999:25;3996:2;;;4037:1;4034;4027:12;3996:2;4047:39;4079:6;4074:3;4069;4047:39;;;3721:371;;;;;;;;4100:130;;4180:6;4167:20;4158:29;;4192:33;4219:5;4192:33;;;4152:78;;;;;4237:134;;4321:6;4315:13;4306:22;;4333:33;4360:5;4333:33;;;4300:71;;;;;4378:241;;4482:2;4470:9;4461:7;4457:23;4453:32;4450:2;;;4498:1;4495;4488:12;4450:2;4533:1;4550:53;4595:7;4586:6;4575:9;4571:22;4550:53;;;4540:63;;4512:97;4444:175;;;;;4626:263;;4741:2;4729:9;4720:7;4716:23;4712:32;4709:2;;;4757:1;4754;4747:12;4709:2;4792:1;4809:64;4865:7;4856:6;4845:9;4841:22;4809:64;;;4799:74;;4771:108;4703:186;;;;;4896:470;;;5026:2;5014:9;5005:7;5001:23;4997:32;4994:2;;;5042:1;5039;5032:12;4994:2;5077:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;;;5084:63;;5056:97;5212:2;5201:9;5197:18;5184:32;5236:18;5228:6;5225:30;5222:2;;;5268:1;5265;5258:12;5222:2;5288:62;5342:7;5333:6;5322:9;5318:22;5288:62;;;5278:72;;5163:193;4988:378;;;;;;5373:366;;;5494:2;5482:9;5473:7;5469:23;5465:32;5462:2;;;5510:1;5507;5500:12;5462:2;5545:1;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;;;5552:63;;5524:97;5652:2;5670:53;5715:7;5706:6;5695:9;5691:22;5670:53;;;5660:63;;5631:98;5456:283;;;;;;5746:397;;;5885:2;5873:9;5864:7;5860:23;5856:32;5853:2;;;5901:1;5898;5891:12;5853:2;5964:1;5953:9;5949:17;5936:31;5987:18;5979:6;5976:30;5973:2;;;6019:1;6016;6009:12;5973:2;6047:80;6119:7;6110:6;6099:9;6095:22;6047:80;;;6037:90;;;;5915:218;5847:296;;;;;;6150:1208;;;;;6426:3;6414:9;6405:7;6401:23;6397:33;6394:2;;;6443:1;6440;6433:12;6394:2;6499:1;6488:9;6484:17;6478:24;6522:18;6514:6;6511:30;6508:2;;;6554:1;6551;6544:12;6508:2;6574:89;6655:7;6646:6;6635:9;6631:22;6574:89;;;6564:99;;6457:212;6721:2;6710:9;6706:18;6700:25;6745:18;6737:6;6734:30;6731:2;;;6777:1;6774;6767:12;6731:2;6797:99;6888:7;6879:6;6868:9;6864:22;6797:99;;;6787:109;;6679:223;6954:2;6943:9;6939:18;6933:25;6978:18;6970:6;6967:30;6964:2;;;7010:1;7007;7000:12;6964:2;7030:89;7111:7;7102:6;7091:9;7087:22;7030:89;;;7020:99;;6912:213;7177:2;7166:9;7162:18;7156:25;7201:18;7193:6;7190:30;7187:2;;;7233:1;7230;7223:12;7187:2;7253:89;7334:7;7325:6;7314:9;7310:22;7253:89;;;7243:99;;7135:213;6388:970;;;;;;;;7365:392;;7505:2;7493:9;7484:7;7480:23;7476:32;7473:2;;;7521:1;7518;7511:12;7473:2;7577:1;7566:9;7562:17;7556:24;7600:18;7592:6;7589:30;7586:2;;;7632:1;7629;7622:12;7586:2;7652:89;7733:7;7724:6;7713:9;7709:22;7652:89;;;7642:99;;7535:212;7467:290;;;;;7764:257;;7876:2;7864:9;7855:7;7851:23;7847:32;7844:2;;;7892:1;7889;7882:12;7844:2;7927:1;7944:61;7997:7;7988:6;7977:9;7973:22;7944:61;;;7934:71;;7906:105;7838:183;;;;;8028:269;;8146:2;8134:9;8125:7;8121:23;8117:32;8114:2;;;8162:1;8159;8152:12;8114:2;8197:1;8214:67;8273:7;8264:6;8253:9;8249:22;8214:67;;;8204:77;;8176:111;8108:189;;;;;8304:241;;8408:2;8396:9;8387:7;8383:23;8379:32;8376:2;;;8424:1;8421;8414:12;8376:2;8459:1;8476:53;8521:7;8512:6;8501:9;8497:22;8476:53;;;8466:63;;8438:97;8370:175;;;;;8552:263;;8667:2;8655:9;8646:7;8642:23;8638:32;8635:2;;;8683:1;8680;8673:12;8635:2;8718:1;8735:64;8791:7;8782:6;8771:9;8767:22;8735:64;;;8725:74;;8697:108;8629:186;;;;;8822:535;;;;8971:2;8959:9;8950:7;8946:23;8942:32;8939:2;;;8987:1;8984;8977:12;8939:2;9022:1;9039:64;9095:7;9086:6;9075:9;9071:22;9039:64;;;9029:74;;9001:108;9140:2;9158:64;9214:7;9205:6;9194:9;9190:22;9158:64;;;9148:74;;9119:109;9259:2;9277:64;9333:7;9324:6;9313:9;9309:22;9277:64;;;9267:74;;9238:109;8933:424;;;;;;9364:672;;;;;9530:3;9518:9;9509:7;9505:23;9501:33;9498:2;;;9547:1;9544;9537:12;9498:2;9582:1;9599:64;9655:7;9646:6;9635:9;9631:22;9599:64;;;9589:74;;9561:108;9700:2;9718:64;9774:7;9765:6;9754:9;9750:22;9718:64;;;9708:74;;9679:109;9819:2;9837:64;9893:7;9884:6;9873:9;9869:22;9837:64;;;9827:74;;9798:109;9938:2;9956:64;10012:7;10003:6;9992:9;9988:22;9956:64;;;9946:74;;9917:109;9492:544;;;;;;;;10044:173;;10131:46;10173:3;10165:6;10131:46;;;10206:4;10201:3;10197:14;10183:28;;10124:93;;;;;10225:103;10298:24;10316:5;10298:24;;;10293:3;10286:37;10280:48;;;10335:113;10418:24;10436:5;10418:24;;;10413:3;10406:37;10400:48;;;10486:690;;10631:54;10679:5;10631:54;;;10698:86;10777:6;10772:3;10698:86;;;10691:93;;10805:56;10855:5;10805:56;;;10881:7;10909:1;10894:260;10919:6;10916:1;10913:13;10894:260;;;10986:6;10980:13;11007:63;11066:3;11051:13;11007:63;;;11000:70;;11087:60;11140:6;11087:60;;;11077:70;;10951:203;10941:1;10938;10934:9;10929:14;;10894:260;;;10898:14;11167:3;11160:10;;10610:566;;;;;;;;11184:104;11261:21;11276:5;11261:21;;;11256:3;11249:34;11243:45;;;11295:343;;11405:38;11437:5;11405:38;;;11455:70;11518:6;11513:3;11455:70;;;11448:77;;11530:52;11575:6;11570:3;11563:4;11556:5;11552:16;11530:52;;;11603:29;11625:6;11603:29;;;11598:3;11594:39;11587:46;;11385:253;;;;;;11645:356;;11773:38;11805:5;11773:38;;;11823:88;11904:6;11899:3;11823:88;;;11816:95;;11916:52;11961:6;11956:3;11949:4;11942:5;11938:16;11916:52;;;11989:6;11984:3;11980:16;11973:23;;11753:248;;;;;;12008:142;12099:45;12138:5;12099:45;;;12094:3;12087:58;12081:69;;;12157:142;12248:45;12287:5;12248:45;;;12243:3;12236:58;12230:69;;;12306:347;;12418:39;12451:5;12418:39;;;12469:71;12533:6;12528:3;12469:71;;;12462:78;;12545:52;12590:6;12585:3;12578:4;12571:5;12567:16;12545:52;;;12618:29;12640:6;12618:29;;;12613:3;12609:39;12602:46;;12398:255;;;;;;12661:311;;12821:67;12885:2;12880:3;12821:67;;;12814:74;;12921:13;12917:1;12912:3;12908:11;12901:34;12963:2;12958:3;12954:12;12947:19;;12807:165;;;;12981:306;;13141:66;13205:1;13200:3;13141:66;;;13134:73;;13240:9;13236:1;13231:3;13227:11;13220:30;13278:2;13273:3;13269:12;13262:19;;13127:160;;;;13296:311;;13456:67;13520:2;13515:3;13456:67;;;13449:74;;13556:13;13552:1;13547:3;13543:11;13536:34;13598:2;13593:3;13589:12;13582:19;;13442:165;;;;13616:327;;13776:67;13840:2;13835:3;13776:67;;;13769:74;;13876:29;13872:1;13867:3;13863:11;13856:50;13934:2;13929:3;13925:12;13918:19;;13762:181;;;;13952:303;;14112:66;14176:1;14171:3;14112:66;;;14105:73;;14211:6;14207:1;14202:3;14198:11;14191:27;14246:2;14241:3;14237:12;14230:19;;14098:157;;;;14264:314;;14424:67;14488:2;14483:3;14424:67;;;14417:74;;14524:16;14520:1;14515:3;14511:11;14504:37;14569:2;14564:3;14560:12;14553:19;;14410:168;;;;14587:370;;14747:67;14811:2;14806:3;14747:67;;;14740:74;;14847:34;14843:1;14838:3;14834:11;14827:55;14916:3;14911:2;14906:3;14902:12;14895:25;14948:2;14943:3;14939:12;14932:19;;14733:224;;;;14966:303;;15126:66;15190:1;15185:3;15126:66;;;15119:73;;15225:6;15221:1;15216:3;15212:11;15205:27;15260:2;15255:3;15251:12;15244:19;;15112:157;;;;15278:329;;15438:67;15502:2;15497:3;15438:67;;;15431:74;;15538:31;15534:1;15529:3;15525:11;15518:52;15598:2;15593:3;15589:12;15582:19;;15424:183;;;;15616:379;;15776:67;15840:2;15835:3;15776:67;;;15769:74;;15876:34;15872:1;15867:3;15863:11;15856:55;15945:12;15940:2;15935:3;15931:12;15924:34;15986:2;15981:3;15977:12;15970:19;;15762:233;;;;16004:308;;16164:66;16228:1;16223:3;16164:66;;;16157:73;;16263:11;16259:1;16254:3;16250:11;16243:32;16303:2;16298:3;16294:12;16287:19;;16150:162;;;;16321:391;;16481:67;16545:2;16540:3;16481:67;;;16474:74;;16581:34;16577:1;16572:3;16568:11;16561:55;16650:24;16645:2;16640:3;16636:12;16629:46;16703:2;16698:3;16694:12;16687:19;;16467:245;;;;16720:113;16803:24;16821:5;16803:24;;;16798:3;16791:37;16785:48;;;16840:262;;16984:93;17073:3;17064:6;16984:93;;;16977:100;;17094:3;17087:10;;16965:137;;;;;17109:213;;17227:2;17216:9;17212:18;17204:26;;17241:71;17309:1;17298:9;17294:17;17285:6;17241:71;;;17198:124;;;;;17329:324;;17475:2;17464:9;17460:18;17452:26;;17489:71;17557:1;17546:9;17542:17;17533:6;17489:71;;;17571:72;17639:2;17628:9;17624:18;17615:6;17571:72;;;17446:207;;;;;;17660:1027;;17990:3;17979:9;17975:19;17967:27;;18005:71;18073:1;18062:9;18058:17;18049:6;18005:71;;;18087:72;18155:2;18144:9;18140:18;18131:6;18087:72;;;18170;18238:2;18227:9;18223:18;18214:6;18170:72;;;18253;18321:2;18310:9;18306:18;18297:6;18253:72;;;18336:81;18412:3;18401:9;18397:19;18388:6;18336:81;;;18428;18504:3;18493:9;18489:19;18480:6;18428:81;;;18520:73;18588:3;18577:9;18573:19;18564:6;18520:73;;;18604;18672:3;18661:9;18657:19;18648:6;18604:73;;;17961:726;;;;;;;;;;;;18694:324;;18840:2;18829:9;18825:18;18817:26;;18854:71;18922:1;18911:9;18907:17;18898:6;18854:71;;;18936:72;19004:2;18993:9;18989:18;18980:6;18936:72;;;18811:207;;;;;;19025:201;;19137:2;19126:9;19122:18;19114:26;;19151:65;19213:1;19202:9;19198:17;19189:6;19151:65;;;19108:118;;;;;19233:297;;19369:2;19358:9;19354:18;19346:26;;19419:9;19413:4;19409:20;19405:1;19394:9;19390:17;19383:47;19444:76;19515:4;19506:6;19444:76;;;19436:84;;19340:190;;;;;19537:301;;19675:2;19664:9;19660:18;19652:26;;19725:9;19719:4;19715:20;19711:1;19700:9;19696:17;19689:47;19750:78;19823:4;19814:6;19750:78;;;19742:86;;19646:192;;;;;19845:407;;20036:2;20025:9;20021:18;20013:26;;20086:9;20080:4;20076:20;20072:1;20061:9;20057:17;20050:47;20111:131;20237:4;20111:131;;;20103:139;;20007:245;;;;20259:407;;20450:2;20439:9;20435:18;20427:26;;20500:9;20494:4;20490:20;20486:1;20475:9;20471:17;20464:47;20525:131;20651:4;20525:131;;;20517:139;;20421:245;;;;20673:407;;20864:2;20853:9;20849:18;20841:26;;20914:9;20908:4;20904:20;20900:1;20889:9;20885:17;20878:47;20939:131;21065:4;20939:131;;;20931:139;;20835:245;;;;21087:407;;21278:2;21267:9;21263:18;21255:26;;21328:9;21322:4;21318:20;21314:1;21303:9;21299:17;21292:47;21353:131;21479:4;21353:131;;;21345:139;;21249:245;;;;21501:407;;21692:2;21681:9;21677:18;21669:26;;21742:9;21736:4;21732:20;21728:1;21717:9;21713:17;21706:47;21767:131;21893:4;21767:131;;;21759:139;;21663:245;;;;21915:407;;22106:2;22095:9;22091:18;22083:26;;22156:9;22150:4;22146:20;22142:1;22131:9;22127:17;22120:47;22181:131;22307:4;22181:131;;;22173:139;;22077:245;;;;22329:407;;22520:2;22509:9;22505:18;22497:26;;22570:9;22564:4;22560:20;22556:1;22545:9;22541:17;22534:47;22595:131;22721:4;22595:131;;;22587:139;;22491:245;;;;22743:407;;22934:2;22923:9;22919:18;22911:26;;22984:9;22978:4;22974:20;22970:1;22959:9;22955:17;22948:47;23009:131;23135:4;23009:131;;;23001:139;;22905:245;;;;23157:407;;23348:2;23337:9;23333:18;23325:26;;23398:9;23392:4;23388:20;23384:1;23373:9;23369:17;23362:47;23423:131;23549:4;23423:131;;;23415:139;;23319:245;;;;23571:407;;23762:2;23751:9;23747:18;23739:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23837:131;23963:4;23837:131;;;23829:139;;23733:245;;;;23985:407;;24176:2;24165:9;24161:18;24153:26;;24226:9;24220:4;24216:20;24212:1;24201:9;24197:17;24190:47;24251:131;24377:4;24251:131;;;24243:139;;24147:245;;;;24399:407;;24590:2;24579:9;24575:18;24567:26;;24640:9;24634:4;24630:20;24626:1;24615:9;24611:17;24604:47;24665:131;24791:4;24665:131;;;24657:139;;24561:245;;;;24813:213;;24931:2;24920:9;24916:18;24908:26;;24945:71;25013:1;25002:9;24998:17;24989:6;24945:71;;;24902:124;;;;;25033:324;;25179:2;25168:9;25164:18;25156:26;;25193:71;25261:1;25250:9;25246:17;25237:6;25193:71;;;25275:72;25343:2;25332:9;25328:18;25319:6;25275:72;;;25150:207;;;;;;25364:340;;25518:2;25507:9;25503:18;25495:26;;25532:71;25600:1;25589:9;25585:17;25576:6;25532:71;;;25614:80;25690:2;25679:9;25675:18;25666:6;25614:80;;;25489:215;;;;;;25711:823;;25999:3;25988:9;25984:19;25976:27;;26014:71;26082:1;26071:9;26067:17;26058:6;26014:71;;;26096:80;26172:2;26161:9;26157:18;26148:6;26096:80;;;26224:9;26218:4;26214:20;26209:2;26198:9;26194:18;26187:48;26249:108;26352:4;26343:6;26249:108;;;26241:116;;26368:72;26436:2;26425:9;26421:18;26412:6;26368:72;;;26451:73;26519:3;26508:9;26504:19;26495:6;26451:73;;;25970:564;;;;;;;;;26541:324;;26687:2;26676:9;26672:18;26664:26;;26701:71;26769:1;26758:9;26754:17;26745:6;26701:71;;;26783:72;26851:2;26840:9;26836:18;26827:6;26783:72;;;26658:207;;;;;;26872:256;;26934:2;26928:9;26918:19;;26972:4;26964:6;26960:17;27071:6;27059:10;27056:22;27035:18;27023:10;27020:34;27017:62;27014:2;;;27092:1;27089;27082:12;27014:2;27112:10;27108:2;27101:22;26912:216;;;;;27135:304;;27294:18;27286:6;27283:30;27280:2;;;27326:1;27323;27316:12;27280:2;27361:4;27353:6;27349:17;27341:25;;27424:4;27418;27414:15;27406:23;;27217:222;;;;27446:314;;27615:18;27607:6;27604:30;27601:2;;;27647:1;27644;27637:12;27601:2;27682:4;27674:6;27670:17;27662:25;;27745:4;27739;27735:15;27727:23;;27538:222;;;;27767:304;;27926:18;27918:6;27915:30;27912:2;;;27958:1;27955;27948:12;27912:2;27993:4;27985:6;27981:17;27973:25;;28056:4;28050;28046:15;28038:23;;27849:222;;;;28078:321;;28221:18;28213:6;28210:30;28207:2;;;28253:1;28250;28243:12;28207:2;28320:4;28316:9;28309:4;28301:6;28297:17;28293:33;28285:41;;28384:4;28378;28374:15;28366:23;;28144:255;;;;28406:322;;28550:18;28542:6;28539:30;28536:2;;;28582:1;28579;28572:12;28536:2;28649:4;28645:9;28638:4;28630:6;28626:17;28622:33;28614:41;;28713:4;28707;28703:15;28695:23;;28473:255;;;;28735:151;;28821:3;28813:11;;28859:4;28854:3;28850:14;28842:22;;28807:79;;;;28893:137;;29002:5;28996:12;28986:22;;28967:63;;;;29037:121;;29130:5;29124:12;29114:22;;29095:63;;;;29165:122;;29259:5;29253:12;29243:22;;29224:63;;;;29294:108;;29392:4;29387:3;29383:14;29375:22;;29369:33;;;;29410:178;;29540:6;29535:3;29528:19;29577:4;29572:3;29568:14;29553:29;;29521:67;;;;;29597:162;;29711:6;29706:3;29699:19;29748:4;29743:3;29739:14;29724:29;;29692:67;;;;;29768:144;;29903:3;29888:18;;29881:31;;;;;29921:163;;30036:6;30031:3;30024:19;30073:4;30068:3;30064:14;30049:29;;30017:67;;;;;30092:91;;30154:24;30172:5;30154:24;;;30143:35;;30137:46;;;;30190:85;;30263:5;30256:13;30249:21;30238:32;;30232:43;;;;30282:105;;30358:24;30376:5;30358:24;;;30347:35;;30341:46;;;;30394:121;;30467:42;30460:5;30456:54;30445:65;;30439:76;;;;30522:72;;30584:5;30573:16;;30567:27;;;;30601:116;;30688:24;30706:5;30688:24;;;30675:37;;30669:48;;;;30724:116;;30811:24;30829:5;30811:24;;;30798:37;;30792:48;;;;30848:145;30929:6;30924:3;30919;30906:30;30985:1;30976:6;30971:3;30967:16;30960:27;30899:94;;;;31002:268;31067:1;31074:101;31088:6;31085:1;31082:13;31074:101;;;31164:1;31159:3;31155:11;31149:18;31145:1;31140:3;31136:11;31129:39;31110:2;31107:1;31103:10;31098:15;;31074:101;;;31190:6;31187:1;31184:13;31181:2;;;31255:1;31246:6;31241:3;31237:16;31230:27;31181:2;31051:219;;;;;31278:97;;31366:2;31362:7;31357:2;31350:5;31346:14;31342:28;31332:38;;31326:49;;;;31383:117;31452:24;31470:5;31452:24;;;31445:5;31442:35;31432:2;;31491:1;31488;31481:12;31432:2;31426:74;;31507:111;31573:21;31588:5;31573:21;;;31566:5;31563:32;31553:2;;31609:1;31606;31599:12;31553:2;31547:71;;31625:145;31708:38;31740:5;31708:38;;;31701:5;31698:49;31688:2;;31761:1;31758;31751:12;31688:2;31682:88;;31777:117;31846:24;31864:5;31846:24;;;31839:5;31836:35;31826:2;;31885:1;31882;31875:12;31826:2;31820:74;
Swarm Source
ipfs://7b2076aae1d9ff281b78c1c669a4dcca4a60c541909dbdd18155344588055eea
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.