Source Code
Overview
FRAX Balance | FXTL Balance
0 FRAX | 0 FXTL
FRAX Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SafuLens
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/**
*Submitted for verification at fraxscan.com on 2024-03-13
*/
// File: contracts/IERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.7.6;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
function symbol() external view returns (string memory);
}
// File: contracts/IRamsesV2Pool.sol
pragma solidity ^0.7.6;
interface IRamsesV2Pool {
function liquidity() external view returns (uint128);
function boostedLiquidity() external view returns (uint128);
function slot0() external view returns (uint160, int24, uint16, uint16, uint16, uint8, bool);
function token0() external view returns (address);
function token1() external view returns (address);
function fee() external view returns (uint24);
}
// File: contracts/IRamsesGaugeV2.sol
pragma solidity >=0.5.0 <0.9.0;
interface IRamsesGaugeV2 {
/// @notice Emitted when a reward notification is made.
/// @param from The address from which the reward is notified.
/// @param reward The address of the reward token.
/// @param amount The amount of rewards notified.
/// @param period The period for which the rewards are notified.
event NotifyReward(
address indexed from,
address indexed reward,
uint256 amount,
uint256 period
);
/// @notice Emitted when a bribe is made.
/// @param from The address from which the bribe is made.
/// @param reward The address of the reward token.
/// @param amount The amount of tokens bribed.
/// @param period The period for which the bribe is made.
event Bribe(
address indexed from,
address indexed reward,
uint256 amount,
uint256 period
);
/// @notice Emitted when rewards are claimed.
/// @param period The period for which the rewards are claimed.
/// @param _positionHash The identifier of the NFP for which rewards are claimed.
/// @param receiver The address of the receiver of the claimed rewards.
/// @param reward The address of the reward token.
/// @param amount The amount of rewards claimed.
event ClaimRewards(
uint256 period,
bytes32 _positionHash,
address receiver,
address reward,
uint256 amount
);
/// @notice Initializes the contract with the provided gaugeFactory, voter, and pool addresses.
/// @param _gaugeFactory The address of the gaugeFactory to set.
/// @param _voter The address of the voter to set.
/// @param _nfpManager The address of the NFP manager to set.
/// @param _feeCollector The address of the fee collector to set.
/// @param _pool The address of the pool to set.
function initialize(
address _gaugeFactory,
address _voter,
address _nfpManager,
address _feeCollector,
address _pool
) external;
/// @notice Retrieves the value of the firstPeriod variable.
/// @return The value of the firstPeriod variable.
function firstPeriod() external returns (uint256);
/// @notice Retrieves the total supply of a specific token for a given period.
/// @param period The period for which to retrieve the total supply.
/// @param token The address of the token for which to retrieve the total supply.
/// @return The total supply of the specified token for the given period.
function tokenTotalSupplyByPeriod(
uint256 period,
address token
) external view returns (uint256);
/// @notice Retrieves the total boosted seconds for a specific period.
/// @param period The period for which to retrieve the total boosted seconds.
/// @return The total boosted seconds for the specified period.
function periodTotalBoostedSeconds(
uint256 period
) external view returns (uint256);
/// @notice Retrieves the getTokenTotalSupplyByPeriod of the current period.
/// @dev included to support voter's left() check during distribute().
/// @param token The address of the token for which to retrieve the remaining amount.
/// @return The amount of tokens left to distribute in this period.
function left(address token) external view returns (uint256);
/// @notice Retrieves the reward rate for a specific reward address.
/// @dev this method returns the base rate without boost
/// @param token The address of the reward for which to retrieve the reward rate.
/// @return The reward rate for the specified reward address.
function rewardRate(address token) external view returns (uint256);
/// @notice Retrieves the claimed amount for a specific period, position hash, and user address.
/// @param period The period for which to retrieve the claimed amount.
/// @param _positionHash The identifier of the NFP for which to retrieve the claimed amount.
/// @param reward The address of the token for the claimed amount.
/// @return The claimed amount for the specified period, token ID, and user address.
function periodClaimedAmount(
uint256 period,
bytes32 _positionHash,
address reward
) external view returns (uint256);
/// @notice Retrieves the last claimed period for a specific token, token ID combination.
/// @param token The address of the reward token for which to retrieve the last claimed period.
/// @param _positionHash The identifier of the NFP for which to retrieve the last claimed period.
/// @return The last claimed period for the specified token and token ID.
function lastClaimByToken(
address token,
bytes32 _positionHash
) external view returns (uint256);
/// @notice Retrieves the reward address at the specified index in the rewards array.
/// @param index The index of the reward address to retrieve.
/// @return The reward address at the specified index.
function rewards(uint256 index) external view returns (address);
/// @notice Checks if a given address is a valid reward.
/// @param reward The address to check.
/// @return A boolean indicating whether the address is a valid reward.
function isReward(address reward) external view returns (bool);
/// @notice Returns an array of reward token addresses.
/// @return An array of reward token addresses.
function getRewardTokens() external view returns (address[] memory);
/// @notice Returns the hash used to store positions in a mapping
/// @param owner The address of the position owner
/// @param index The index of the position
/// @param tickLower The lower tick boundary of the position
/// @param tickUpper The upper tick boundary of the position
/// @return _hash The hash used to store positions in a mapping
function positionHash(
address owner,
uint256 index,
int24 tickLower,
int24 tickUpper
) external pure returns (bytes32);
/// @notice Retrieves the liquidity and boosted liquidity for a specific NFP.
/// @param tokenId The identifier of the NFP.
/// @return liquidity The liquidity of the position token.
/// @return boostedLiquidity The boosted liquidity of the position token.
/// @return veNftTokenId The attached veNFT
function positionInfo(
uint256 tokenId
)
external
view
returns (
uint128 liquidity,
uint128 boostedLiquidity,
uint256 veNftTokenId
);
/// @notice Returns the amount of rewards earned for an NFP.
/// @param token The address of the token for which to retrieve the earned rewards.
/// @param tokenId The identifier of the specific NFP for which to retrieve the earned rewards.
/// @return reward The amount of rewards earned for the specified NFP and tokens.
function earned(
address token,
uint256 tokenId
) external view returns (uint256 reward);
/// @notice Returns the amount of rewards earned during a period for an NFP.
/// @param period The period for which to retrieve the earned rewards.
/// @param token The address of the token for which to retrieve the earned rewards.
/// @param tokenId The identifier of the specific NFP for which to retrieve the earned rewards.
/// @return reward The amount of rewards earned for the specified NFP and tokens.
function periodEarned(
uint256 period,
address token,
uint256 tokenId
) external view returns (uint256);
/// @notice Retrieves the earned rewards for a specific period, token, owner, index, tickLower, and tickUpper.
/// @param period The period for which to retrieve the earned rewards.
/// @param token The address of the token for which to retrieve the earned rewards.
/// @param owner The address of the owner for which to retrieve the earned rewards.
/// @param index The index for which to retrieve the earned rewards.
/// @param tickLower The tick lower bound for which to retrieve the earned rewards.
/// @param tickUpper The tick upper bound for which to retrieve the earned rewards.
/// @return The earned rewards for the specified period, token, owner, index, tickLower, and tickUpper.
function periodEarned(
uint256 period,
address token,
address owner,
uint256 index,
int24 tickLower,
int24 tickUpper
) external view returns (uint256);
/// @notice Retrieves the earned rewards for a specific period, token, owner, index, tickLower, and tickUpper.
/// @dev used by getReward() and saves gas by saving states
/// @param period The period for which to retrieve the earned rewards.
/// @param token The address of the token for which to retrieve the earned rewards.
/// @param owner The address of the owner for which to retrieve the earned rewards.
/// @param index The index for which to retrieve the earned rewards.
/// @param tickLower The tick lower bound for which to retrieve the earned rewards.
/// @param tickUpper The tick upper bound for which to retrieve the earned rewards.
/// @param caching Whether to cache the results or not.
/// @return The earned rewards for the specified period, token, owner, index, tickLower, and tickUpper.
function cachePeriodEarned(
uint256 period,
address token,
address owner,
uint256 index,
int24 tickLower,
int24 tickUpper,
bool caching
) external returns (uint256);
/// @notice Notifies the contract about the amount of rewards to be distributed for a specific token.
/// @param token The address of the token for which to notify the reward amount.
/// @param amount The amount of rewards to be distributed.
function notifyRewardAmount(address token, uint256 amount) external;
/// @notice Retrieves the reward amount for a specific period, NFP, and token addresses.
/// @param period The period for which to retrieve the reward amount.
/// @param tokens The addresses of the tokens for which to retrieve the reward amount.
/// @param tokenId The identifier of the specific NFP for which to retrieve the reward amount.
/// @param receiver The address of the receiver of the reward amount.
function getPeriodReward(
uint256 period,
address[] calldata tokens,
uint256 tokenId,
address receiver
) external;
/// @notice Retrieves the rewards for a specific period, set of tokens, owner, index, tickLower, tickUpper, and receiver.
/// @param period The period for which to retrieve the rewards.
/// @param tokens An array of token addresses for which to retrieve the rewards.
/// @param owner The address of the owner for which to retrieve the rewards.
/// @param index The index for which to retrieve the rewards.
/// @param tickLower The tick lower bound for which to retrieve the rewards.
/// @param tickUpper The tick upper bound for which to retrieve the rewards.
/// @param receiver The address of the receiver of the rewards.
function getPeriodReward(
uint256 period,
address[] calldata tokens,
address owner,
uint256 index,
int24 tickLower,
int24 tickUpper,
address receiver
) external;
function getRewardForOwner(
uint256 tokenId,
address[] memory tokens
) external;
}
// File: contracts/IRamsesVoter.sol
pragma solidity ^0.7.6;
interface IRamsesVoter {
function gauges(address) external view returns (address);
function length() external view returns (uint256);
function pools(uint256) external view returns (address);
}
// File: contracts/IRamsesClFactory.sol
pragma solidity ^0.7.6;
interface IRamsesClFactory {
function getPool(address, address, uint24) external view returns (address);
}
// File: contracts/IRamsesNfpManager.sol
pragma solidity ^0.7.6;
interface IRamsesNfpManager {
function balanceOf(address) external view returns (uint256);
function tokenOfOwnerByIndex(address, uint256) external view returns (uint256);
function positions(uint256) external view returns (uint96,address,address,address,uint24,int24,int24,uint128,uint256,uint256,uint128,uint128);
function ownerOf(uint256) external view returns (address);
}
// File: contracts/SafuLensNoBoost.sol
pragma solidity ^0.7.6;
pragma abicoder v2;
struct ClData {
uint256 nft_id;
address token0;
address token1;
string symbol0;
string symbol1;
uint24 fee;
address pool_address;
address gauge_address;
uint256 pool_liquidity;
uint256 pool_boostedliq;
uint256 boostedliq;
int24 tick;
int24 tick_lower;
int24 tick_upper;
uint128 liquidity;
address[] rewardTokens;
uint256[] earnedTokens;
}
contract SafuLens {
IRamsesNfpManager public ramsesNfpManager =
IRamsesNfpManager(0xAAA78E8C4241990B4ce159E105dA08129345946A);
IRamsesClFactory public ramsesClFactory =
IRamsesClFactory(0xAAA32926fcE6bE95ea2c51cB4Fcb60836D320C42);
IRamsesVoter public ramsesVoter =
IRamsesVoter(0xAAAf3D9CDD3602d117c67D80eEC37a160C8d9869);
function nftIdsOfOwner(address owner) public view returns (uint256[] memory) {
uint256[] memory nft_ids = new uint256[](
ramsesNfpManager.balanceOf(owner)
);
for (uint256 i = 0; i < nft_ids.length; i++) {
nft_ids[i] = ramsesNfpManager.tokenOfOwnerByIndex(owner, i);
}
return nft_ids;
}
function getClData(uint256 nft_id) public view returns (ClData memory) {
ClData memory clData;
clData.nft_id = nft_id;
(
,
,
clData.token0,
clData.token1,
clData.fee,
clData.tick_lower,
clData.tick_upper,
clData.liquidity,
,
,
,
) = ramsesNfpManager.positions(nft_id);
clData.pool_address = ramsesClFactory.getPool(
clData.token0,
clData.token1,
clData.fee
);
clData.gauge_address = ramsesVoter.gauges(clData.pool_address);
clData.symbol0 = IERC20(clData.token0).symbol();
clData.symbol1 = IERC20(clData.token1).symbol();
clData.pool_liquidity = IRamsesV2Pool(clData.pool_address).liquidity();
clData.pool_boostedliq = 0;
(, clData.tick, , , , , ) = IRamsesV2Pool(clData.pool_address).slot0();
clData.rewardTokens = IRamsesGaugeV2(clData.gauge_address).getRewardTokens();
clData.earnedTokens = new uint256[](clData.rewardTokens.length);
for (uint256 i = 0; i < clData.rewardTokens.length; i++) {
clData.earnedTokens[i] = IRamsesGaugeV2(clData.gauge_address).earned(clData.rewardTokens[i], clData.nft_id);
}
return clData;
}
function getClDataBatched(
uint256[] memory nft_ids
) public view returns (ClData[] memory) {
ClData[] memory clData = new ClData[](nft_ids.length);
for (uint256 i = 0; i < nft_ids.length; i++) {
clData[i] = getClData(nft_ids[i]);
}
return clData;
}
function clDataOfOwner(
address owner
) public view returns (ClData[] memory) {
uint256[] memory nft_ids = nftIdsOfOwner(owner);
// Determine the starting index based on the length of the nft_ids array.
uint256 startIndex = nft_ids.length > 200 ? nft_ids.length - 200 : 0;
uint256 length = nft_ids.length - startIndex;
// Create a new array to store the last 200 (or less) NFT IDs.
uint256[] memory lastNftIds = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
lastNftIds[i] = nft_ids[startIndex + i];
}
return getClDataBatched(lastNftIds);
}
function checkNFTsExistence(uint256[] memory nftIds) public view returns (uint256[] memory) {
uint256[] memory existingNFTs = new uint256[](nftIds.length);
uint256 count = 0;
for (uint256 i = 0; i < nftIds.length; i++) {
try ramsesNfpManager.ownerOf(nftIds[i]) {
// If the call doesn't revert, the NFT exists
existingNFTs[count] = nftIds[i];
count++;
} catch {
// If the call reverts, the NFT doesn't exist, do nothing
}
}
// Resize the array to fit the actual number of existing NFTs
uint256[] memory resizedArray = new uint256[](count);
for (uint256 i = 0; i < count; i++) {
resizedArray[i] = existingNFTs[i];
}
return resizedArray;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"checkNFTsExistence","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"clDataOfOwner","outputs":[{"components":[{"internalType":"uint256","name":"nft_id","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"string","name":"symbol0","type":"string"},{"internalType":"string","name":"symbol1","type":"string"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"pool_address","type":"address"},{"internalType":"address","name":"gauge_address","type":"address"},{"internalType":"uint256","name":"pool_liquidity","type":"uint256"},{"internalType":"uint256","name":"pool_boostedliq","type":"uint256"},{"internalType":"uint256","name":"boostedliq","type":"uint256"},{"internalType":"int24","name":"tick","type":"int24"},{"internalType":"int24","name":"tick_lower","type":"int24"},{"internalType":"int24","name":"tick_upper","type":"int24"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"earnedTokens","type":"uint256[]"}],"internalType":"struct ClData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nft_id","type":"uint256"}],"name":"getClData","outputs":[{"components":[{"internalType":"uint256","name":"nft_id","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"string","name":"symbol0","type":"string"},{"internalType":"string","name":"symbol1","type":"string"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"pool_address","type":"address"},{"internalType":"address","name":"gauge_address","type":"address"},{"internalType":"uint256","name":"pool_liquidity","type":"uint256"},{"internalType":"uint256","name":"pool_boostedliq","type":"uint256"},{"internalType":"uint256","name":"boostedliq","type":"uint256"},{"internalType":"int24","name":"tick","type":"int24"},{"internalType":"int24","name":"tick_lower","type":"int24"},{"internalType":"int24","name":"tick_upper","type":"int24"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"earnedTokens","type":"uint256[]"}],"internalType":"struct ClData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nft_ids","type":"uint256[]"}],"name":"getClDataBatched","outputs":[{"components":[{"internalType":"uint256","name":"nft_id","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"string","name":"symbol0","type":"string"},{"internalType":"string","name":"symbol1","type":"string"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"pool_address","type":"address"},{"internalType":"address","name":"gauge_address","type":"address"},{"internalType":"uint256","name":"pool_liquidity","type":"uint256"},{"internalType":"uint256","name":"pool_boostedliq","type":"uint256"},{"internalType":"uint256","name":"boostedliq","type":"uint256"},{"internalType":"int24","name":"tick","type":"int24"},{"internalType":"int24","name":"tick_lower","type":"int24"},{"internalType":"int24","name":"tick_upper","type":"int24"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"earnedTokens","type":"uint256[]"}],"internalType":"struct ClData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nftIdsOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ramsesClFactory","outputs":[{"internalType":"contract IRamsesClFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ramsesNfpManager","outputs":[{"internalType":"contract IRamsesNfpManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ramsesVoter","outputs":[{"internalType":"contract IRamsesVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b031990811673aaa78e8c4241990b4ce159e105da08129345946a1790915560018054821673aaa32926fce6be95ea2c51cb4fcb60836d320c421790556002805490911673aaaf3d9cdd3602d117c67d80eec37a160c8d986917905534801561007657600080fd5b50611440806100866000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638b9b48071161005b5780638b9b4807146100fc5780638e03b42214610111578063c3bc213f14610119578063cdafe32d1461013957610088565b8063435520a11461008d5780634babecad146100b65780636a4417d9146100d657806387ed26df146100e9575b600080fd5b6100a061009b366004610ced565b610141565b6040516100ad9190611351565b60405180910390f35b6100c96100c4366004610dca565b6102bd565b6040516100ad91906112f1565b6100c96100e4366004610ced565b61035d565b6100a06100f7366004610dca565b610426565b6101046105dd565b6040516100ad919061129c565b6101046105ec565b61012c610127366004610f80565b6105fb565b6040516100ad9190611364565b610104610bc6565b600080546040516370a0823160e01b8152606092916001600160a01b0316906370a082319061017490869060040161129c565b60206040518083038186803b15801561018c57600080fd5b505afa1580156101a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c49190610f98565b67ffffffffffffffff811180156101da57600080fd5b50604051908082528060200260200182016040528015610204578160200160208202803683370190505b50905060005b81518110156102b457600054604051632f745c5960e01b81526001600160a01b0390911690632f745c599061024590879085906004016112d8565b60206040518083038186803b15801561025d57600080fd5b505afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610f98565b8282815181106102a157fe5b602090810291909101015260010161020a565b5090505b919050565b60606000825167ffffffffffffffff811180156102d957600080fd5b5060405190808252806020026020018201604052801561031357816020015b610300610bd5565b8152602001906001900390816102f85790505b50905060005b83518110156102b45761033e84828151811061033157fe5b60200260200101516105fb565b82828151811061034a57fe5b6020908102919091010152600101610319565b6060600061036a83610141565b9050600060c882511161037e576000610384565b60c88251035b825190915081900360008167ffffffffffffffff811180156103a557600080fd5b506040519080825280602002602001820160405280156103cf578160200160208202803683370190505b50905060005b828110156104125784818501815181106103eb57fe5b60200260200101518282815181106103ff57fe5b60209081029190910101526001016103d5565b5061041c816102bd565b9695505050505050565b60606000825167ffffffffffffffff8111801561044257600080fd5b5060405190808252806020026020018201604052801561046c578160200160208202803683370190505b5090506000805b845181101561054f5760005485516001600160a01b0390911690636352211e9087908490811061049f57fe5b60200260200101516040518263ffffffff1660e01b81526004016104c39190611377565b60206040518083038186803b1580156104db57600080fd5b505afa92505050801561050b575060408051601f3d908101601f1916820190925261050891810190610d10565b60015b61051457610547565b5084818151811061052157fe5b602002602001015183838151811061053557fe5b60209081029190910101526001909101905b600101610473565b5060008167ffffffffffffffff8111801561056957600080fd5b50604051908082528060200260200182016040528015610593578160200160208202803683370190505b50905060005b828110156105d4578381815181106105ad57fe5b60200260200101518282815181106105c157fe5b6020908102919091010152600101610599565b50949350505050565b6002546001600160a01b031681565b6001546001600160a01b031681565b610603610bd5565b61060b610bd5565b82815260005460405163133f757160e31b81526001600160a01b03909116906399fbab889061063e908690600401611377565b6101806040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190610fb0565b505050506001600160801b03166101c0890152600290810b810b6101a089015290810b900b61018087015262ffffff1660a086018190526001600160a01b039182166040808801829052938316602088018190526001549451630b4c774160e11b8152949093169550631698ee82945061070e939091906004016112b0565b60206040518083038186803b15801561072657600080fd5b505afa15801561073a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075e9190610d10565b6001600160a01b0390811660c0830181905260025460405163b9a09fd560e01b815292169163b9a09fd5916107959160040161129c565b60206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e59190610d10565b8160e001906001600160a01b031690816001600160a01b03168152505080602001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561083f57600080fd5b505afa158015610853573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087b9190810190610e4e565b816060018190525080604001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156108c057600080fd5b505afa1580156108d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108fc9190810190610e4e565b81608001819052508060c001516001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561094157600080fd5b505afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190610ecf565b6001600160801b0316816101000181815250506000816101200181815250508060c001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156109d557600080fd5b505afa1580156109e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0d9190610ee9565b5050505050600290810b900b6101608301525060e08101516040805163c4f59f9b60e01b815290516001600160a01b039092169163c4f59f9b91600480820192600092909190829003018186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa39190810190610d2c565b6101e082018190525167ffffffffffffffff81118015610ac257600080fd5b50604051908082528060200260200182016040528015610aec578160200160208202803683370190505b5061020082015260005b816101e00151518110156102b4578160e001516001600160a01b0316633e491d47836101e001518381518110610b2857fe5b602002602001015184600001516040518363ffffffff1660e01b8152600401610b529291906112d8565b60206040518083038186803b158015610b6a57600080fd5b505afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba29190610f98565b8261020001518281518110610bb357fe5b6020908102919091010152600101610af6565b6000546001600160a01b031681565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600062ffffff16815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600060020b8152602001600060020b8152602001600060020b815260200160006001600160801b0316815260200160608152602001606081525090565b80516102b8816113f2565b8051600281900b81146102b857600080fd5b80516001600160801b03811681146102b857600080fd5b805161ffff811681146102b857600080fd5b805162ffffff811681146102b857600080fd5b600060208284031215610cfe578081fd5b8135610d09816113f2565b9392505050565b600060208284031215610d21578081fd5b8151610d09816113f2565b60006020808385031215610d3e578182fd5b825167ffffffffffffffff811115610d54578283fd5b8301601f81018513610d64578283fd5b8051610d77610d72826113a4565b611380565b8181528381019083850185840285018601891015610d93578687fd5b8694505b83851015610dbe578051610daa816113f2565b835260019490940193918501918501610d97565b50979650505050505050565b60006020808385031215610ddc578182fd5b823567ffffffffffffffff811115610df2578283fd5b8301601f81018513610e02578283fd5b8035610e10610d72826113a4565b8181528381019083850185840285018601891015610e2c578687fd5b8694505b83851015610dbe578035835260019490940193918501918501610e30565b600060208284031215610e5f578081fd5b815167ffffffffffffffff80821115610e76578283fd5b818401915084601f830112610e89578283fd5b815181811115610e9557fe5b610ea8601f8201601f1916602001611380565b9150808252856020828501011115610ebe578384fd5b6105d48160208401602086016113c2565b600060208284031215610ee0578081fd5b610d0982610cb1565b600080600080600080600060e0888a031215610f03578283fd5b8751610f0e816113f2565b9650610f1c60208901610c9f565b9550610f2a60408901610cc8565b9450610f3860608901610cc8565b9350610f4660808901610cc8565b925060a088015160ff81168114610f5b578283fd5b60c08901519092508015158114610f70578182fd5b8091505092959891949750929550565b600060208284031215610f91578081fd5b5035919050565b600060208284031215610fa9578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215610fd2578586fd5b8c516bffffffffffffffffffffffff81168114610fed578687fd5b9b50610ffb60208e01610c94565b9a5061100960408e01610c94565b995061101760608e01610c94565b985061102560808e01610cda565b975061103360a08e01610c9f565b965061104160c08e01610c9f565b955061104f60e08e01610cb1565b94506101008d015193506101208d0151925061106e6101408e01610cb1565b915061107d6101608e01610cb1565b90509295989b509295989b509295989b565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156110d45781516001600160a01b0316875295820195908201906001016110af565b509495945050505050565b6000815180845260208085019450808401835b838110156110d4578151875295820195908201906001016110f2565b60020b9052565b6000815180845261112d8160208601602086016113c2565b601f01601f19169290920160200192915050565b600061022082518452602083015161115c602086018261108f565b50604083015161116f604086018261108f565b50606083015181606086015261118782860182611115565b915050608083015184820360808601526111a18282611115565b91505060a08301516111b660a0860182611293565b5060c08301516111c960c086018261108f565b5060e08301516111dc60e086018261108f565b50610100838101519085015261012080840151908501526101408084015190850152610160808401516112118287018261110e565b5050610180808401516112268287018261110e565b50506101a08084015161123b8287018261110e565b50506101c08084015161125082870182611286565b50506101e0808401518583038287015261126a838261109c565b92505050610200808401518583038287015261041c83826110df565b6001600160801b03169052565b62ffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561134457603f19888603018452611332858351611141565b94509285019290850190600101611316565b5092979650505050505050565b600060208252610d0960208301846110df565b600060208252610d096020830184611141565b90815260200190565b60405181810167ffffffffffffffff8111828210171561139c57fe5b604052919050565b600067ffffffffffffffff8211156113b857fe5b5060209081020190565b60005b838110156113dd5781810151838201526020016113c5565b838111156113ec576000848401525b50505050565b6001600160a01b038116811461140757600080fd5b5056fea2646970667358221220481d98ee60fe8bb7b39e64250b1c09a778856b622a76861c18a7abd24261536f64736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638b9b48071161005b5780638b9b4807146100fc5780638e03b42214610111578063c3bc213f14610119578063cdafe32d1461013957610088565b8063435520a11461008d5780634babecad146100b65780636a4417d9146100d657806387ed26df146100e9575b600080fd5b6100a061009b366004610ced565b610141565b6040516100ad9190611351565b60405180910390f35b6100c96100c4366004610dca565b6102bd565b6040516100ad91906112f1565b6100c96100e4366004610ced565b61035d565b6100a06100f7366004610dca565b610426565b6101046105dd565b6040516100ad919061129c565b6101046105ec565b61012c610127366004610f80565b6105fb565b6040516100ad9190611364565b610104610bc6565b600080546040516370a0823160e01b8152606092916001600160a01b0316906370a082319061017490869060040161129c565b60206040518083038186803b15801561018c57600080fd5b505afa1580156101a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c49190610f98565b67ffffffffffffffff811180156101da57600080fd5b50604051908082528060200260200182016040528015610204578160200160208202803683370190505b50905060005b81518110156102b457600054604051632f745c5960e01b81526001600160a01b0390911690632f745c599061024590879085906004016112d8565b60206040518083038186803b15801561025d57600080fd5b505afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610f98565b8282815181106102a157fe5b602090810291909101015260010161020a565b5090505b919050565b60606000825167ffffffffffffffff811180156102d957600080fd5b5060405190808252806020026020018201604052801561031357816020015b610300610bd5565b8152602001906001900390816102f85790505b50905060005b83518110156102b45761033e84828151811061033157fe5b60200260200101516105fb565b82828151811061034a57fe5b6020908102919091010152600101610319565b6060600061036a83610141565b9050600060c882511161037e576000610384565b60c88251035b825190915081900360008167ffffffffffffffff811180156103a557600080fd5b506040519080825280602002602001820160405280156103cf578160200160208202803683370190505b50905060005b828110156104125784818501815181106103eb57fe5b60200260200101518282815181106103ff57fe5b60209081029190910101526001016103d5565b5061041c816102bd565b9695505050505050565b60606000825167ffffffffffffffff8111801561044257600080fd5b5060405190808252806020026020018201604052801561046c578160200160208202803683370190505b5090506000805b845181101561054f5760005485516001600160a01b0390911690636352211e9087908490811061049f57fe5b60200260200101516040518263ffffffff1660e01b81526004016104c39190611377565b60206040518083038186803b1580156104db57600080fd5b505afa92505050801561050b575060408051601f3d908101601f1916820190925261050891810190610d10565b60015b61051457610547565b5084818151811061052157fe5b602002602001015183838151811061053557fe5b60209081029190910101526001909101905b600101610473565b5060008167ffffffffffffffff8111801561056957600080fd5b50604051908082528060200260200182016040528015610593578160200160208202803683370190505b50905060005b828110156105d4578381815181106105ad57fe5b60200260200101518282815181106105c157fe5b6020908102919091010152600101610599565b50949350505050565b6002546001600160a01b031681565b6001546001600160a01b031681565b610603610bd5565b61060b610bd5565b82815260005460405163133f757160e31b81526001600160a01b03909116906399fbab889061063e908690600401611377565b6101806040518083038186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190610fb0565b505050506001600160801b03166101c0890152600290810b810b6101a089015290810b900b61018087015262ffffff1660a086018190526001600160a01b039182166040808801829052938316602088018190526001549451630b4c774160e11b8152949093169550631698ee82945061070e939091906004016112b0565b60206040518083038186803b15801561072657600080fd5b505afa15801561073a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075e9190610d10565b6001600160a01b0390811660c0830181905260025460405163b9a09fd560e01b815292169163b9a09fd5916107959160040161129c565b60206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e59190610d10565b8160e001906001600160a01b031690816001600160a01b03168152505080602001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561083f57600080fd5b505afa158015610853573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087b9190810190610e4e565b816060018190525080604001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156108c057600080fd5b505afa1580156108d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108fc9190810190610e4e565b81608001819052508060c001516001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561094157600080fd5b505afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190610ecf565b6001600160801b0316816101000181815250506000816101200181815250508060c001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156109d557600080fd5b505afa1580156109e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0d9190610ee9565b5050505050600290810b900b6101608301525060e08101516040805163c4f59f9b60e01b815290516001600160a01b039092169163c4f59f9b91600480820192600092909190829003018186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa39190810190610d2c565b6101e082018190525167ffffffffffffffff81118015610ac257600080fd5b50604051908082528060200260200182016040528015610aec578160200160208202803683370190505b5061020082015260005b816101e00151518110156102b4578160e001516001600160a01b0316633e491d47836101e001518381518110610b2857fe5b602002602001015184600001516040518363ffffffff1660e01b8152600401610b529291906112d8565b60206040518083038186803b158015610b6a57600080fd5b505afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba29190610f98565b8261020001518281518110610bb357fe5b6020908102919091010152600101610af6565b6000546001600160a01b031681565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600062ffffff16815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600060020b8152602001600060020b8152602001600060020b815260200160006001600160801b0316815260200160608152602001606081525090565b80516102b8816113f2565b8051600281900b81146102b857600080fd5b80516001600160801b03811681146102b857600080fd5b805161ffff811681146102b857600080fd5b805162ffffff811681146102b857600080fd5b600060208284031215610cfe578081fd5b8135610d09816113f2565b9392505050565b600060208284031215610d21578081fd5b8151610d09816113f2565b60006020808385031215610d3e578182fd5b825167ffffffffffffffff811115610d54578283fd5b8301601f81018513610d64578283fd5b8051610d77610d72826113a4565b611380565b8181528381019083850185840285018601891015610d93578687fd5b8694505b83851015610dbe578051610daa816113f2565b835260019490940193918501918501610d97565b50979650505050505050565b60006020808385031215610ddc578182fd5b823567ffffffffffffffff811115610df2578283fd5b8301601f81018513610e02578283fd5b8035610e10610d72826113a4565b8181528381019083850185840285018601891015610e2c578687fd5b8694505b83851015610dbe578035835260019490940193918501918501610e30565b600060208284031215610e5f578081fd5b815167ffffffffffffffff80821115610e76578283fd5b818401915084601f830112610e89578283fd5b815181811115610e9557fe5b610ea8601f8201601f1916602001611380565b9150808252856020828501011115610ebe578384fd5b6105d48160208401602086016113c2565b600060208284031215610ee0578081fd5b610d0982610cb1565b600080600080600080600060e0888a031215610f03578283fd5b8751610f0e816113f2565b9650610f1c60208901610c9f565b9550610f2a60408901610cc8565b9450610f3860608901610cc8565b9350610f4660808901610cc8565b925060a088015160ff81168114610f5b578283fd5b60c08901519092508015158114610f70578182fd5b8091505092959891949750929550565b600060208284031215610f91578081fd5b5035919050565b600060208284031215610fa9578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215610fd2578586fd5b8c516bffffffffffffffffffffffff81168114610fed578687fd5b9b50610ffb60208e01610c94565b9a5061100960408e01610c94565b995061101760608e01610c94565b985061102560808e01610cda565b975061103360a08e01610c9f565b965061104160c08e01610c9f565b955061104f60e08e01610cb1565b94506101008d015193506101208d0151925061106e6101408e01610cb1565b915061107d6101608e01610cb1565b90509295989b509295989b509295989b565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156110d45781516001600160a01b0316875295820195908201906001016110af565b509495945050505050565b6000815180845260208085019450808401835b838110156110d4578151875295820195908201906001016110f2565b60020b9052565b6000815180845261112d8160208601602086016113c2565b601f01601f19169290920160200192915050565b600061022082518452602083015161115c602086018261108f565b50604083015161116f604086018261108f565b50606083015181606086015261118782860182611115565b915050608083015184820360808601526111a18282611115565b91505060a08301516111b660a0860182611293565b5060c08301516111c960c086018261108f565b5060e08301516111dc60e086018261108f565b50610100838101519085015261012080840151908501526101408084015190850152610160808401516112118287018261110e565b5050610180808401516112268287018261110e565b50506101a08084015161123b8287018261110e565b50506101c08084015161125082870182611286565b50506101e0808401518583038287015261126a838261109c565b92505050610200808401518583038287015261041c83826110df565b6001600160801b03169052565b62ffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561134457603f19888603018452611332858351611141565b94509285019290850190600101611316565b5092979650505050505050565b600060208252610d0960208301846110df565b600060208252610d096020830184611141565b90815260200190565b60405181810167ffffffffffffffff8111828210171561139c57fe5b604052919050565b600067ffffffffffffffff8211156113b857fe5b5060209081020190565b60005b838110156113dd5781810151838201526020016113c5565b838111156113ec576000848401525b50505050565b6001600160a01b038116811461140757600080fd5b5056fea2646970667358221220481d98ee60fe8bb7b39e64250b1c09a778856b622a76861c18a7abd24261536f64736f6c63430007060033
Deployed Bytecode Sourcemap
16702:4001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17074:363;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18839:319;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19166:676::-;;;;;;:::i;:::-;;:::i;19850:848::-;;;;;;:::i;:::-;;:::i;16966:99::-;;;:::i;:::-;;;;;;;:::i;16848:111::-;;;:::i;17445:1386::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16727:114::-;;;:::i;17074:363::-;17162:24;17217:16;;:33;;-1:-1:-1;;;17217:33:0;;17133:16;;17162:24;-1:-1:-1;;;;;17217:16:0;;:26;;:33;;17244:5;;17217:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17189:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17189:72:0;;17162:99;;17277:9;17272:131;17296:7;:14;17292:1;:18;17272:131;;;17345:16;;:46;;-1:-1:-1;;;17345:46:0;;-1:-1:-1;;;;;17345:16:0;;;;:36;;:46;;17382:5;;17389:1;;17345:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17332:7;17340:1;17332:10;;;;;;;;;;;;;;;;;:59;17312:3;;17272:131;;;-1:-1:-1;17422:7:0;-1:-1:-1;17074:363:0;;;;:::o;18839:319::-;18928:15;18956:22;18994:7;:14;18981:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18956:53;;19025:9;19020:105;19044:7;:14;19040:1;:18;19020:105;;;19092:21;19102:7;19110:1;19102:10;;;;;;;;;;;;;;19092:9;:21::i;:::-;19080:6;19087:1;19080:9;;;;;;;;;;;;;;;;;:33;19060:3;;19020:105;;19166:676;19241:15;19269:24;19296:20;19310:5;19296:13;:20::i;:::-;19269:47;;19412:18;19450:3;19433:7;:14;:20;:47;;19479:1;19433:47;;;19473:3;19456:7;:14;:20;19433:47;19508:14;;19412:68;;-1:-1:-1;19508:27:0;;;19491:14;19508:27;19650:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19650:21:0;;19620:51;;19689:9;19684:103;19708:6;19704:1;:10;19684:103;;;19752:7;19773:1;19760:10;:14;19752:23;;;;;;;;;;;;;;19736:10;19747:1;19736:13;;;;;;;;;;;;;;;;;:39;19716:3;;19684:103;;;;19806:28;19823:10;19806:16;:28::i;:::-;19799:35;19166:676;-1:-1:-1;;;;;;19166:676:0:o;19850:848::-;19924:16;19953:29;19999:6;:13;19985:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19985:28:0;;19953:60;;20024:13;20059:9;20054:363;20078:6;:13;20074:1;:17;20054:363;;;20117:16;;20142:9;;-1:-1:-1;;;;;20117:16:0;;;;:24;;20142:6;;20149:1;;20142:9;;;;;;;;;;;;20117:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20117:35:0;;;;;;;;-1:-1:-1;;20117:35:0;;;;;;;;;;;;:::i;:::-;;;20113:293;;;;;;20257:6;20264:1;20257:9;;;;;;;;;;;;;;20235:12;20248:5;20235:19;;;;;;;;;;;;;;;;;:31;20285:7;;;;;20113:293;20093:3;;20054:363;;;;20500:29;20546:5;20532:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20532:20:0;;20500:52;;20568:9;20563:96;20587:5;20583:1;:9;20563:96;;;20632:12;20645:1;20632:15;;;;;;;;;;;;;;20614:12;20627:1;20614:15;;;;;;;;;;;;;;;;;:33;20594:3;;20563:96;;;-1:-1:-1;20678:12:0;19850:848;-1:-1:-1;;;;19850:848:0:o;16966:99::-;;;-1:-1:-1;;;;;16966:99:0;;:::o;16848:111::-;;;-1:-1:-1;;;;;16848:111:0;;:::o;17445:1386::-;17501:13;;:::i;:::-;17527:20;;:::i;:::-;17560:22;;;:13;17861:16;:34;;-1:-1:-1;;;17861:34:0;;-1:-1:-1;;;;;17861:16:0;;;;:26;;:34;;17576:6;;17861:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;17593:302:0;17783:16;;;17593:302;;;;;;;17751:17;;;17593:302;;;;;;17719:17;;;17593:302;;;17694:10;;;17593:302;;;-1:-1:-1;;;;;17593:302:0;;;-1:-1:-1;17666:13:0;;;17593:302;;;;;;-1:-1:-1;17638:13:0;;17593:302;;;17930:15;;:115;;-1:-1:-1;;;17930:115:0;;:15;;;;;-1:-1:-1;17930:23:0;;-1:-1:-1;17930:115:0;;17593:302;;;17930:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17908:137:0;;;:19;;;:137;;;18079:11;;:39;;-1:-1:-1;;;18079:39:0;;:11;;;:18;;:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18056:6;:20;;:62;-1:-1:-1;;;;;18056:62:0;;;-1:-1:-1;;;;;18056:62:0;;;;;18153:6;:13;;;-1:-1:-1;;;;;18146:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18146:30:0;;;;;;;;;;;;:::i;:::-;18129:6;:14;;:47;;;;18211:6;:13;;;-1:-1:-1;;;;;18204:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18204:30:0;;;;;;;;;;;;:::i;:::-;18187:6;:14;;:47;;;;18283:6;:19;;;-1:-1:-1;;;;;18269:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18245:70:0;:6;:21;;:70;;;;;18351:1;18326:6;:22;;:26;;;;;18405:6;:19;;;-1:-1:-1;;;;;18391:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18363:70:0;;;;;;18366:11;;;18363:70;-1:-1:-1;18483:20:0;;;;18468:54;;;-1:-1:-1;;;18468:54:0;;;;-1:-1:-1;;;;;18468:52:0;;;;;;:54;;;;;;;;;;;;;;;:52;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18468:54:0;;;;;;;;;;;;:::i;:::-;18446:19;;;:76;;;18569:26;18555:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18555:41:0;-1:-1:-1;18533:19:0;;;:63;18612:9;18607:191;18631:6;:19;;;:26;18627:1;:30;18607:191;;;18719:6;:20;;;-1:-1:-1;;;;;18704:43:0;;18748:6;:19;;;18768:1;18748:22;;;;;;;;;;;;;;18772:6;:13;;;18704:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18679:6;:19;;;18699:1;18679:22;;;;;;;;;;;;;;;;;:107;18659:3;;18607:191;;16727:114;;;-1:-1:-1;;;;;16727:114:0;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:142:1:-;95:13;;117:33;95:13;117:33;:::i;161:166::-;240:13;;293:1;282:20;;;272:31;;262:2;;317:1;314;307:12;332:194;413:13;;-1:-1:-1;;;;;455:46:1;;445:57;;435:2;;516:1;513;506:12;531:165;611:13;;664:6;653:18;;643:29;;633:2;;686:1;683;676:12;701:167;781:13;;834:8;823:20;;813:31;;803:2;;858:1;855;848:12;873:259;;985:2;973:9;964:7;960:23;956:32;953:2;;;1006:6;998;991:22;953:2;1050:9;1037:23;1069:33;1096:5;1069:33;:::i;:::-;1121:5;943:189;-1:-1:-1;;;943:189:1:o;1137:263::-;;1260:2;1248:9;1239:7;1235:23;1231:32;1228:2;;;1281:6;1273;1266:22;1228:2;1318:9;1312:16;1337:33;1364:5;1337:33;:::i;1405:1020::-;;1531:2;1574;1562:9;1553:7;1549:23;1545:32;1542:2;;;1595:6;1587;1580:22;1542:2;1633:9;1627:16;1666:18;1658:6;1655:30;1652:2;;;1703:6;1695;1688:22;1652:2;1731:22;;1784:4;1776:13;;1772:27;-1:-1:-1;1762:2:1;;1818:6;1810;1803:22;1762:2;1852;1846:9;1875:65;1890:49;1936:2;1890:49;:::i;:::-;1875:65;:::i;:::-;1974:15;;;2005:12;;;;2037:11;;;2075;;;2067:20;;2063:29;;2060:42;-1:-1:-1;2057:2:1;;;2120:6;2112;2105:22;2057:2;2147:6;2138:15;;2162:233;2176:2;2173:1;2170:9;2162:233;;;2240:3;2234:10;2257:33;2284:5;2257:33;:::i;:::-;2303:18;;2194:1;2187:9;;;;;2341:12;;;;2373;;2162:233;;;-1:-1:-1;2414:5:1;1511:914;-1:-1:-1;;;;;;;1511:914:1:o;2430:953::-;;2545:2;2588;2576:9;2567:7;2563:23;2559:32;2556:2;;;2609:6;2601;2594:22;2556:2;2654:9;2641:23;2687:18;2679:6;2676:30;2673:2;;;2724:6;2716;2709:22;2673:2;2752:22;;2805:4;2797:13;;2793:27;-1:-1:-1;2783:2:1;;2839:6;2831;2824:22;2783:2;2880;2867:16;2903:65;2918:49;2964:2;2918:49;:::i;2903:65::-;3002:15;;;3033:12;;;;3065:11;;;3103;;;3095:20;;3091:29;;3088:42;-1:-1:-1;3085:2:1;;;3148:6;3140;3133:22;3085:2;3175:6;3166:15;;3190:163;3204:2;3201:1;3198:9;3190:163;;;3261:17;;3249:30;;3222:1;3215:9;;;;;3299:12;;;;3331;;3190:163;;3388:736;;3521:2;3509:9;3500:7;3496:23;3492:32;3489:2;;;3542:6;3534;3527:22;3489:2;3580:9;3574:16;3609:18;3650:2;3642:6;3639:14;3636:2;;;3671:6;3663;3656:22;3636:2;3714:6;3703:9;3699:22;3689:32;;3759:7;3752:4;3748:2;3744:13;3740:27;3730:2;;3786:6;3778;3771:22;3730:2;3820;3814:9;3842:2;3838;3835:10;3832:2;;;3848:9;3832:2;3881:52;3923:2;3904:13;;-1:-1:-1;;3900:27:1;3929:2;3896:36;3881:52;:::i;:::-;3868:65;;3956:2;3949:5;3942:17;3996:7;3991:2;3986;3982;3978:11;3974:20;3971:33;3968:2;;;4022:6;4014;4007:22;3968:2;4040:54;4091:2;4086;4079:5;4075:14;4070:2;4066;4062:11;4040:54;:::i;4129:220::-;;4252:2;4240:9;4231:7;4227:23;4223:32;4220:2;;;4273:6;4265;4258:22;4220:2;4301:42;4333:9;4301:42;:::i;4354:945::-;;;;;;;;4569:3;4557:9;4548:7;4544:23;4540:33;4537:2;;;4591:6;4583;4576:22;4537:2;4628:9;4622:16;4647:33;4674:5;4647:33;:::i;:::-;4699:5;-1:-1:-1;4723:49:1;4768:2;4753:18;;4723:49;:::i;:::-;4713:59;;4791:50;4837:2;4826:9;4822:18;4791:50;:::i;:::-;4781:60;;4860:50;4906:2;4895:9;4891:18;4860:50;:::i;:::-;4850:60;;4929:51;4975:3;4964:9;4960:19;4929:51;:::i;:::-;4919:61;;5025:3;5014:9;5010:19;5004:26;5074:4;5065:7;5061:18;5052:7;5049:31;5039:2;;5099:6;5091;5084:22;5039:2;5179:3;5164:19;;5158:26;5127:7;;-1:-1:-1;5222:15:1;;5215:23;5203:36;;5193:2;;5258:6;5250;5243:22;5193:2;5286:7;5276:17;;;4527:772;;;;;;;;;;:::o;5304:190::-;;5416:2;5404:9;5395:7;5391:23;5387:32;5384:2;;;5437:6;5429;5422:22;5384:2;-1:-1:-1;5465:23:1;;5374:120;-1:-1:-1;5374:120:1:o;5499:194::-;;5622:2;5610:9;5601:7;5597:23;5593:32;5590:2;;;5643:6;5635;5628:22;5590:2;-1:-1:-1;5671:16:1;;5580:113;-1:-1:-1;5580:113:1:o;5698:1224::-;;;;;;;;;;;;;6004:3;5992:9;5983:7;5979:23;5975:33;5972:2;;;6026:6;6018;6011:22;5972:2;6063:9;6057:16;6113:26;6106:5;6102:38;6095:5;6092:49;6082:2;;6160:6;6152;6145:22;6082:2;6188:5;-1:-1:-1;6212:51:1;6259:2;6244:18;;6212:51;:::i;:::-;6202:61;;6282:51;6329:2;6318:9;6314:18;6282:51;:::i;:::-;6272:61;;6352:51;6399:2;6388:9;6384:18;6352:51;:::i;:::-;6342:61;;6422:51;6468:3;6457:9;6453:19;6422:51;:::i;:::-;6412:61;;6492:50;6537:3;6526:9;6522:19;6492:50;:::i;:::-;6482:60;;6561:50;6606:3;6595:9;6591:19;6561:50;:::i;:::-;6551:60;;6630:52;6677:3;6666:9;6662:19;6630:52;:::i;:::-;6620:62;;6722:3;6711:9;6707:19;6701:26;6691:36;;6767:3;6756:9;6752:19;6746:26;6736:36;;6792:52;6839:3;6828:9;6824:19;6792:52;:::i;:::-;6781:63;;6864:52;6911:3;6900:9;6896:19;6864:52;:::i;:::-;6853:63;;5962:960;;;;;;;;;;;;;;:::o;6927:106::-;-1:-1:-1;;;;;6995:31:1;6983:44;;6973:60::o;7038:469::-;;7135:5;7129:12;7162:6;7157:3;7150:19;7188:4;7217:2;7212:3;7208:12;7201:19;;7254:2;7247:5;7243:14;7275:3;7287:195;7301:6;7298:1;7295:13;7287:195;;;7366:13;;-1:-1:-1;;;;;7362:39:1;7350:52;;7422:12;;;;7457:15;;;;7398:1;7316:9;7287:195;;;-1:-1:-1;7498:3:1;;7105:402;-1:-1:-1;;;;;7105:402:1:o;7512:443::-;;7609:5;7603:12;7636:6;7631:3;7624:19;7662:4;7691:2;7686:3;7682:12;7675:19;;7728:2;7721:5;7717:14;7749:3;7761:169;7775:6;7772:1;7769:13;7761:169;;;7836:13;;7824:26;;7870:12;;;;7905:15;;;;7797:1;7790:9;7761:169;;7960:93;8037:1;8026:20;8014:33;;8004:49::o;8058:260::-;;8140:5;8134:12;8167:6;8162:3;8155:19;8183:63;8239:6;8232:4;8227:3;8223:14;8216:4;8209:5;8205:16;8183:63;:::i;:::-;8300:2;8279:15;-1:-1:-1;;8275:29:1;8266:39;;;;8307:4;8262:50;;8110:208;-1:-1:-1;;8110:208:1:o;8323:2201::-;;8403:6;8436:5;8430:12;8425:3;8418:25;8489:4;8482:5;8478:16;8472:23;8504:50;8548:4;8543:3;8539:14;8525:12;8504:50;:::i;:::-;;8602:4;8595:5;8591:16;8585:23;8617:52;8663:4;8658:3;8654:14;8638;8617:52;:::i;:::-;;8717:4;8710:5;8706:16;8700:23;8755:2;8748:4;8743:3;8739:14;8732:26;8779:49;8824:2;8819:3;8815:12;8799:14;8779:49;:::i;:::-;8767:61;;;8876:4;8869:5;8865:16;8859:23;8924:3;8918:4;8914:14;8907:4;8902:3;8898:14;8891:38;8952:41;8988:4;8972:14;8952:41;:::i;:::-;8938:55;;;9041:4;9034:5;9030:16;9024:23;9056:51;9101:4;9096:3;9092:14;9076;9056:51;:::i;:::-;;9155:4;9148:5;9144:16;9138:23;9170:52;9216:4;9211:3;9207:14;9191;9170:52;:::i;:::-;;9270:4;9263:5;9259:16;9253:23;9285:52;9331:4;9326:3;9322:14;9306;9285:52;:::i;:::-;-1:-1:-1;9356:6:1;9398:14;;;9392:21;9378:12;;;9371:43;9433:6;9475:14;;;9469:21;9455:12;;;9448:43;9510:6;9552:14;;;9546:21;9532:12;;;9525:43;9587:6;9630:14;;;9624:21;9654:48;9689:12;;;9624:21;9654:48;:::i;:::-;;;9721:6;9775:2;9768:5;9764:14;9758:21;9788:48;9832:2;9827:3;9823:12;9807:14;9788:48;:::i;:::-;;;9855:6;9909:2;9902:5;9898:14;9892:21;9922:48;9966:2;9961:3;9957:12;9941:14;9922:48;:::i;:::-;;;9989:6;10044:2;10037:5;10033:14;10027:21;10057:51;10104:2;10099:3;10095:12;10078:15;10057:51;:::i;:::-;;;10127:6;10182:2;10175:5;10171:14;10165:21;10228:3;10220:6;10216:16;10211:2;10206:3;10202:12;10195:38;10256:59;10308:6;10291:15;10256:59;:::i;:::-;10242:73;;;;10335:6;10390:3;10383:5;10379:15;10373:22;10438:3;10430:6;10426:16;10420:3;10415;10411:13;10404:39;10459:59;10511:6;10494:15;10459:59;:::i;10529:121::-;-1:-1:-1;;;;;10597:46:1;10585:59;;10575:75::o;10655:94::-;10733:8;10722:20;10710:33;;10700:49::o;10754:203::-;-1:-1:-1;;;;;10918:32:1;;;;10900:51;;10888:2;10873:18;;10855:102::o;10962:388::-;-1:-1:-1;;;;;11218:15:1;;;11200:34;;11270:15;;;;11265:2;11250:18;;11243:43;11334:8;11322:21;;;11317:2;11302:18;;11295:49;11150:2;11135:18;;11117:233::o;11355:274::-;-1:-1:-1;;;;;11547:32:1;;;;11529:51;;11611:2;11596:18;;11589:34;11517:2;11502:18;;11484:145::o;11634:843::-;;11851:2;11891;11880:9;11876:18;11921:2;11910:9;11903:21;11944:6;11979;11973:13;12010:6;12002;11995:22;12048:2;12037:9;12033:18;12026:25;;12111:2;12105;12097:6;12093:15;12082:9;12078:31;12074:40;12060:54;;12149:2;12141:6;12137:15;12170:4;12183:265;12197:6;12194:1;12191:13;12183:265;;;12290:2;12286:7;12274:9;12266:6;12262:22;12258:36;12253:3;12246:49;12318:50;12361:6;12352;12346:13;12318:50;:::i;:::-;12308:60;-1:-1:-1;12426:12:1;;;;12391:15;;;;12219:1;12212:9;12183:265;;;-1:-1:-1;12465:6:1;;11831:646;-1:-1:-1;;;;;;;11831:646:1:o;12482:267::-;;12661:2;12650:9;12643:21;12681:62;12739:2;12728:9;12724:18;12716:6;12681:62;:::i;13447:256::-;;13622:2;13611:9;13604:21;13642:55;13693:2;13682:9;13678:18;13670:6;13642:55;:::i;13708:177::-;13854:25;;;13842:2;13827:18;;13809:76::o;13890:242::-;13960:2;13954:9;13990:17;;;14037:18;14022:34;;14058:22;;;14019:62;14016:2;;;14084:9;14016:2;14111;14104:22;13934:198;;-1:-1:-1;13934:198:1:o;14137:183::-;;14236:18;14228:6;14225:30;14222:2;;;14258:9;14222:2;-1:-1:-1;14309:4:1;14290:17;;;14286:28;;14212:108::o;14325:258::-;14397:1;14407:113;14421:6;14418:1;14415:13;14407:113;;;14497:11;;;14491:18;14478:11;;;14471:39;14443:2;14436:10;14407:113;;;14538:6;14535:1;14532:13;14529:2;;;14573:1;14564:6;14559:3;14555:16;14548:27;14529:2;;14378:205;;;:::o;14588:133::-;-1:-1:-1;;;;;14665:31:1;;14655:42;;14645:2;;14711:1;14708;14701:12;14645:2;14635:86;:::o
Swarm Source
ipfs://481d98ee60fe8bb7b39e64250b1c09a778856b622a76861c18a7abd24261536f
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.