Source Code
Overview
GLMR Balance
GLMR Value
$0.00Latest 25 from a total of 72 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Zap In | 4838090 | 807 days ago | IN | 30 GLMR | 0.0852162 | ||||
| Zap In | 3733033 | 963 days ago | IN | 69 GLMR | 0.07208142 | ||||
| Zap In | 3297029 | 1025 days ago | IN | 0.5 GLMR | 0.042656 | ||||
| Zap In | 3296247 | 1025 days ago | IN | 159 GLMR | 0.04468527 | ||||
| Zap In | 3080153 | 1057 days ago | IN | 80 GLMR | 0.04612109 | ||||
| Zap In | 3080007 | 1057 days ago | IN | 3.35048224 GLMR | 0.04624035 | ||||
| Zap In | 2951132 | 1076 days ago | IN | 940.79439327 GLMR | 0.0454026 | ||||
| Zap In | 2011353 | 1208 days ago | IN | 0.01 GLMR | 0.04668116 | ||||
| Zap In | 1957316 | 1216 days ago | IN | 18 GLMR | 0.04336222 | ||||
| Zap In | 1648907 | 1260 days ago | IN | 560 GLMR | 0.37625638 | ||||
| Zap In | 1601545 | 1267 days ago | IN | 95 GLMR | 0.05033547 | ||||
| Zap In | 1090896 | 1343 days ago | IN | 7 GLMR | 0.04442309 | ||||
| Zap In | 963680 | 1361 days ago | IN | 0 GLMR | 0.04633617 | ||||
| Zap In | 935123 | 1365 days ago | IN | 2 GLMR | 0.04450795 | ||||
| Zap In | 931028 | 1366 days ago | IN | 700 GLMR | 0.0472659 | ||||
| Zap In | 931014 | 1366 days ago | IN | 654.90588235 GLMR | 0.0442867 | ||||
| Zap In | 930147 | 1366 days ago | IN | 0 GLMR | 0.04633617 | ||||
| Zap In | 914137 | 1368 days ago | IN | 20 GLMR | 0.04341205 | ||||
| Zap In | 894971 | 1371 days ago | IN | 3 GLMR | 0.04450795 | ||||
| Zap In | 881142 | 1373 days ago | IN | 30 GLMR | 0.0607784 | ||||
| Zap In | 870148 | 1375 days ago | IN | 7.1 GLMR | 0.04366956 | ||||
| Zap In | 863552 | 1376 days ago | IN | 9.48 GLMR | 0.04528544 | ||||
| Zap In | 856395 | 1377 days ago | IN | 5.7 GLMR | 0.04528544 | ||||
| Zap In | 852756 | 1377 days ago | IN | 29 GLMR | 0.04367057 | ||||
| Zap In | 828008 | 1381 days ago | IN | 7.39 GLMR | 0.04690132 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 4838090 | 807 days ago | 30 GLMR | ||||
| 3733033 | 963 days ago | 69 GLMR | ||||
| 3297029 | 1025 days ago | 0.5 GLMR | ||||
| 3296247 | 1025 days ago | 159 GLMR | ||||
| 3080153 | 1057 days ago | 80 GLMR | ||||
| 3080007 | 1057 days ago | 3.35048224 GLMR | ||||
| 2951132 | 1076 days ago | 940.79439327 GLMR | ||||
| 2011353 | 1208 days ago | 0.01 GLMR | ||||
| 1957316 | 1216 days ago | 18 GLMR | ||||
| 1648907 | 1260 days ago | 560 GLMR | ||||
| 1601545 | 1267 days ago | 95 GLMR | ||||
| 1090896 | 1343 days ago | 7 GLMR | ||||
| 935123 | 1365 days ago | 2 GLMR | ||||
| 931028 | 1366 days ago | 700 GLMR | ||||
| 931014 | 1366 days ago | 654.90588235 GLMR | ||||
| 914137 | 1368 days ago | 20 GLMR | ||||
| 894971 | 1371 days ago | 3 GLMR | ||||
| 881142 | 1373 days ago | 30 GLMR | ||||
| 870148 | 1375 days ago | 7.1 GLMR | ||||
| 863552 | 1376 days ago | 9.48 GLMR | ||||
| 856395 | 1377 days ago | 5.7 GLMR | ||||
| 852756 | 1377 days ago | 29 GLMR | ||||
| 828008 | 1381 days ago | 7.39 GLMR | ||||
| 827988 | 1381 days ago | 7.39 GLMR | ||||
| 825635 | 1381 days ago | 2.5 GLMR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Pickle_UniV2_ZapIn_V1
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2022-02-18
*/
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File @openzeppelin/contracts/interfaces/[email protected]
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
pragma solidity ^0.8.0;
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
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");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using 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'
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) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_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
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File @uniswap/v2-periphery/contracts/interfaces/[email protected]
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// File @uniswap/v2-periphery/contracts/interfaces/[email protected]
pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
// File @uniswap/v2-periphery/contracts/interfaces/[email protected]
pragma solidity >=0.5.0;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}
// File @uniswap/v2-core/contracts/interfaces/[email protected]
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// File @uniswap/v2-core/contracts/interfaces/[email protected]
pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint 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 (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint 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 (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
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 (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File @uniswap/lib/contracts/libraries/[email protected]
pragma solidity >=0.4.0;
// computes square roots using the babylonian method
// https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method
library Babylonian {
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
// else z = 0
}
}
// File contracts/Pickle_UniV2_ZapIn_V1.sol
///@author Pickle
///@notice This contract adds liquidity to Uniswap V2 pools using ETH or any ERC20 Token and then adds this lp token to desired jar in a single txn.
pragma solidity ^0.8.0;
interface IPickleJar {
function token() external view returns (address);
function deposit(uint256 amount) external;
}
abstract contract ZapBaseV2 is Ownable {
using SafeERC20 for IERC20;
bool public stopped = false;
// swapTarget => approval status
mapping(address => bool) public approvedTargets;
// circuit breaker modifiers
modifier stopInEmergency() {
if (stopped) {
revert("Temporarily Paused");
} else {
_;
}
}
function _getBalance(address token)
internal
view
returns (uint256 balance)
{
if (token == address(0)) {
balance = address(this).balance;
} else {
balance = IERC20(token).balanceOf(address(this));
}
}
function _approveToken(address token, address spender) internal {
IERC20 _token = IERC20(token);
if (_token.allowance(address(this), spender) > 0) return;
else {
_token.safeApprove(spender, type(uint256).max);
}
}
function _approveToken(
address token,
address spender,
uint256 amount
) internal {
IERC20 _token = IERC20(token);
_token.safeApprove(spender, 0);
_token.safeApprove(spender, amount);
}
// - to Pause the contract
function toggleContractActive() public onlyOwner {
stopped = !stopped;
}
function setApprovedTargets(
address[] calldata targets,
bool[] calldata isApproved
) external onlyOwner {
require(targets.length == isApproved.length, "Invalid Input length");
for (uint256 i = 0; i < targets.length; i++) {
approvedTargets[targets[i]] = isApproved[i];
}
}
receive() external payable {
require(msg.sender != tx.origin, "Do not send ETH directly");
}
}
contract Pickle_UniV2_ZapIn_V1 is ZapBaseV2 {
using SafeERC20 for IERC20;
uint256 private constant deadline =
0xf000000000000000000000000000000000000000000000000000000000000000;
address public wethTokenAddress;
constructor(address[] memory targets, address wnative)
{
for (uint256 i = 0; i < targets.length; i++) {
approvedTargets[targets[i]] = true;
}
wethTokenAddress = wnative;
}
event zapIn(address sender, address jar, uint256 tokensRec);
/**
@notice This function is used to invest in given Uniswap V2 pair through ETH/ERC20 Tokens
@param _FromTokenContractAddress The ERC20 token used for investment (address(0x00) if ether)
@param _amount The amount of fromToken to invest
@param _pairAddress The Uniswap pair address or the PJar token
@param _toPJar Pickle vault address
@param _minPJarTokens The minimum acceptable quantity vault tokens to receive. Reverts otherwise
@param _swapTarget Excecution target for the first swap
@param _swapData DEX quote data
@param _transferResidual Set false to save gas by donating the residual remaining after a Zap
@param _uniswapRouter Protocol's uniswap router address
@param _shouldSellEntireBalance Checks the total allowance of input token to zapin instead of the _amount, if true
@return tokensReceived Quantity of Vault tokens received
*/
function ZapIn(
address _FromTokenContractAddress,
uint256 _amount,
address _pairAddress,
address _toPJar,
uint256 _minPJarTokens,
address _swapTarget,
bytes calldata _swapData,
bool _transferResidual,
address _uniswapRouter,
bool _shouldSellEntireBalance
) external payable stopInEmergency returns (uint256 tokensReceived) {
uint256 _toInvest = _pullTokens(
_FromTokenContractAddress,
_amount,
_shouldSellEntireBalance
);
uint256 LPBought = _performZapIn(
_FromTokenContractAddress,
_pairAddress,
_toInvest,
_swapTarget,
_swapData,
_transferResidual,
_uniswapRouter
);
tokensReceived = _vaultDeposit(LPBought, _toPJar, _minPJarTokens);
}
function _pullTokens(
address _from,
uint256 _amount,
bool _shouldSellEntireBalance
) internal returns (uint256) {
if (_from != address(0)) {
require(_amount > 0, "Invalid token amount");
require(msg.value == 0, "Eth sent with token");
//transfer token
if (_shouldSellEntireBalance) {
require(
Address.isContract(msg.sender),
"ERR: shouldSellEntireBalance is true for EOA"
);
_amount = IERC20(_from).allowance(msg.sender, address(this));
}
IERC20(_from).safeTransferFrom(msg.sender, address(this), _amount);
}
return _amount;
}
function _vaultDeposit(
uint256 amount,
address toVault,
uint256 minTokensRec
) internal returns (uint256 tokensReceived) {
address underlyingVaultToken = IPickleJar(toVault).token();
_approveToken(underlyingVaultToken, toVault);
uint256 iniYVaultBal = IERC20(toVault).balanceOf(address(this));
IPickleJar(toVault).deposit(amount);
tokensReceived =
IERC20(toVault).balanceOf(address(this)) -
iniYVaultBal;
require(tokensReceived >= minTokensRec, "Err: High Slippage");
IERC20(toVault).safeTransfer(msg.sender, tokensReceived);
emit zapIn(msg.sender, toVault, tokensReceived);
}
function _getPairTokens(address _pairAddress)
internal
view
returns (address token0, address token1)
{
IUniswapV2Pair uniPair = IUniswapV2Pair(_pairAddress);
token0 = uniPair.token0();
token1 = uniPair.token1();
}
function _performZapIn(
address _FromTokenContractAddress,
address _pairAddress,
uint256 _amount,
address _swapTarget,
bytes memory swapData,
bool transferResidual,
address _uniswapRouter
) internal returns (uint256) {
uint256 intermediateAmt;
address intermediateToken;
(address _ToUniswapToken0, address _ToUniswapToken1) = _getPairTokens(
_pairAddress
);
if (
_FromTokenContractAddress != _ToUniswapToken0 &&
_FromTokenContractAddress != _ToUniswapToken1
) {
// swap to intermediate
(intermediateAmt, intermediateToken) = _fillQuote(
_FromTokenContractAddress,
_pairAddress,
_amount,
_swapTarget,
swapData
);
} else {
intermediateToken = _FromTokenContractAddress;
intermediateAmt = _amount;
}
// divide intermediate into appropriate amount to add liquidity
(uint256 token0Bought, uint256 token1Bought) = _swapIntermediate(
intermediateToken,
_ToUniswapToken0,
_ToUniswapToken1,
intermediateAmt,
_uniswapRouter
);
return
_uniDeposit(
_ToUniswapToken0,
_ToUniswapToken1,
token0Bought,
token1Bought,
transferResidual,
_uniswapRouter
);
}
function _uniDeposit(
address _ToUnipoolToken0,
address _ToUnipoolToken1,
uint256 token0Bought,
uint256 token1Bought,
bool transferResidual,
address _uniswapRouter
) internal returns (uint256) {
_approveToken(_ToUnipoolToken0, _uniswapRouter, token0Bought);
_approveToken(_ToUnipoolToken1, _uniswapRouter, token1Bought);
(uint256 amountA, uint256 amountB, uint256 LP) = IUniswapV2Router02(
_uniswapRouter
).addLiquidity(
_ToUnipoolToken0,
_ToUnipoolToken1,
token0Bought,
token1Bought,
1,
1,
address(this),
deadline
);
if (transferResidual) {
//Returning Residue in token0, if any.
if (token0Bought - amountA > 0) {
IERC20(_ToUnipoolToken0).safeTransfer(
msg.sender,
token0Bought - amountA
);
}
//Returning Residue in token1, if any
if (token1Bought - amountB > 0) {
IERC20(_ToUnipoolToken1).safeTransfer(
msg.sender,
token1Bought - amountB
);
}
}
return LP;
}
function _fillQuote(
address _fromTokenAddress,
address _pairAddress,
uint256 _amount,
address _swapTarget,
bytes memory swapData
) internal returns (uint256 amountBought, address intermediateToken) {
if (_swapTarget == wethTokenAddress) {
require(_amount > 0 && msg.value == _amount, "Invalid _amount: Input ETH mismatch");
IWETH(wethTokenAddress).deposit{ value: _amount }();
return (_amount, wethTokenAddress);
}
uint256 valueToSend;
if (_fromTokenAddress == address(0)) {
require(_amount > 0 && msg.value == _amount, "Invalid _amount: Input ETH mismatch");
valueToSend = _amount;
} else {
_approveToken(_fromTokenAddress, _swapTarget, _amount);
}
(address _token0, address _token1) = _getPairTokens(_pairAddress);
IERC20 token0 = IERC20(_token0);
IERC20 token1 = IERC20(_token1);
uint256 initialBalance0 = token0.balanceOf(address(this));
uint256 initialBalance1 = token1.balanceOf(address(this));
require(approvedTargets[_swapTarget], "Target not Authorized");
(bool success, ) = _swapTarget.call{value: valueToSend}(swapData);
require(success, "Error Swapping Tokens 1");
uint256 finalBalance0 = token0.balanceOf(address(this)) -
initialBalance0;
uint256 finalBalance1 = token1.balanceOf(address(this)) -
initialBalance1;
if (finalBalance0 > finalBalance1) {
amountBought = finalBalance0;
intermediateToken = _token0;
} else {
amountBought = finalBalance1;
intermediateToken = _token1;
}
require(amountBought > 0, "Swapped to Invalid Intermediate");
}
function _swapIntermediate(
address _toContractAddress,
address _ToUnipoolToken0,
address _ToUnipoolToken1,
uint256 _amount,
address _uniswapRouter
) internal returns (uint256 token0Bought, uint256 token1Bought) {
IUniswapV2Factory uniV2Factory = IUniswapV2Factory(
IUniswapV2Router02(_uniswapRouter).factory()
);
IUniswapV2Pair pair = IUniswapV2Pair(
uniV2Factory.getPair(_ToUnipoolToken0, _ToUnipoolToken1)
);
(uint256 res0, uint256 res1, ) = pair.getReserves();
if (_toContractAddress == _ToUnipoolToken0) {
uint256 amountToSwap = calculateSwapInAmount(res0, _amount);
//if no reserve or a new pair is created
if (amountToSwap <= 0) amountToSwap = _amount / 2;
token1Bought = _token2Token(
_toContractAddress,
_ToUnipoolToken1,
amountToSwap,
_uniswapRouter,
uniV2Factory
);
token0Bought = _amount - amountToSwap;
} else {
uint256 amountToSwap = calculateSwapInAmount(res1, _amount);
//if no reserve or a new pair is created
if (amountToSwap <= 0) amountToSwap = _amount / 2;
token0Bought = _token2Token(
_toContractAddress,
_ToUnipoolToken0,
amountToSwap,
_uniswapRouter,
uniV2Factory
);
token1Bought = _amount - amountToSwap;
}
}
function calculateSwapInAmount(uint256 reserveIn, uint256 userIn)
internal
pure
returns (uint256)
{
return
(Babylonian.sqrt(
reserveIn * ((userIn * 3988000) + (reserveIn * 3988009))
) - (reserveIn * 1997)) / 1994;
}
/**
@notice This function is used to swap ERC20 <> ERC20
@param _FromTokenContractAddress The token address to swap from.
@param _ToTokenContractAddress The token address to swap to.
@param tokens2Trade The amount of tokens to swap
@return tokenBought The quantity of tokens bought
*/
function _token2Token(
address _FromTokenContractAddress,
address _ToTokenContractAddress,
uint256 tokens2Trade,
address _uniswapRouter,
IUniswapV2Factory uniV2Factory
) internal returns (uint256 tokenBought) {
if (_FromTokenContractAddress == _ToTokenContractAddress) {
return tokens2Trade;
}
_approveToken(_FromTokenContractAddress, _uniswapRouter, tokens2Trade);
address pair = uniV2Factory.getPair(
_FromTokenContractAddress,
_ToTokenContractAddress
);
require(pair != address(0), "No Swap Available");
address[] memory path = new address[](2);
path[0] = _FromTokenContractAddress;
path[1] = _ToTokenContractAddress;
tokenBought = IUniswapV2Router02(_uniswapRouter)
.swapExactTokensForTokens(
tokens2Trade,
1,
path,
address(this),
deadline
)[path.length - 1];
require(tokenBought > 0, "Error Swapping Tokens 2");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"address","name":"wnative","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"jar","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensRec","type":"uint256"}],"name":"zapIn","type":"event"},{"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_pairAddress","type":"address"},{"internalType":"address","name":"_toPJar","type":"address"},{"internalType":"uint256","name":"_minPJarTokens","type":"uint256"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"_swapData","type":"bytes"},{"internalType":"bool","name":"_transferResidual","type":"bool"},{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"bool","name":"_shouldSellEntireBalance","type":"bool"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"tokensReceived","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bool[]","name":"isApproved","type":"bool[]"}],"name":"setApprovedTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleContractActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wethTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b5060405162003d7b38038062003d7b8339818101604052810190620000519190620002fb565b62000071620000656200017660201b60201c565b6200017e60201b60201c565b60005b82518110156200012c576001806000858481518110620000bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200012390620003f6565b91505062000074565b5080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620004bc565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000259620002538462000389565b62000355565b905080838252602082019050828560208602820111156200027957600080fd5b60005b85811015620002ad5781620002928882620002b7565b8452602084019350602083019250506001810190506200027c565b5050509392505050565b600081519050620002c881620004a2565b92915050565b600082601f830112620002e057600080fd5b8151620002f284826020860162000242565b91505092915050565b600080604083850312156200030f57600080fd5b600083015167ffffffffffffffff8111156200032a57600080fd5b6200033885828601620002ce565b92505060206200034b85828601620002b7565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200037f576200037e62000473565b5b8060405250919050565b600067ffffffffffffffff821115620003a757620003a662000473565b5b602082029050602081019050919050565b6000620003c582620003cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200040382620003ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000439576200043862000444565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ad81620003b8565b8114620004b957600080fd5b50565b6138af80620004cc6000396000f3fe60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b146101895780639735a634146101b45780639779d1a6146101dd578063b5f4b0261461021a578063f2fde38b1461024a57610100565b80630f9dad71146101055780631385d24c14610130578063715018a61461014757806375f12b211461015e57610100565b36610100573273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156100fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f5906131d6565b60405180910390fd5b005b600080fd5b34801561011157600080fd5b5061011a610273565b6040516101279190613057565b60405180910390f35b34801561013c57600080fd5b50610145610299565b005b34801561015357600080fd5b5061015c610341565b005b34801561016a57600080fd5b506101736103c9565b6040516101809190613179565b60405180910390f35b34801561019557600080fd5b5061019e6103dc565b6040516101ab9190613057565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d691906127a2565b610405565b005b3480156101e957600080fd5b5061020460048036038101906101ff9190612658565b6105e2565b6040516102119190613179565b60405180910390f35b610234600480360381019061022f91906126aa565b610602565b6040516102419190613416565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612658565b6106d7565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102a16107cf565b73ffffffffffffffffffffffffffffffffffffffff166102bf6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030c906132d6565b60405180910390fd5b600060149054906101000a900460ff1615600060146101000a81548160ff021916908315150217905550565b6103496107cf565b73ffffffffffffffffffffffffffffffffffffffff166103676103dc565b73ffffffffffffffffffffffffffffffffffffffff16146103bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b4906132d6565b60405180910390fd5b6103c760006107d7565b565b600060149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61040d6107cf565b73ffffffffffffffffffffffffffffffffffffffff1661042b6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610478906132d6565b60405180910390fd5b8181905084849050146104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c0906132b6565b60405180910390fd5b60005b848490508110156105db57828282818110610510577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105259190612858565b60016000878785818110610562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105779190612658565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806105d39061371f565b9150506104cc565b5050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060149054906101000a900460ff1615610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90613256565b60405180910390fd5b60006106608d8d8561089b565b905060006106b78e8d848c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b610a6a565b90506106c4818c8c610b42565b925050509b9a5050505050505050505050565b6106df6107cf565b73ffffffffffffffffffffffffffffffffffffffff166106fd6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906132d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906131f6565b60405180910390fd5b6107cc816107d7565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610a605760008311610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90613216565b60405180910390fd5b60003414610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613236565b60405180910390fd5b8115610a325761096533610e0f565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90613316565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016109df929190613072565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128f9565b92505b610a5f3330858773ffffffffffffffffffffffffffffffffffffffff16610e22909392919063ffffffff16565b5b8290509392505050565b6000806000806000610a7b8b610eab565b915091508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610ae757508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b15610b0657610af98c8c8c8c8c610fb9565b8094508195505050610b0d565b8b92508993505b600080610b1d858585898c6115b8565b91509150610b2f848484848d8d611842565b9650505050505050979650505050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8b57600080fd5b505afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190612681565b9050610bcf81856119cc565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0a9190613057565b60206040518083038186803b158015610c2257600080fd5b505afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906128f9565b90508473ffffffffffffffffffffffffffffffffffffffff1663b6b55f25876040518263ffffffff1660e01b8152600401610c959190613416565b600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b50505050808573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d019190613057565b60206040518083038186803b158015610d1957600080fd5b505afa158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5191906128f9565b610d5b9190613634565b925083831015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133f6565b60405180910390fd5b610dcb33848773ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b7f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d338685604051610dfe9392919061309b565b60405180910390a150509392505050565b600080823b905060008111915050919050565b610ea5846323b872dd60e01b858585604051602401610e439392919061309b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b50505050565b60008060008390508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f319190612681565b92508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190612681565b915050915091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111105760008511801561102157508434145b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613296565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b505050505084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091506115ae565b60008073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561119c5760008611801561115557508534145b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613296565b60405180910390fd5b8590506111a8565b6111a7888688611c08565b5b6000806111b489610eab565b915091506000829050600082905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111fd9190613057565b60206040518083038186803b15801561121557600080fd5b505afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d91906128f9565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128a9190613057565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906128f9565b9050600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906131b6565b60405180910390fd5b60008b73ffffffffffffffffffffffffffffffffffffffff16888c6040516113909190613040565b60006040518083038185875af1925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b5050905080611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613336565b60405180910390fd5b6000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114529190613057565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906128f9565b6114ac9190613634565b90506000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ea9190613057565b60206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906128f9565b6115449190613634565b90508082111561155957819b50889a50611560565b809b50879a505b60008c116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613356565b60405180910390fd5b505050505050505050505b9550959350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b9190612681565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390589896040518363ffffffff1660e01b815260040161167a929190613072565b60206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612681565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d91906128aa565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156117ef5760006117b2838a611c6a565b9050600081116117cc576002896117c991906135a9565b90505b6117d98c8b838b89611cd4565b955080896117e79190613634565b965050611834565b60006117fb828a611c6a565b9050600081116118155760028961181291906135a9565b90505b6118228c8c838b89611cd4565b965080896118309190613634565b9550505b505050509550959350505050565b600061184f878387611c08565b61185a868386611c08565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663e8e337008b8b8b8b600180307ff0000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b81526004016118c79897969594939291906130d2565b606060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190612922565b92509250925085156119bc57600083896119339190613634565b11156119705761196f33848a6119499190613634565b8c73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b6000828861197e9190613634565b11156119bb576119ba3383896119949190613634565b8b73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b5b8093505050509695505050505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a0e929190613072565b60206040518083038186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906128f9565b1115611a6a5750611ab7565b611ab5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b505b5050565b611b3c8363a9059cbb60e01b8484604051602401611ada929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b6000611ba3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661222f9092919063ffffffff16565b9050600081511115611c035780806020019051810190611bc39190612881565b611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf9906133b6565b60405180910390fd5b5b505050565b6000839050611c398360008373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b611c6483838373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b50505050565b60006107ca6107cd84611c7d91906135da565b611cb8623cda2986611c8f91906135da565b623cda2086611c9e91906135da565b611ca89190613553565b86611cb391906135da565b612247565b611cc29190613634565b611ccc91906135a9565b905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611d12578390506120c8565b611d1d868486611c08565b60008273ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401611d5a929190613072565b60206040518083038186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190612681565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613396565b60405180910390fd5b6000600267ffffffffffffffff811115611e5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8d5781602001602082028036833780820191505090505b5090508781600081518110611ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508681600181518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166338ed173987600184307ff0000000000000000000000000000000000000000000000000000000000000006040518663ffffffff1660e01b8152600401611fdc959493929190613431565b600060405180830381600087803b158015611ff657600080fd5b505af115801561200a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120339190612817565b600182516120419190613634565b81518110612078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250600083116120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906132f6565b60405180910390fd5b50505b95945050505050565b600081148061216a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612118929190613072565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906128f9565b145b6121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a0906133d6565b60405180910390fd5b61222a8363095ea7b360e01b84846040516024016121c8929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b606061223e84846000856122c1565b90509392505050565b600060038211156122ae578190506000600160028461226691906135a9565b6122709190613553565b90505b818110156122a857809150600281828561228d91906135a9565b6122979190613553565b6122a191906135a9565b9050612273565b506122bc565b600082146122bb57600190505b5b919050565b606082471015612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90613276565b60405180910390fd5b61230f85610e0f565b61234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613376565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123779190613040565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50915091506123c98282866123d5565b92505050949350505050565b606083156123e557829050612435565b6000835111156123f85782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c9190613194565b60405180910390fd5b9392505050565b600061244f61244a846134bc565b61348b565b9050808382526020820190508285602086028201111561246e57600080fd5b60005b8581101561249e5781612484888261262e565b845260208401935060208301925050600181019050612471565b5050509392505050565b6000813590506124b781613806565b92915050565b6000815190506124cc81613806565b92915050565b60008083601f8401126124e457600080fd5b8235905067ffffffffffffffff8111156124fd57600080fd5b60208301915083602082028301111561251557600080fd5b9250929050565b60008083601f84011261252e57600080fd5b8235905067ffffffffffffffff81111561254757600080fd5b60208301915083602082028301111561255f57600080fd5b9250929050565b600082601f83011261257757600080fd5b815161258784826020860161243c565b91505092915050565b60008135905061259f8161381d565b92915050565b6000815190506125b48161381d565b92915050565b60008083601f8401126125cc57600080fd5b8235905067ffffffffffffffff8111156125e557600080fd5b6020830191508360018202830111156125fd57600080fd5b9250929050565b60008151905061261381613834565b92915050565b6000813590506126288161384b565b92915050565b60008151905061263d8161384b565b92915050565b60008151905061265281613862565b92915050565b60006020828403121561266a57600080fd5b6000612678848285016124a8565b91505092915050565b60006020828403121561269357600080fd5b60006126a1848285016124bd565b91505092915050565b60008060008060008060008060008060006101408c8e0312156126cc57600080fd5b60006126da8e828f016124a8565b9b505060206126eb8e828f01612619565b9a505060406126fc8e828f016124a8565b995050606061270d8e828f016124a8565b985050608061271e8e828f01612619565b97505060a061272f8e828f016124a8565b96505060c08c013567ffffffffffffffff81111561274c57600080fd5b6127588e828f016125ba565b955095505060e061276b8e828f01612590565b93505061010061277d8e828f016124a8565b92505061012061278f8e828f01612590565b9150509295989b509295989b9093969950565b600080600080604085870312156127b857600080fd5b600085013567ffffffffffffffff8111156127d257600080fd5b6127de878288016124d2565b9450945050602085013567ffffffffffffffff8111156127fd57600080fd5b6128098782880161251c565b925092505092959194509250565b60006020828403121561282957600080fd5b600082015167ffffffffffffffff81111561284357600080fd5b61284f84828501612566565b91505092915050565b60006020828403121561286a57600080fd5b600061287884828501612590565b91505092915050565b60006020828403121561289357600080fd5b60006128a1848285016125a5565b91505092915050565b6000806000606084860312156128bf57600080fd5b60006128cd86828701612604565b93505060206128de86828701612604565b92505060406128ef86828701612643565b9150509250925092565b60006020828403121561290b57600080fd5b60006129198482850161262e565b91505092915050565b60008060006060848603121561293757600080fd5b60006129458682870161262e565b93505060206129568682870161262e565b92505060406129678682870161262e565b9150509250925092565b600061297d8383612989565b60208301905092915050565b61299281613668565b82525050565b6129a181613668565b82525050565b60006129b2826134f8565b6129bc8185613526565b93506129c7836134e8565b8060005b838110156129f85781516129df8882612971565b97506129ea83613519565b9250506001810190506129cb565b5085935050505092915050565b612a0e8161367a565b82525050565b6000612a1f82613503565b612a298185613537565b9350612a398185602086016136ec565b80840191505092915050565b612a4e816136da565b82525050565b6000612a5f8261350e565b612a698185613542565b9350612a798185602086016136ec565b612a82816137f5565b840191505092915050565b6000612a9a601583613542565b91507f546172676574206e6f7420417574686f72697a656400000000000000000000006000830152602082019050919050565b6000612ada601883613542565b91507f446f206e6f742073656e6420455448206469726563746c7900000000000000006000830152602082019050919050565b6000612b1a602683613542565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b80601483613542565b91507f496e76616c696420746f6b656e20616d6f756e740000000000000000000000006000830152602082019050919050565b6000612bc0601383613542565b91507f4574682073656e74207769746820746f6b656e000000000000000000000000006000830152602082019050919050565b6000612c00601283613542565b91507f54656d706f726172696c792050617573656400000000000000000000000000006000830152602082019050919050565b6000612c40602683613542565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ca6602383613542565b91507f496e76616c6964205f616d6f756e743a20496e70757420455448206d69736d6160008301527f74636800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0c601483613542565b91507f496e76616c696420496e707574206c656e6774680000000000000000000000006000830152602082019050919050565b6000612d4c602083613542565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d8c601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320320000000000000000006000830152602082019050919050565b6000612dcc602c83613542565b91507f4552523a2073686f756c6453656c6c456e7469726542616c616e63652069732060008301527f7472756520666f7220454f4100000000000000000000000000000000000000006020830152604082019050919050565b6000612e32601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320310000000000000000006000830152602082019050919050565b6000612e72601f83613542565b91507f5377617070656420746f20496e76616c696420496e7465726d656469617465006000830152602082019050919050565b6000612eb2601d83613542565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612ef2601183613542565b91507f4e6f205377617020417661696c61626c650000000000000000000000000000006000830152602082019050919050565b6000612f32602a83613542565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f98603683613542565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000612ffe601283613542565b91507f4572723a204869676820536c69707061676500000000000000000000000000006000830152602082019050919050565b61303a816136c0565b82525050565b600061304c8284612a14565b915081905092915050565b600060208201905061306c6000830184612998565b92915050565b60006040820190506130876000830185612998565b6130946020830184612998565b9392505050565b60006060820190506130b06000830186612998565b6130bd6020830185612998565b6130ca6040830184613031565b949350505050565b6000610100820190506130e8600083018b612998565b6130f5602083018a612998565b6131026040830189613031565b61310f6060830188613031565b61311c6080830187612a45565b61312960a0830186612a45565b61313660c0830185612998565b61314360e0830184613031565b9998505050505050505050565b60006040820190506131656000830185612998565b6131726020830184613031565b9392505050565b600060208201905061318e6000830184612a05565b92915050565b600060208201905081810360008301526131ae8184612a54565b905092915050565b600060208201905081810360008301526131cf81612a8d565b9050919050565b600060208201905081810360008301526131ef81612acd565b9050919050565b6000602082019050818103600083015261320f81612b0d565b9050919050565b6000602082019050818103600083015261322f81612b73565b9050919050565b6000602082019050818103600083015261324f81612bb3565b9050919050565b6000602082019050818103600083015261326f81612bf3565b9050919050565b6000602082019050818103600083015261328f81612c33565b9050919050565b600060208201905081810360008301526132af81612c99565b9050919050565b600060208201905081810360008301526132cf81612cff565b9050919050565b600060208201905081810360008301526132ef81612d3f565b9050919050565b6000602082019050818103600083015261330f81612d7f565b9050919050565b6000602082019050818103600083015261332f81612dbf565b9050919050565b6000602082019050818103600083015261334f81612e25565b9050919050565b6000602082019050818103600083015261336f81612e65565b9050919050565b6000602082019050818103600083015261338f81612ea5565b9050919050565b600060208201905081810360008301526133af81612ee5565b9050919050565b600060208201905081810360008301526133cf81612f25565b9050919050565b600060208201905081810360008301526133ef81612f8b565b9050919050565b6000602082019050818103600083015261340f81612ff1565b9050919050565b600060208201905061342b6000830184613031565b92915050565b600060a0820190506134466000830188613031565b6134536020830187612a45565b818103604083015261346581866129a7565b90506134746060830185612998565b6134816080830184613031565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156134b2576134b16137c6565b5b8060405250919050565b600067ffffffffffffffff8211156134d7576134d66137c6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061355e826136c0565b9150613569836136c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561359e5761359d613768565b5b828201905092915050565b60006135b4826136c0565b91506135bf836136c0565b9250826135cf576135ce613797565b5b828204905092915050565b60006135e5826136c0565b91506135f0836136c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362957613628613768565b5b828202905092915050565b600061363f826136c0565b915061364a836136c0565b92508282101561365d5761365c613768565b5b828203905092915050565b6000613673826136a0565b9050919050565b60008115159050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60006136e5826136c0565b9050919050565b60005b8381101561370a5780820151818401526020810190506136ef565b83811115613719576000848401525b50505050565b600061372a826136c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375d5761375c613768565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61380f81613668565b811461381a57600080fd5b50565b6138268161367a565b811461383157600080fd5b50565b61383d81613686565b811461384857600080fd5b50565b613854816136c0565b811461385f57600080fd5b50565b61386b816136ca565b811461387657600080fd5b5056fea26469706673582212207b914115c076e28e33b322681b0a26451a117d3a4a6fd48a6b117ad541099e6e64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000acc15dc74880c9944775448304b263d191c6077f000000000000000000000000000000000000000000000000000000000000000300000000000000000000000096b244391d98b62d19ae89b1a4dccf0fc56970c7000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1000000000000000000000000d3b02ff30c218c7f7756ba14bca075bf7c2c951e
Deployed Bytecode
0x60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b146101895780639735a634146101b45780639779d1a6146101dd578063b5f4b0261461021a578063f2fde38b1461024a57610100565b80630f9dad71146101055780631385d24c14610130578063715018a61461014757806375f12b211461015e57610100565b36610100573273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156100fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f5906131d6565b60405180910390fd5b005b600080fd5b34801561011157600080fd5b5061011a610273565b6040516101279190613057565b60405180910390f35b34801561013c57600080fd5b50610145610299565b005b34801561015357600080fd5b5061015c610341565b005b34801561016a57600080fd5b506101736103c9565b6040516101809190613179565b60405180910390f35b34801561019557600080fd5b5061019e6103dc565b6040516101ab9190613057565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d691906127a2565b610405565b005b3480156101e957600080fd5b5061020460048036038101906101ff9190612658565b6105e2565b6040516102119190613179565b60405180910390f35b610234600480360381019061022f91906126aa565b610602565b6040516102419190613416565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612658565b6106d7565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102a16107cf565b73ffffffffffffffffffffffffffffffffffffffff166102bf6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030c906132d6565b60405180910390fd5b600060149054906101000a900460ff1615600060146101000a81548160ff021916908315150217905550565b6103496107cf565b73ffffffffffffffffffffffffffffffffffffffff166103676103dc565b73ffffffffffffffffffffffffffffffffffffffff16146103bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b4906132d6565b60405180910390fd5b6103c760006107d7565b565b600060149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61040d6107cf565b73ffffffffffffffffffffffffffffffffffffffff1661042b6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610478906132d6565b60405180910390fd5b8181905084849050146104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c0906132b6565b60405180910390fd5b60005b848490508110156105db57828282818110610510577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105259190612858565b60016000878785818110610562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105779190612658565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806105d39061371f565b9150506104cc565b5050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060149054906101000a900460ff1615610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90613256565b60405180910390fd5b60006106608d8d8561089b565b905060006106b78e8d848c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b610a6a565b90506106c4818c8c610b42565b925050509b9a5050505050505050505050565b6106df6107cf565b73ffffffffffffffffffffffffffffffffffffffff166106fd6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906132d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906131f6565b60405180910390fd5b6107cc816107d7565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610a605760008311610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90613216565b60405180910390fd5b60003414610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613236565b60405180910390fd5b8115610a325761096533610e0f565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90613316565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016109df929190613072565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128f9565b92505b610a5f3330858773ffffffffffffffffffffffffffffffffffffffff16610e22909392919063ffffffff16565b5b8290509392505050565b6000806000806000610a7b8b610eab565b915091508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610ae757508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b15610b0657610af98c8c8c8c8c610fb9565b8094508195505050610b0d565b8b92508993505b600080610b1d858585898c6115b8565b91509150610b2f848484848d8d611842565b9650505050505050979650505050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8b57600080fd5b505afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190612681565b9050610bcf81856119cc565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0a9190613057565b60206040518083038186803b158015610c2257600080fd5b505afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906128f9565b90508473ffffffffffffffffffffffffffffffffffffffff1663b6b55f25876040518263ffffffff1660e01b8152600401610c959190613416565b600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b50505050808573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d019190613057565b60206040518083038186803b158015610d1957600080fd5b505afa158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5191906128f9565b610d5b9190613634565b925083831015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133f6565b60405180910390fd5b610dcb33848773ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b7f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d338685604051610dfe9392919061309b565b60405180910390a150509392505050565b600080823b905060008111915050919050565b610ea5846323b872dd60e01b858585604051602401610e439392919061309b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b50505050565b60008060008390508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f319190612681565b92508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190612681565b915050915091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111105760008511801561102157508434145b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613296565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b505050505084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091506115ae565b60008073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561119c5760008611801561115557508534145b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613296565b60405180910390fd5b8590506111a8565b6111a7888688611c08565b5b6000806111b489610eab565b915091506000829050600082905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111fd9190613057565b60206040518083038186803b15801561121557600080fd5b505afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d91906128f9565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128a9190613057565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906128f9565b9050600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906131b6565b60405180910390fd5b60008b73ffffffffffffffffffffffffffffffffffffffff16888c6040516113909190613040565b60006040518083038185875af1925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b5050905080611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613336565b60405180910390fd5b6000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114529190613057565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906128f9565b6114ac9190613634565b90506000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ea9190613057565b60206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906128f9565b6115449190613634565b90508082111561155957819b50889a50611560565b809b50879a505b60008c116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613356565b60405180910390fd5b505050505050505050505b9550959350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b9190612681565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390589896040518363ffffffff1660e01b815260040161167a929190613072565b60206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612681565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d91906128aa565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156117ef5760006117b2838a611c6a565b9050600081116117cc576002896117c991906135a9565b90505b6117d98c8b838b89611cd4565b955080896117e79190613634565b965050611834565b60006117fb828a611c6a565b9050600081116118155760028961181291906135a9565b90505b6118228c8c838b89611cd4565b965080896118309190613634565b9550505b505050509550959350505050565b600061184f878387611c08565b61185a868386611c08565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663e8e337008b8b8b8b600180307ff0000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b81526004016118c79897969594939291906130d2565b606060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190612922565b92509250925085156119bc57600083896119339190613634565b11156119705761196f33848a6119499190613634565b8c73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b6000828861197e9190613634565b11156119bb576119ba3383896119949190613634565b8b73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b5b8093505050509695505050505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a0e929190613072565b60206040518083038186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906128f9565b1115611a6a5750611ab7565b611ab5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b505b5050565b611b3c8363a9059cbb60e01b8484604051602401611ada929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b6000611ba3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661222f9092919063ffffffff16565b9050600081511115611c035780806020019051810190611bc39190612881565b611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf9906133b6565b60405180910390fd5b5b505050565b6000839050611c398360008373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b611c6483838373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b50505050565b60006107ca6107cd84611c7d91906135da565b611cb8623cda2986611c8f91906135da565b623cda2086611c9e91906135da565b611ca89190613553565b86611cb391906135da565b612247565b611cc29190613634565b611ccc91906135a9565b905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611d12578390506120c8565b611d1d868486611c08565b60008273ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401611d5a929190613072565b60206040518083038186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190612681565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613396565b60405180910390fd5b6000600267ffffffffffffffff811115611e5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8d5781602001602082028036833780820191505090505b5090508781600081518110611ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508681600181518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166338ed173987600184307ff0000000000000000000000000000000000000000000000000000000000000006040518663ffffffff1660e01b8152600401611fdc959493929190613431565b600060405180830381600087803b158015611ff657600080fd5b505af115801561200a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120339190612817565b600182516120419190613634565b81518110612078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250600083116120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906132f6565b60405180910390fd5b50505b95945050505050565b600081148061216a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612118929190613072565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906128f9565b145b6121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a0906133d6565b60405180910390fd5b61222a8363095ea7b360e01b84846040516024016121c8929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b606061223e84846000856122c1565b90509392505050565b600060038211156122ae578190506000600160028461226691906135a9565b6122709190613553565b90505b818110156122a857809150600281828561228d91906135a9565b6122979190613553565b6122a191906135a9565b9050612273565b506122bc565b600082146122bb57600190505b5b919050565b606082471015612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90613276565b60405180910390fd5b61230f85610e0f565b61234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613376565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123779190613040565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50915091506123c98282866123d5565b92505050949350505050565b606083156123e557829050612435565b6000835111156123f85782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c9190613194565b60405180910390fd5b9392505050565b600061244f61244a846134bc565b61348b565b9050808382526020820190508285602086028201111561246e57600080fd5b60005b8581101561249e5781612484888261262e565b845260208401935060208301925050600181019050612471565b5050509392505050565b6000813590506124b781613806565b92915050565b6000815190506124cc81613806565b92915050565b60008083601f8401126124e457600080fd5b8235905067ffffffffffffffff8111156124fd57600080fd5b60208301915083602082028301111561251557600080fd5b9250929050565b60008083601f84011261252e57600080fd5b8235905067ffffffffffffffff81111561254757600080fd5b60208301915083602082028301111561255f57600080fd5b9250929050565b600082601f83011261257757600080fd5b815161258784826020860161243c565b91505092915050565b60008135905061259f8161381d565b92915050565b6000815190506125b48161381d565b92915050565b60008083601f8401126125cc57600080fd5b8235905067ffffffffffffffff8111156125e557600080fd5b6020830191508360018202830111156125fd57600080fd5b9250929050565b60008151905061261381613834565b92915050565b6000813590506126288161384b565b92915050565b60008151905061263d8161384b565b92915050565b60008151905061265281613862565b92915050565b60006020828403121561266a57600080fd5b6000612678848285016124a8565b91505092915050565b60006020828403121561269357600080fd5b60006126a1848285016124bd565b91505092915050565b60008060008060008060008060008060006101408c8e0312156126cc57600080fd5b60006126da8e828f016124a8565b9b505060206126eb8e828f01612619565b9a505060406126fc8e828f016124a8565b995050606061270d8e828f016124a8565b985050608061271e8e828f01612619565b97505060a061272f8e828f016124a8565b96505060c08c013567ffffffffffffffff81111561274c57600080fd5b6127588e828f016125ba565b955095505060e061276b8e828f01612590565b93505061010061277d8e828f016124a8565b92505061012061278f8e828f01612590565b9150509295989b509295989b9093969950565b600080600080604085870312156127b857600080fd5b600085013567ffffffffffffffff8111156127d257600080fd5b6127de878288016124d2565b9450945050602085013567ffffffffffffffff8111156127fd57600080fd5b6128098782880161251c565b925092505092959194509250565b60006020828403121561282957600080fd5b600082015167ffffffffffffffff81111561284357600080fd5b61284f84828501612566565b91505092915050565b60006020828403121561286a57600080fd5b600061287884828501612590565b91505092915050565b60006020828403121561289357600080fd5b60006128a1848285016125a5565b91505092915050565b6000806000606084860312156128bf57600080fd5b60006128cd86828701612604565b93505060206128de86828701612604565b92505060406128ef86828701612643565b9150509250925092565b60006020828403121561290b57600080fd5b60006129198482850161262e565b91505092915050565b60008060006060848603121561293757600080fd5b60006129458682870161262e565b93505060206129568682870161262e565b92505060406129678682870161262e565b9150509250925092565b600061297d8383612989565b60208301905092915050565b61299281613668565b82525050565b6129a181613668565b82525050565b60006129b2826134f8565b6129bc8185613526565b93506129c7836134e8565b8060005b838110156129f85781516129df8882612971565b97506129ea83613519565b9250506001810190506129cb565b5085935050505092915050565b612a0e8161367a565b82525050565b6000612a1f82613503565b612a298185613537565b9350612a398185602086016136ec565b80840191505092915050565b612a4e816136da565b82525050565b6000612a5f8261350e565b612a698185613542565b9350612a798185602086016136ec565b612a82816137f5565b840191505092915050565b6000612a9a601583613542565b91507f546172676574206e6f7420417574686f72697a656400000000000000000000006000830152602082019050919050565b6000612ada601883613542565b91507f446f206e6f742073656e6420455448206469726563746c7900000000000000006000830152602082019050919050565b6000612b1a602683613542565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b80601483613542565b91507f496e76616c696420746f6b656e20616d6f756e740000000000000000000000006000830152602082019050919050565b6000612bc0601383613542565b91507f4574682073656e74207769746820746f6b656e000000000000000000000000006000830152602082019050919050565b6000612c00601283613542565b91507f54656d706f726172696c792050617573656400000000000000000000000000006000830152602082019050919050565b6000612c40602683613542565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ca6602383613542565b91507f496e76616c6964205f616d6f756e743a20496e70757420455448206d69736d6160008301527f74636800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0c601483613542565b91507f496e76616c696420496e707574206c656e6774680000000000000000000000006000830152602082019050919050565b6000612d4c602083613542565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d8c601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320320000000000000000006000830152602082019050919050565b6000612dcc602c83613542565b91507f4552523a2073686f756c6453656c6c456e7469726542616c616e63652069732060008301527f7472756520666f7220454f4100000000000000000000000000000000000000006020830152604082019050919050565b6000612e32601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320310000000000000000006000830152602082019050919050565b6000612e72601f83613542565b91507f5377617070656420746f20496e76616c696420496e7465726d656469617465006000830152602082019050919050565b6000612eb2601d83613542565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612ef2601183613542565b91507f4e6f205377617020417661696c61626c650000000000000000000000000000006000830152602082019050919050565b6000612f32602a83613542565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f98603683613542565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000612ffe601283613542565b91507f4572723a204869676820536c69707061676500000000000000000000000000006000830152602082019050919050565b61303a816136c0565b82525050565b600061304c8284612a14565b915081905092915050565b600060208201905061306c6000830184612998565b92915050565b60006040820190506130876000830185612998565b6130946020830184612998565b9392505050565b60006060820190506130b06000830186612998565b6130bd6020830185612998565b6130ca6040830184613031565b949350505050565b6000610100820190506130e8600083018b612998565b6130f5602083018a612998565b6131026040830189613031565b61310f6060830188613031565b61311c6080830187612a45565b61312960a0830186612a45565b61313660c0830185612998565b61314360e0830184613031565b9998505050505050505050565b60006040820190506131656000830185612998565b6131726020830184613031565b9392505050565b600060208201905061318e6000830184612a05565b92915050565b600060208201905081810360008301526131ae8184612a54565b905092915050565b600060208201905081810360008301526131cf81612a8d565b9050919050565b600060208201905081810360008301526131ef81612acd565b9050919050565b6000602082019050818103600083015261320f81612b0d565b9050919050565b6000602082019050818103600083015261322f81612b73565b9050919050565b6000602082019050818103600083015261324f81612bb3565b9050919050565b6000602082019050818103600083015261326f81612bf3565b9050919050565b6000602082019050818103600083015261328f81612c33565b9050919050565b600060208201905081810360008301526132af81612c99565b9050919050565b600060208201905081810360008301526132cf81612cff565b9050919050565b600060208201905081810360008301526132ef81612d3f565b9050919050565b6000602082019050818103600083015261330f81612d7f565b9050919050565b6000602082019050818103600083015261332f81612dbf565b9050919050565b6000602082019050818103600083015261334f81612e25565b9050919050565b6000602082019050818103600083015261336f81612e65565b9050919050565b6000602082019050818103600083015261338f81612ea5565b9050919050565b600060208201905081810360008301526133af81612ee5565b9050919050565b600060208201905081810360008301526133cf81612f25565b9050919050565b600060208201905081810360008301526133ef81612f8b565b9050919050565b6000602082019050818103600083015261340f81612ff1565b9050919050565b600060208201905061342b6000830184613031565b92915050565b600060a0820190506134466000830188613031565b6134536020830187612a45565b818103604083015261346581866129a7565b90506134746060830185612998565b6134816080830184613031565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156134b2576134b16137c6565b5b8060405250919050565b600067ffffffffffffffff8211156134d7576134d66137c6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061355e826136c0565b9150613569836136c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561359e5761359d613768565b5b828201905092915050565b60006135b4826136c0565b91506135bf836136c0565b9250826135cf576135ce613797565b5b828204905092915050565b60006135e5826136c0565b91506135f0836136c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362957613628613768565b5b828202905092915050565b600061363f826136c0565b915061364a836136c0565b92508282101561365d5761365c613768565b5b828203905092915050565b6000613673826136a0565b9050919050565b60008115159050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60006136e5826136c0565b9050919050565b60005b8381101561370a5780820151818401526020810190506136ef565b83811115613719576000848401525b50505050565b600061372a826136c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375d5761375c613768565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61380f81613668565b811461381a57600080fd5b50565b6138268161367a565b811461383157600080fd5b50565b61383d81613686565b811461384857600080fd5b50565b613854816136c0565b811461385f57600080fd5b50565b61386b816136ca565b811461387657600080fd5b5056fea26469706673582212207b914115c076e28e33b322681b0a26451a117d3a4a6fd48a6b117ad541099e6e64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000acc15dc74880c9944775448304b263d191c6077f000000000000000000000000000000000000000000000000000000000000000300000000000000000000000096b244391d98b62d19ae89b1a4dccf0fc56970c7000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1000000000000000000000000d3b02ff30c218c7f7756ba14bca075bf7c2c951e
-----Decoded View---------------
Arg [0] : targets (address[]): 0x96b244391D98B62D19aE89b1A4dCcf0fc56970C7,0xd0A01ec574D1fC6652eDF79cb2F880fd47D34Ab1,0xd3B02Ff30c218c7f7756BA14bcA075Bf7C2C951e
Arg [1] : wnative (address): 0xAcc15dC74880C9944775448304B263D191c6077F
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 00000000000000000000000096b244391d98b62d19ae89b1a4dccf0fc56970c7
Arg [4] : 000000000000000000000000d0a01ec574d1fc6652edf79cb2f880fd47d34ab1
Arg [5] : 000000000000000000000000d3b02ff30c218c7f7756ba14bca075bf7c2c951e
Deployed Bytecode Sourcemap
30022:12435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29969:9;29955:23;;:10;:23;;;;29947:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30022:12435;;;;;30228:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29465:86;;;;;;;;;;;;;:::i;:::-;;5543:103;;;;;;;;;;;;;:::i;:::-;;28286:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4892:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28358:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31484:917;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5801:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30228:31;;;;;;;;;;;;;:::o;29465:86::-;5123:12;:10;:12::i;:::-;5112:23;;:7;:5;:7::i;:::-;:23;;;5104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29536:7:::1;;;;;;;;;;;29535:8;29525:7;;:18;;;;;;;;;;;;;;;;;;29465:86::o:0;5543:103::-;5123:12;:10;:12::i;:::-;5112:23;;:7;:5;:7::i;:::-;:23;;;5104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5608:30:::1;5635:1;5608:18;:30::i;:::-;5543:103::o:0;28286:27::-;;;;;;;;;;;;;:::o;4892:87::-;4938:7;4965:6;;;;;;;;;;;4958:13;;4892:87;:::o;29559:342::-;5123:12;:10;:12::i;:::-;5112:23;;:7;:5;:7::i;:::-;:23;;;5104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29724:10:::1;;:17;;29706:7;;:14;;:35;29698:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29784:9;29779:115;29803:7;;:14;;29799:1;:18;29779:115;;;29869:10;;29880:1;29869:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29839:15;:27;29855:7;;29863:1;29855:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29839:27;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;29819:3;;;;;:::i;:::-;;;;29779:115;;;;29559:342:::0;;;;:::o;28358:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;31484:917::-;31879:22;28490:7;;;;;;;;;;;28486:102;;;28514:28;;;;;;;;;;:::i;:::-;;;;;;;;28486:102;31914:17:::1;31934:123;31960:25;32000:7;32022:24;31934:11;:123::i;:::-;31914:143;;32070:16;32089:226;32117:25;32157:12;32184:9;32208:11;32234:9;;32089:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32258:17;32290:14;32089:13;:226::i;:::-;32070:245;;32345:48;32359:8;32369:7;32378:14;32345:13;:48::i;:::-;32328:65;;28575:1;;31484:917:::0;;;;;;;;;;;;;:::o;5801:201::-;5123:12;:10;:12::i;:::-;5112:23;;:7;:5;:7::i;:::-;:23;;;5104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5910:1:::1;5890:22;;:8;:22;;;;5882:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5966:28;5985:8;5966:18;:28::i;:::-;5801:201:::0;:::o;3612:98::-;3665:7;3692:10;3685:17;;3612:98;:::o;6162:191::-;6236:16;6255:6;;;;;;;;;;;6236:25;;6281:8;6272:6;;:17;;;;;;;;;;;;;;;;;;6336:8;6305:40;;6326:8;6305:40;;;;;;;;;;;;6162:191;;:::o;32409:764::-;32545:7;32586:1;32569:19;;:5;:19;;;32565:576;;32623:1;32613:7;:11;32605:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:1;32672:9;:14;32664:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32761:24;32757:292;;;32836:30;32855:10;32836:18;:30::i;:::-;32806:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;32990:5;32983:23;;;33007:10;33027:4;32983:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32973:60;;32757:292;33063:66;33094:10;33114:4;33121:7;33070:5;33063:30;;;;:66;;;;;;:::i;:::-;32565:576;33158:7;33151:14;;32409:764;;;;;:::o;34192:1607::-;34468:7;34488:23;34522:25;34559:24;34585;34613:52;34642:12;34613:14;:52::i;:::-;34558:107;;;;34725:16;34696:45;;:25;:45;;;;:107;;;;;34787:16;34758:45;;:25;:45;;;;34696:107;34678:541;;;34906:183;34935:25;34979:12;35010:7;35036:11;35066:8;34906:10;:183::i;:::-;34867:222;;;;;;;;34678:541;;;35142:25;35122:45;;35200:7;35182:25;;34678:541;35305:20;35327;35351:181;35383:17;35415:16;35446;35477:15;35507:14;35351:17;:181::i;:::-;35304:228;;;;35565:226;35595:16;35630;35665:12;35696;35727:16;35762:14;35565:11;:226::i;:::-;35545:246;;;;;;;;34192:1607;;;;;;;;;:::o;33181:718::-;33311:22;33346:28;33388:7;33377:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33346:58;;33417:44;33431:20;33453:7;33417:13;:44::i;:::-;33474:20;33504:7;33497:25;;;33531:4;33497:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33474:63;;33559:7;33548:27;;;33576:6;33548:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33680:12;33631:7;33624:25;;;33658:4;33624:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;;;:::i;:::-;33594:98;;33729:12;33711:14;:30;;33703:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33777:56;33806:10;33818:14;33784:7;33777:28;;;;:56;;;;;:::i;:::-;33849:42;33855:10;33867:7;33876:14;33849:42;;;;;;;;:::i;:::-;;;;;;;;33181:718;;;;;;;:::o;7186:387::-;7246:4;7454:12;7521:7;7509:20;7501:28;;7564:1;7557:4;:8;7550:15;;;7186:387;;;:::o;15437:248::-;15581:96;15601:5;15631:27;;;15660:4;15666:2;15670:5;15608:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15581:19;:96::i;:::-;15437:248;;;;:::o;33907:277::-;34003:14;34019;34051:22;34091:12;34051:53;;34124:7;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34115:25;;34160:7;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34151:25;;33907:277;;;;:::o;37201:1860::-;37401:20;37423:25;37480:16;;;;;;;;;;;37465:31;;:11;:31;;;37461:262;;;37531:1;37521:7;:11;:35;;;;;37549:7;37536:9;:20;37521:35;37513:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37617:16;;;;;;;;;;;37611:31;;;37651:7;37611:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37685:7;37694:16;;;;;;;;;;;37677:34;;;;;;37461:262;37735:19;37798:1;37769:31;;:17;:31;;;37765:270;;;37835:1;37825:7;:11;:35;;;;;37853:7;37840:9;:20;37825:35;37817:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:7;37915:21;;37765:270;;;37969:54;37983:17;38002:11;38015:7;37969:13;:54::i;:::-;37765:270;38048:15;38065;38084:28;38099:12;38084:14;:28::i;:::-;38047:65;;;;38123:13;38146:7;38123:31;;38165:13;38188:7;38165:31;;38207:23;38233:6;:16;;;38258:4;38233:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38207:57;;38275:23;38301:6;:16;;;38326:4;38301:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38275:57;;38353:15;:28;38369:11;38353:28;;;;;;;;;;;;;;;;;;;;;;;;;38345:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38419:12;38437:11;:16;;38461:11;38474:8;38437:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38418:65;;;38502:7;38494:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38550:21;38621:15;38574:6;:16;;;38599:4;38574:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;38550:86;;38647:21;38718:15;38671:6;:16;;;38696:4;38671:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;38647:86;;38766:13;38750;:29;38746:235;;;38811:13;38796:28;;38859:7;38839:27;;38746:235;;;38914:13;38899:28;;38962:7;38942:27;;38746:235;39016:1;39001:12;:16;38993:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37201:1860;;;;;;;;;;;;;;;;;;;:::o;39069:1614::-;39287:20;39309;39342:30;39426:14;39407:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39342:120;;39475:19;39526:12;:20;;;39547:16;39565;39526:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39475:118;;39605:12;39619;39637:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39604:51;;;;;;;;;39692:16;39670:38;;:18;:38;;;39666:1010;;;39725:20;39748:36;39770:4;39776:7;39748:21;:36::i;:::-;39725:59;;39873:1;39857:12;:17;39853:49;;39901:1;39891:7;:11;;;;:::i;:::-;39876:26;;39853:49;39932:194;39963:18;40000:16;40035:12;40066:14;40099:12;39932;:194::i;:::-;39917:209;;40166:12;40156:7;:22;;;;:::i;:::-;40141:37;;39666:1010;;;;40211:20;40234:36;40256:4;40262:7;40234:21;:36::i;:::-;40211:59;;40359:1;40343:12;:17;40339:49;;40387:1;40377:7;:11;;;;:::i;:::-;40362:26;;40339:49;40418:194;40449:18;40486:16;40521:12;40552:14;40585:12;40418;:194::i;:::-;40403:209;;40652:12;40642:7;:22;;;;:::i;:::-;40627:37;;39666:1010;;39069:1614;;;;;;;;;;;;:::o;35807:1386::-;36050:7;36070:61;36084:16;36102:14;36118:12;36070:13;:61::i;:::-;36142;36156:16;36174:14;36190:12;36142:13;:61::i;:::-;36217:15;36234;36251:10;36298:14;36265:71;;;36355:16;36390;36425:12;36456;36487:1;36507;36535:4;30153:66;36265:317;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36216:366;;;;;;36599:16;36595:569;;;36713:1;36703:7;36688:12;:22;;;;:::i;:::-;:26;36684:201;;;36735:134;36795:10;36843:7;36828:12;:22;;;;:::i;:::-;36742:16;36735:37;;;;:134;;;;;:::i;:::-;36684:201;36981:1;36971:7;36956:12;:22;;;;:::i;:::-;:26;36952:201;;;37003:134;37063:10;37111:7;37096:12;:22;;;;:::i;:::-;37010:16;37003:37;;;;:134;;;;;:::i;:::-;36952:201;36595:569;37183:2;37176:9;;;;;35807:1386;;;;;;;;:::o;28901:267::-;28976:13;28999:5;28976:29;;29063:1;29020:6;:16;;;29045:4;29052:7;29020:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;29016:145;;;29066:7;;;29016:145;29103:46;29122:7;29131:17;29103:6;:18;;;;:46;;;;;:::i;:::-;28901:267;;;;:::o;15218:211::-;15335:86;15355:5;15385:23;;;15410:2;15414:5;15362:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15335:19;:86::i;:::-;15218:211;;;:::o;17791:716::-;18215:23;18241:69;18269:4;18241:69;;;;;;;;;;;;;;;;;18249:5;18241:27;;;;:69;;;;;:::i;:::-;18215:95;;18345:1;18325:10;:17;:21;18321:179;;;18422:10;18411:30;;;;;;;;;;;;:::i;:::-;18403:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18321:179;17791:716;;;:::o;29176:249::-;29301:13;29324:5;29301:29;;29341:30;29360:7;29369:1;29341:6;:18;;;;:30;;;;;:::i;:::-;29382:35;29401:7;29410:6;29382;:18;;;;:35;;;;;:::i;:::-;29176:249;;;;:::o;40691:304::-;40807:7;40983:4;40974;40962:9;:16;;;;:::i;:::-;40853:105;40934:7;40922:9;:19;;;;:::i;:::-;40910:7;40901:6;:16;;;;:::i;:::-;40900:42;;;;:::i;:::-;40887:9;:56;;;;:::i;:::-;40853:15;:105::i;:::-;:126;;;;:::i;:::-;40852:135;;;;:::i;:::-;40832:155;;40691:304;;;;:::o;41324:1130::-;41562:19;41627:23;41598:52;;:25;:52;;;41594:104;;;41674:12;41667:19;;;;41594:104;41710:70;41724:25;41751:14;41767:12;41710:13;:70::i;:::-;41793:12;41808;:20;;;41843:25;41883:23;41808:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41793:124;;41952:1;41936:18;;:4;:18;;;;41928:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41987:21;42025:1;42011:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41987:40;;42048:25;42038:4;42043:1;42038:7;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;;;42094:23;42084:4;42089:1;42084:7;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;42163:14;42144:73;;;42236:12;42267:1;42287:4;42318;30153:66;42144:221;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42380:1;42366:4;:11;:15;;;;:::i;:::-;42144:238;;;;;;;;;;;;;;;;;;;;;;42130:252;;42417:1;42403:11;:15;42395:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41324:1130;;;;;;;;;;:::o;15954:616::-;16327:1;16318:5;:10;16317:62;;;;16377:1;16334:5;:15;;;16358:4;16365:7;16334:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;16317:62;16295:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;16472:90;16492:5;16522:22;;;16546:7;16555:5;16499:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16472:19;:90::i;:::-;15954:616;;;:::o;9992:229::-;10129:12;10161:52;10183:6;10191:4;10197:1;10200:12;10161:21;:52::i;:::-;10154:59;;9992:229;;;;;:::o;27479:326::-;27524:6;27551:1;27547;:5;27543:232;;;27573:1;27569:5;;27589:6;27606:1;27602;27598;:5;;;;:::i;:::-;:9;;;;:::i;:::-;27589:18;;27622:92;27633:1;27629;:5;27622:92;;;27659:1;27655:5;;27697:1;27692;27688;27684;:5;;;;:::i;:::-;:9;;;;:::i;:::-;27683:15;;;;:::i;:::-;27679:19;;27622:92;;;27543:232;;;;27740:1;27735;:6;27731:44;;27762:1;27758:5;;27731:44;27543:232;27479:326;;;:::o;11112:510::-;11282:12;11340:5;11315:21;:30;;11307:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11407:18;11418:6;11407:10;:18::i;:::-;11399:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11473:12;11487:23;11514:6;:11;;11533:5;11540:4;11514:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11472:73;;;;11563:51;11580:7;11589:10;11601:12;11563:16;:51::i;:::-;11556:58;;;;11112:510;;;;;;:::o;13798:712::-;13948:12;13977:7;13973:530;;;14008:10;14001:17;;;;13973:530;14142:1;14122:10;:17;:21;14118:374;;;14320:10;14314:17;14381:15;14368:10;14364:2;14360:19;14353:44;14268:148;14463:12;14456:20;;;;;;;;;;;:::i;:::-;;;;;;;;13798:712;;;;;;:::o;24:644:1:-;;156:80;171:64;228:6;171:64;:::i;:::-;156:80;:::i;:::-;147:89;;256:5;284:6;277:5;270:21;310:4;303:5;299:16;292:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;402:1;399;392:12;350:2;430:1;415:247;440:6;437:1;434:13;415:247;;;507:3;535:48;579:3;567:10;535:48;:::i;:::-;530:3;523:61;613:4;608:3;604:14;597:21;;647:4;642:3;638:14;631:21;;475:187;462:1;459;455:9;450:14;;415:247;;;419:14;137:531;;;;;;;:::o;674:139::-;;758:6;745:20;736:29;;774:33;801:5;774:33;:::i;:::-;726:87;;;;:::o;819:143::-;;907:6;901:13;892:22;;923:33;950:5;923:33;:::i;:::-;882:80;;;;:::o;985:367::-;;;1118:3;1111:4;1103:6;1099:17;1095:27;1085:2;;1136:1;1133;1126:12;1085:2;1172:6;1159:20;1149:30;;1202:18;1194:6;1191:30;1188:2;;;1234:1;1231;1224:12;1188:2;1271:4;1263:6;1259:17;1247:29;;1325:3;1317:4;1309:6;1305:17;1295:8;1291:32;1288:41;1285:2;;;1342:1;1339;1332:12;1285:2;1075:277;;;;;:::o;1372:364::-;;;1502:3;1495:4;1487:6;1483:17;1479:27;1469:2;;1520:1;1517;1510:12;1469:2;1556:6;1543:20;1533:30;;1586:18;1578:6;1575:30;1572:2;;;1618:1;1615;1608:12;1572:2;1655:4;1647:6;1643:17;1631:29;;1709:3;1701:4;1693:6;1689:17;1679:8;1675:32;1672:41;1669:2;;;1726:1;1723;1716:12;1669:2;1459:277;;;;;:::o;1759:318::-;;1890:3;1883:4;1875:6;1871:17;1867:27;1857:2;;1908:1;1905;1898:12;1857:2;1941:6;1935:13;1966:105;2067:3;2059:6;2052:4;2044:6;2040:17;1966:105;:::i;:::-;1957:114;;1847:230;;;;;:::o;2083:133::-;;2164:6;2151:20;2142:29;;2180:30;2204:5;2180:30;:::i;:::-;2132:84;;;;:::o;2222:137::-;;2307:6;2301:13;2292:22;;2323:30;2347:5;2323:30;:::i;:::-;2282:77;;;;:::o;2378:351::-;;;2495:3;2488:4;2480:6;2476:17;2472:27;2462:2;;2513:1;2510;2503:12;2462:2;2549:6;2536:20;2526:30;;2579:18;2571:6;2568:30;2565:2;;;2611:1;2608;2601:12;2565:2;2648:4;2640:6;2636:17;2624:29;;2702:3;2694:4;2686:6;2682:17;2672:8;2668:32;2665:41;2662:2;;;2719:1;2716;2709:12;2662:2;2452:277;;;;;:::o;2735:143::-;;2823:6;2817:13;2808:22;;2839:33;2866:5;2839:33;:::i;:::-;2798:80;;;;:::o;2884:139::-;;2968:6;2955:20;2946:29;;2984:33;3011:5;2984:33;:::i;:::-;2936:87;;;;:::o;3029:143::-;;3117:6;3111:13;3102:22;;3133:33;3160:5;3133:33;:::i;:::-;3092:80;;;;:::o;3178:141::-;;3265:6;3259:13;3250:22;;3281:32;3307:5;3281:32;:::i;:::-;3240:79;;;;:::o;3325:262::-;;3433:2;3421:9;3412:7;3408:23;3404:32;3401:2;;;3449:1;3446;3439:12;3401:2;3492:1;3517:53;3562:7;3553:6;3542:9;3538:22;3517:53;:::i;:::-;3507:63;;3463:117;3391:196;;;;:::o;3593:284::-;;3712:2;3700:9;3691:7;3687:23;3683:32;3680:2;;;3728:1;3725;3718:12;3680:2;3771:1;3796:64;3852:7;3843:6;3832:9;3828:22;3796:64;:::i;:::-;3786:74;;3742:128;3670:207;;;;:::o;3883:1695::-;;;;;;;;;;;;4158:3;4146:9;4137:7;4133:23;4129:33;4126:2;;;4175:1;4172;4165:12;4126:2;4218:1;4243:53;4288:7;4279:6;4268:9;4264:22;4243:53;:::i;:::-;4233:63;;4189:117;4345:2;4371:53;4416:7;4407:6;4396:9;4392:22;4371:53;:::i;:::-;4361:63;;4316:118;4473:2;4499:53;4544:7;4535:6;4524:9;4520:22;4499:53;:::i;:::-;4489:63;;4444:118;4601:2;4627:53;4672:7;4663:6;4652:9;4648:22;4627:53;:::i;:::-;4617:63;;4572:118;4729:3;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4700:119;4858:3;4885:53;4930:7;4921:6;4910:9;4906:22;4885:53;:::i;:::-;4875:63;;4829:119;5015:3;5004:9;5000:19;4987:33;5047:18;5039:6;5036:30;5033:2;;;5079:1;5076;5069:12;5033:2;5115:64;5171:7;5162:6;5151:9;5147:22;5115:64;:::i;:::-;5097:82;;;;4958:231;5228:3;5255:50;5297:7;5288:6;5277:9;5273:22;5255:50;:::i;:::-;5245:60;;5199:116;5354:3;5381:53;5426:7;5417:6;5406:9;5402:22;5381:53;:::i;:::-;5371:63;;5325:119;5483:3;5511:50;5553:7;5544:6;5533:9;5529:22;5511:50;:::i;:::-;5500:61;;5454:117;4116:1462;;;;;;;;;;;;;;:::o;5584:727::-;;;;;5776:2;5764:9;5755:7;5751:23;5747:32;5744:2;;;5792:1;5789;5782:12;5744:2;5863:1;5852:9;5848:17;5835:31;5893:18;5885:6;5882:30;5879:2;;;5925:1;5922;5915:12;5879:2;5961:80;6033:7;6024:6;6013:9;6009:22;5961:80;:::i;:::-;5943:98;;;;5806:245;6118:2;6107:9;6103:18;6090:32;6149:18;6141:6;6138:30;6135:2;;;6181:1;6178;6171:12;6135:2;6217:77;6286:7;6277:6;6266:9;6262:22;6217:77;:::i;:::-;6199:95;;;;6061:243;5734:577;;;;;;;:::o;6317:420::-;;6461:2;6449:9;6440:7;6436:23;6432:32;6429:2;;;6477:1;6474;6467:12;6429:2;6541:1;6530:9;6526:17;6520:24;6571:18;6563:6;6560:30;6557:2;;;6603:1;6600;6593:12;6557:2;6631:89;6712:7;6703:6;6692:9;6688:22;6631:89;:::i;:::-;6621:99;;6491:239;6419:318;;;;:::o;6743:256::-;;6848:2;6836:9;6827:7;6823:23;6819:32;6816:2;;;6864:1;6861;6854:12;6816:2;6907:1;6932:50;6974:7;6965:6;6954:9;6950:22;6932:50;:::i;:::-;6922:60;;6878:114;6806:193;;;;:::o;7005:278::-;;7121:2;7109:9;7100:7;7096:23;7092:32;7089:2;;;7137:1;7134;7127:12;7089:2;7180:1;7205:61;7258:7;7249:6;7238:9;7234:22;7205:61;:::i;:::-;7195:71;;7151:125;7079:204;;;;:::o;7289:594::-;;;;7441:2;7429:9;7420:7;7416:23;7412:32;7409:2;;;7457:1;7454;7447:12;7409:2;7500:1;7525:64;7581:7;7572:6;7561:9;7557:22;7525:64;:::i;:::-;7515:74;;7471:128;7638:2;7664:64;7720:7;7711:6;7700:9;7696:22;7664:64;:::i;:::-;7654:74;;7609:129;7777:2;7803:63;7858:7;7849:6;7838:9;7834:22;7803:63;:::i;:::-;7793:73;;7748:128;7399:484;;;;;:::o;7889:284::-;;8008:2;7996:9;7987:7;7983:23;7979:32;7976:2;;;8024:1;8021;8014:12;7976:2;8067:1;8092:64;8148:7;8139:6;8128:9;8124:22;8092:64;:::i;:::-;8082:74;;8038:128;7966:207;;;;:::o;8179:596::-;;;;8332:2;8320:9;8311:7;8307:23;8303:32;8300:2;;;8348:1;8345;8338:12;8300:2;8391:1;8416:64;8472:7;8463:6;8452:9;8448:22;8416:64;:::i;:::-;8406:74;;8362:128;8529:2;8555:64;8611:7;8602:6;8591:9;8587:22;8555:64;:::i;:::-;8545:74;;8500:129;8668:2;8694:64;8750:7;8741:6;8730:9;8726:22;8694:64;:::i;:::-;8684:74;;8639:129;8290:485;;;;;:::o;8781:179::-;;8871:46;8913:3;8905:6;8871:46;:::i;:::-;8949:4;8944:3;8940:14;8926:28;;8861:99;;;;:::o;8966:108::-;9043:24;9061:5;9043:24;:::i;:::-;9038:3;9031:37;9021:53;;:::o;9080:118::-;9167:24;9185:5;9167:24;:::i;:::-;9162:3;9155:37;9145:53;;:::o;9234:732::-;;9382:54;9430:5;9382:54;:::i;:::-;9452:86;9531:6;9526:3;9452:86;:::i;:::-;9445:93;;9562:56;9612:5;9562:56;:::i;:::-;9641:7;9672:1;9657:284;9682:6;9679:1;9676:13;9657:284;;;9758:6;9752:13;9785:63;9844:3;9829:13;9785:63;:::i;:::-;9778:70;;9871:60;9924:6;9871:60;:::i;:::-;9861:70;;9717:224;9704:1;9701;9697:9;9692:14;;9657:284;;;9661:14;9957:3;9950:10;;9358:608;;;;;;;:::o;9972:109::-;10053:21;10068:5;10053:21;:::i;:::-;10048:3;10041:34;10031:50;;:::o;10087:373::-;;10219:38;10251:5;10219:38;:::i;:::-;10273:88;10354:6;10349:3;10273:88;:::i;:::-;10266:95;;10370:52;10415:6;10410:3;10403:4;10396:5;10392:16;10370:52;:::i;:::-;10447:6;10442:3;10438:16;10431:23;;10195:265;;;;;:::o;10466:147::-;10561:45;10600:5;10561:45;:::i;:::-;10556:3;10549:58;10539:74;;:::o;10619:364::-;;10735:39;10768:5;10735:39;:::i;:::-;10790:71;10854:6;10849:3;10790:71;:::i;:::-;10783:78;;10870:52;10915:6;10910:3;10903:4;10896:5;10892:16;10870:52;:::i;:::-;10947:29;10969:6;10947:29;:::i;:::-;10942:3;10938:39;10931:46;;10711:272;;;;;:::o;10989:319::-;;11152:67;11216:2;11211:3;11152:67;:::i;:::-;11145:74;;11249:23;11245:1;11240:3;11236:11;11229:44;11299:2;11294:3;11290:12;11283:19;;11135:173;;;:::o;11314:322::-;;11477:67;11541:2;11536:3;11477:67;:::i;:::-;11470:74;;11574:26;11570:1;11565:3;11561:11;11554:47;11627:2;11622:3;11618:12;11611:19;;11460:176;;;:::o;11642:370::-;;11805:67;11869:2;11864:3;11805:67;:::i;:::-;11798:74;;11902:34;11898:1;11893:3;11889:11;11882:55;11968:8;11963:2;11958:3;11954:12;11947:30;12003:2;11998:3;11994:12;11987:19;;11788:224;;;:::o;12018:318::-;;12181:67;12245:2;12240:3;12181:67;:::i;:::-;12174:74;;12278:22;12274:1;12269:3;12265:11;12258:43;12327:2;12322:3;12318:12;12311:19;;12164:172;;;:::o;12342:317::-;;12505:67;12569:2;12564:3;12505:67;:::i;:::-;12498:74;;12602:21;12598:1;12593:3;12589:11;12582:42;12650:2;12645:3;12641:12;12634:19;;12488:171;;;:::o;12665:316::-;;12828:67;12892:2;12887:3;12828:67;:::i;:::-;12821:74;;12925:20;12921:1;12916:3;12912:11;12905:41;12972:2;12967:3;12963:12;12956:19;;12811:170;;;:::o;12987:370::-;;13150:67;13214:2;13209:3;13150:67;:::i;:::-;13143:74;;13247:34;13243:1;13238:3;13234:11;13227:55;13313:8;13308:2;13303:3;13299:12;13292:30;13348:2;13343:3;13339:12;13332:19;;13133:224;;;:::o;13363:367::-;;13526:67;13590:2;13585:3;13526:67;:::i;:::-;13519:74;;13623:34;13619:1;13614:3;13610:11;13603:55;13689:5;13684:2;13679:3;13675:12;13668:27;13721:2;13716:3;13712:12;13705:19;;13509:221;;;:::o;13736:318::-;;13899:67;13963:2;13958:3;13899:67;:::i;:::-;13892:74;;13996:22;13992:1;13987:3;13983:11;13976:43;14045:2;14040:3;14036:12;14029:19;;13882:172;;;:::o;14060:330::-;;14223:67;14287:2;14282:3;14223:67;:::i;:::-;14216:74;;14320:34;14316:1;14311:3;14307:11;14300:55;14381:2;14376:3;14372:12;14365:19;;14206:184;;;:::o;14396:321::-;;14559:67;14623:2;14618:3;14559:67;:::i;:::-;14552:74;;14656:25;14652:1;14647:3;14643:11;14636:46;14708:2;14703:3;14699:12;14692:19;;14542:175;;;:::o;14723:376::-;;14886:67;14950:2;14945:3;14886:67;:::i;:::-;14879:74;;14983:34;14979:1;14974:3;14970:11;14963:55;15049:14;15044:2;15039:3;15035:12;15028:36;15090:2;15085:3;15081:12;15074:19;;14869:230;;;:::o;15105:321::-;;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15365:25;15361:1;15356:3;15352:11;15345:46;15417:2;15412:3;15408:12;15401:19;;15251:175;;;:::o;15432:329::-;;15595:67;15659:2;15654:3;15595:67;:::i;:::-;15588:74;;15692:33;15688:1;15683:3;15679:11;15672:54;15752:2;15747:3;15743:12;15736:19;;15578:183;;;:::o;15767:327::-;;15930:67;15994:2;15989:3;15930:67;:::i;:::-;15923:74;;16027:31;16023:1;16018:3;16014:11;16007:52;16085:2;16080:3;16076:12;16069:19;;15913:181;;;:::o;16100:315::-;;16263:67;16327:2;16322:3;16263:67;:::i;:::-;16256:74;;16360:19;16356:1;16351:3;16347:11;16340:40;16406:2;16401:3;16397:12;16390:19;;16246:169;;;:::o;16421:374::-;;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16681:34;16677:1;16672:3;16668:11;16661:55;16747:12;16742:2;16737:3;16733:12;16726:34;16786:2;16781:3;16777:12;16770:19;;16567:228;;;:::o;16801:386::-;;16964:67;17028:2;17023:3;16964:67;:::i;:::-;16957:74;;17061:34;17057:1;17052:3;17048:11;17041:55;17127:24;17122:2;17117:3;17113:12;17106:46;17178:2;17173:3;17169:12;17162:19;;16947:240;;;:::o;17193:316::-;;17356:67;17420:2;17415:3;17356:67;:::i;:::-;17349:74;;17453:20;17449:1;17444:3;17440:11;17433:41;17500:2;17495:3;17491:12;17484:19;;17339:170;;;:::o;17515:118::-;17602:24;17620:5;17602:24;:::i;:::-;17597:3;17590:37;17580:53;;:::o;17639:271::-;;17791:93;17880:3;17871:6;17791:93;:::i;:::-;17784:100;;17901:3;17894:10;;17773:137;;;;:::o;17916:222::-;;18047:2;18036:9;18032:18;18024:26;;18060:71;18128:1;18117:9;18113:17;18104:6;18060:71;:::i;:::-;18014:124;;;;:::o;18144:332::-;;18303:2;18292:9;18288:18;18280:26;;18316:71;18384:1;18373:9;18369:17;18360:6;18316:71;:::i;:::-;18397:72;18465:2;18454:9;18450:18;18441:6;18397:72;:::i;:::-;18270:206;;;;;:::o;18482:442::-;;18669:2;18658:9;18654:18;18646:26;;18682:71;18750:1;18739:9;18735:17;18726:6;18682:71;:::i;:::-;18763:72;18831:2;18820:9;18816:18;18807:6;18763:72;:::i;:::-;18845;18913:2;18902:9;18898:18;18889:6;18845:72;:::i;:::-;18636:288;;;;;;:::o;18930:1029::-;;19273:3;19262:9;19258:19;19250:27;;19287:71;19355:1;19344:9;19340:17;19331:6;19287:71;:::i;:::-;19368:72;19436:2;19425:9;19421:18;19412:6;19368:72;:::i;:::-;19450;19518:2;19507:9;19503:18;19494:6;19450:72;:::i;:::-;19532;19600:2;19589:9;19585:18;19576:6;19532:72;:::i;:::-;19614:81;19690:3;19679:9;19675:19;19666:6;19614:81;:::i;:::-;19705;19781:3;19770:9;19766:19;19757:6;19705:81;:::i;:::-;19796:73;19864:3;19853:9;19849:19;19840:6;19796:73;:::i;:::-;19879;19947:3;19936:9;19932:19;19923:6;19879:73;:::i;:::-;19240:719;;;;;;;;;;;:::o;19965:332::-;;20124:2;20113:9;20109:18;20101:26;;20137:71;20205:1;20194:9;20190:17;20181:6;20137:71;:::i;:::-;20218:72;20286:2;20275:9;20271:18;20262:6;20218:72;:::i;:::-;20091:206;;;;;:::o;20303:210::-;;20428:2;20417:9;20413:18;20405:26;;20441:65;20503:1;20492:9;20488:17;20479:6;20441:65;:::i;:::-;20395:118;;;;:::o;20519:313::-;;20670:2;20659:9;20655:18;20647:26;;20719:9;20713:4;20709:20;20705:1;20694:9;20690:17;20683:47;20747:78;20820:4;20811:6;20747:78;:::i;:::-;20739:86;;20637:195;;;;:::o;20838:419::-;;21042:2;21031:9;21027:18;21019:26;;21091:9;21085:4;21081:20;21077:1;21066:9;21062:17;21055:47;21119:131;21245:4;21119:131;:::i;:::-;21111:139;;21009:248;;;:::o;21263:419::-;;21467:2;21456:9;21452:18;21444:26;;21516:9;21510:4;21506:20;21502:1;21491:9;21487:17;21480:47;21544:131;21670:4;21544:131;:::i;:::-;21536:139;;21434:248;;;:::o;21688:419::-;;21892:2;21881:9;21877:18;21869:26;;21941:9;21935:4;21931:20;21927:1;21916:9;21912:17;21905:47;21969:131;22095:4;21969:131;:::i;:::-;21961:139;;21859:248;;;:::o;22113:419::-;;22317:2;22306:9;22302:18;22294:26;;22366:9;22360:4;22356:20;22352:1;22341:9;22337:17;22330:47;22394:131;22520:4;22394:131;:::i;:::-;22386:139;;22284:248;;;:::o;22538:419::-;;22742:2;22731:9;22727:18;22719:26;;22791:9;22785:4;22781:20;22777:1;22766:9;22762:17;22755:47;22819:131;22945:4;22819:131;:::i;:::-;22811:139;;22709:248;;;:::o;22963:419::-;;23167:2;23156:9;23152:18;23144:26;;23216:9;23210:4;23206:20;23202:1;23191:9;23187:17;23180:47;23244:131;23370:4;23244:131;:::i;:::-;23236:139;;23134:248;;;:::o;23388:419::-;;23592:2;23581:9;23577:18;23569:26;;23641:9;23635:4;23631:20;23627:1;23616:9;23612:17;23605:47;23669:131;23795:4;23669:131;:::i;:::-;23661:139;;23559:248;;;:::o;23813:419::-;;24017:2;24006:9;24002:18;23994:26;;24066:9;24060:4;24056:20;24052:1;24041:9;24037:17;24030:47;24094:131;24220:4;24094:131;:::i;:::-;24086:139;;23984:248;;;:::o;24238:419::-;;24442:2;24431:9;24427:18;24419:26;;24491:9;24485:4;24481:20;24477:1;24466:9;24462:17;24455:47;24519:131;24645:4;24519:131;:::i;:::-;24511:139;;24409:248;;;:::o;24663:419::-;;24867:2;24856:9;24852:18;24844:26;;24916:9;24910:4;24906:20;24902:1;24891:9;24887:17;24880:47;24944:131;25070:4;24944:131;:::i;:::-;24936:139;;24834:248;;;:::o;25088:419::-;;25292:2;25281:9;25277:18;25269:26;;25341:9;25335:4;25331:20;25327:1;25316:9;25312:17;25305:47;25369:131;25495:4;25369:131;:::i;:::-;25361:139;;25259:248;;;:::o;25513:419::-;;25717:2;25706:9;25702:18;25694:26;;25766:9;25760:4;25756:20;25752:1;25741:9;25737:17;25730:47;25794:131;25920:4;25794:131;:::i;:::-;25786:139;;25684:248;;;:::o;25938:419::-;;26142:2;26131:9;26127:18;26119:26;;26191:9;26185:4;26181:20;26177:1;26166:9;26162:17;26155:47;26219:131;26345:4;26219:131;:::i;:::-;26211:139;;26109:248;;;:::o;26363:419::-;;26567:2;26556:9;26552:18;26544:26;;26616:9;26610:4;26606:20;26602:1;26591:9;26587:17;26580:47;26644:131;26770:4;26644:131;:::i;:::-;26636:139;;26534:248;;;:::o;26788:419::-;;26992:2;26981:9;26977:18;26969:26;;27041:9;27035:4;27031:20;27027:1;27016:9;27012:17;27005:47;27069:131;27195:4;27069:131;:::i;:::-;27061:139;;26959:248;;;:::o;27213:419::-;;27417:2;27406:9;27402:18;27394:26;;27466:9;27460:4;27456:20;27452:1;27441:9;27437:17;27430:47;27494:131;27620:4;27494:131;:::i;:::-;27486:139;;27384:248;;;:::o;27638:419::-;;27842:2;27831:9;27827:18;27819:26;;27891:9;27885:4;27881:20;27877:1;27866:9;27862:17;27855:47;27919:131;28045:4;27919:131;:::i;:::-;27911:139;;27809:248;;;:::o;28063:419::-;;28267:2;28256:9;28252:18;28244:26;;28316:9;28310:4;28306:20;28302:1;28291:9;28287:17;28280:47;28344:131;28470:4;28344:131;:::i;:::-;28336:139;;28234:248;;;:::o;28488:419::-;;28692:2;28681:9;28677:18;28669:26;;28741:9;28735:4;28731:20;28727:1;28716:9;28712:17;28705:47;28769:131;28895:4;28769:131;:::i;:::-;28761:139;;28659:248;;;:::o;28913:222::-;;29044:2;29033:9;29029:18;29021:26;;29057:71;29125:1;29114:9;29110:17;29101:6;29057:71;:::i;:::-;29011:124;;;;:::o;29141:831::-;;29442:3;29431:9;29427:19;29419:27;;29456:71;29524:1;29513:9;29509:17;29500:6;29456:71;:::i;:::-;29537:80;29613:2;29602:9;29598:18;29589:6;29537:80;:::i;:::-;29664:9;29658:4;29654:20;29649:2;29638:9;29634:18;29627:48;29692:108;29795:4;29786:6;29692:108;:::i;:::-;29684:116;;29810:72;29878:2;29867:9;29863:18;29854:6;29810:72;:::i;:::-;29892:73;29960:3;29949:9;29945:19;29936:6;29892:73;:::i;:::-;29409:563;;;;;;;;:::o;29978:283::-;;30044:2;30038:9;30028:19;;30086:4;30078:6;30074:17;30193:6;30181:10;30178:22;30157:18;30145:10;30142:34;30139:62;30136:2;;;30204:18;;:::i;:::-;30136:2;30244:10;30240:2;30233:22;30018:243;;;;:::o;30267:311::-;;30434:18;30426:6;30423:30;30420:2;;;30456:18;;:::i;:::-;30420:2;30506:4;30498:6;30494:17;30486:25;;30566:4;30560;30556:15;30548:23;;30349:229;;;:::o;30584:132::-;;30674:3;30666:11;;30704:4;30699:3;30695:14;30687:22;;30656:60;;;:::o;30722:114::-;;30823:5;30817:12;30807:22;;30796:40;;;:::o;30842:98::-;;30927:5;30921:12;30911:22;;30900:40;;;:::o;30946:99::-;;31032:5;31026:12;31016:22;;31005:40;;;:::o;31051:113::-;;31153:4;31148:3;31144:14;31136:22;;31126:38;;;:::o;31170:184::-;;31303:6;31298:3;31291:19;31343:4;31338:3;31334:14;31319:29;;31281:73;;;;:::o;31360:147::-;;31498:3;31483:18;;31473:34;;;;:::o;31513:169::-;;31631:6;31626:3;31619:19;31671:4;31666:3;31662:14;31647:29;;31609:73;;;;:::o;31688:305::-;;31747:20;31765:1;31747:20;:::i;:::-;31742:25;;31781:20;31799:1;31781:20;:::i;:::-;31776:25;;31935:1;31867:66;31863:74;31860:1;31857:81;31854:2;;;31941:18;;:::i;:::-;31854:2;31985:1;31982;31978:9;31971:16;;31732:261;;;;:::o;31999:185::-;;32056:20;32074:1;32056:20;:::i;:::-;32051:25;;32090:20;32108:1;32090:20;:::i;:::-;32085:25;;32129:1;32119:2;;32134:18;;:::i;:::-;32119:2;32176:1;32173;32169:9;32164:14;;32041:143;;;;:::o;32190:348::-;;32253:20;32271:1;32253:20;:::i;:::-;32248:25;;32287:20;32305:1;32287:20;:::i;:::-;32282:25;;32475:1;32407:66;32403:74;32400:1;32397:81;32392:1;32385:9;32378:17;32374:105;32371:2;;;32482:18;;:::i;:::-;32371:2;32530:1;32527;32523:9;32512:20;;32238:300;;;;:::o;32544:191::-;;32604:20;32622:1;32604:20;:::i;:::-;32599:25;;32638:20;32656:1;32638:20;:::i;:::-;32633:25;;32677:1;32674;32671:8;32668:2;;;32682:18;;:::i;:::-;32668:2;32727:1;32724;32720:9;32712:17;;32589:146;;;;:::o;32741:96::-;;32807:24;32825:5;32807:24;:::i;:::-;32796:35;;32786:51;;;:::o;32843:90::-;;32920:5;32913:13;32906:21;32895:32;;32885:48;;;:::o;32939:114::-;;33016:30;33009:5;33005:42;32994:53;;32984:69;;;:::o;33059:126::-;;33136:42;33129:5;33125:54;33114:65;;33104:81;;;:::o;33191:77::-;;33257:5;33246:16;;33236:32;;;:::o;33274:93::-;;33350:10;33343:5;33339:22;33328:33;;33318:49;;;:::o;33373:121::-;;33464:24;33482:5;33464:24;:::i;:::-;33451:37;;33441:53;;;:::o;33500:307::-;33568:1;33578:113;33592:6;33589:1;33586:13;33578:113;;;33677:1;33672:3;33668:11;33662:18;33658:1;33653:3;33649:11;33642:39;33614:2;33611:1;33607:10;33602:15;;33578:113;;;33709:6;33706:1;33703:13;33700:2;;;33789:1;33780:6;33775:3;33771:16;33764:27;33700:2;33549:258;;;;:::o;33813:233::-;;33875:24;33893:5;33875:24;:::i;:::-;33866:33;;33921:66;33914:5;33911:77;33908:2;;;33991:18;;:::i;:::-;33908:2;34038:1;34031:5;34027:13;34020:20;;33856:190;;;:::o;34052:180::-;34100:77;34097:1;34090:88;34197:4;34194:1;34187:15;34221:4;34218:1;34211:15;34238:180;34286:77;34283:1;34276:88;34383:4;34380:1;34373:15;34407:4;34404:1;34397:15;34424:180;34472:77;34469:1;34462:88;34569:4;34566:1;34559:15;34593:4;34590:1;34583:15;34610:102;;34702:2;34698:7;34693:2;34686:5;34682:14;34678:28;34668:38;;34658:54;;;:::o;34718:122::-;34791:24;34809:5;34791:24;:::i;:::-;34784:5;34781:35;34771:2;;34830:1;34827;34820:12;34771:2;34761:79;:::o;34846:116::-;34916:21;34931:5;34916:21;:::i;:::-;34909:5;34906:32;34896:2;;34952:1;34949;34942:12;34896:2;34886:76;:::o;34968:122::-;35041:24;35059:5;35041:24;:::i;:::-;35034:5;35031:35;35021:2;;35080:1;35077;35070:12;35021:2;35011:79;:::o;35096:122::-;35169:24;35187:5;35169:24;:::i;:::-;35162:5;35159:35;35149:2;;35208:1;35205;35198:12;35149:2;35139:79;:::o;35224:120::-;35296:23;35313:5;35296:23;:::i;:::-;35289:5;35286:34;35276:2;;35334:1;35331;35324:12;35276:2;35266:78;:::o
Swarm Source
ipfs://7b914115c076e28e33b322681b0a26451a117d3a4a6fd48a6b117ad541099e6e
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.