ETH Price: $2,519.84 (+13.79%)
Gas: 1.18 Gwei
 

Overview

Max Total Supply

12.898731199092339414 YSETH6MJD

Holders

229

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
uiassh.eth
Balance
0.002691885729397133 YSETH6MJD

Value
$0.00
0xf0a82ea8cb867ef4a4252e94a05092a9e450cddd
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Strategy

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 26 : Strategy.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.6;
import "@yield-protocol/utils-v2/contracts/access/AccessControl.sol";
import "@yield-protocol/utils-v2/contracts/token/SafeERC20Namer.sol";
import "@yield-protocol/utils-v2/contracts/token/MinimalTransferHelper.sol";
import "@yield-protocol/utils-v2/contracts/token/IERC20.sol";
import "@yield-protocol/utils-v2/contracts/token/ERC20Rewards.sol";
import "@yield-protocol/utils-v2/contracts/cast/CastU256I128.sol";
import "@yield-protocol/utils-v2/contracts/cast/CastU128I128.sol";
import "@yield-protocol/vault-interfaces/DataTypes.sol";
import "@yield-protocol/vault-interfaces/ICauldron.sol";
import "@yield-protocol/vault-interfaces/ILadle.sol";
import "@yield-protocol/yieldspace-interfaces/IPool.sol";
import "@yield-protocol/yieldspace-v2/contracts/extensions/YieldMathExtensions.sol";
library DivUp {
function divUp(uint256 a, uint256 b) internal pure returns(uint256 c) {
a % b == 0 ? c = a / b : c = a / b + 1;
}
}
/// @dev The Pool contract exchanges base for fyToken at a price defined by a specific formula.
contract Strategy is AccessControl, ERC20Rewards {
using DivUp for uint256;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 26 : AccessControl.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
*
* Roles are referred to by their `bytes4` identifier. These are expected to be the
* signatures for all the functions in the contract. Special roles should be exposed
* in the external API and be unique:
*
* ```
* bytes4 public constant ROOT = 0x00000000;
* ```
*
* Roles represent restricted access to a function call. For that purpose, use {auth}:
*
* ```
* function foo() public auth {
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 26 : SafeERC20Namer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
import "../token/IERC20Metadata.sol";
import "../utils/AddressStringUtil.sol";
// produces token descriptors from inconsistent or absent ERC20 symbol implementations that can return string or bytes32
// this library will always produce a string symbol to represent the token
library SafeERC20Namer {
function bytes32ToString(bytes32 x) private pure returns (string memory) {
bytes memory bytesString = new bytes(32);
uint256 charCount = 0;
for (uint256 j = 0; j < 32; j++) {
bytes1 char = x[j];
if (char != 0) {
bytesString[charCount] = char;
charCount++;
}
}
bytes memory bytesStringTrimmed = new bytes(charCount);
for (uint256 j = 0; j < charCount; j++) {
bytesStringTrimmed[j] = bytesString[j];
}
return string(bytesStringTrimmed);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 26 : MinimalTransferHelper.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
// Taken from https://github.com/Uniswap/uniswap-lib/blob/master/contracts/libraries/TransferHelper.sol
pragma solidity >=0.6.0;
import "./IERC20.sol";
import "../utils/RevertMsgExtractor.sol";
// helper methods for transferring ERC20 tokens that do not consistently return true/false
library MinimalTransferHelper {
/// @notice Transfers tokens from msg.sender to a recipient
/// @dev Errors with the underlying revert message if transfer fails
/// @param token The contract address of the token which will be transferred
/// @param to The recipient of the transfer
/// @param value The value of the transfer
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
if (!(success && (data.length == 0 || abi.decode(data, (bool))))) revert(RevertMsgExtractor.getRevertMsg(data));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 26 : IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 26 : ERC20Rewards.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./ERC20Permit.sol";
import "../access/AccessControl.sol";
import "../utils/RevertMsgExtractor.sol";
import "../token/MinimalTransferHelper.sol";
import "../cast/CastU256U128.sol";
import "../cast/CastU256U32.sol";
/// @dev A token inheriting from ERC20Rewards will reward token holders with a rewards token.
/// The rewarded amount will be a fixed wei per second, distributed proportionally to token holders
/// by the size of their holdings.
contract ERC20Rewards is AccessControl, ERC20Permit {
using MinimalTransferHelper for IERC20;
using CastU256U32 for uint256;
using CastU256U128 for uint256;
event RewardsTokenSet(IERC20 token);
event RewardsSet(uint32 start, uint32 end, uint256 rate);
event RewardsPerTokenUpdated(uint256 accumulated);
event UserRewardsUpdated(address user, uint256 userRewards, uint256 paidRewardPerToken);
event Claimed(address receiver, uint256 claimed);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 26 : CastU256I128.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library CastU256I128 {
/// @dev Safe casting from uint256 to int256
function i128(uint256 x) internal pure returns(int128) {
require(x <= uint256(int256(type(int128).max)), "Cast overflow");
return int128(int256(x));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 26 : CastU128I128.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library CastU128I128 {
/// @dev Safely cast an uint128 to an int128
function i128(uint128 x) internal pure returns (int128 y) {
require (x <= uint128(type(int128).max), "Cast overflow");
y = int128(x);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 26 : DataTypes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IFYToken.sol";
import "./IOracle.sol";
library DataTypes {
struct Series {
IFYToken fyToken; // Redeemable token for the series.
bytes6 baseId; // Asset received on redemption.
uint32 maturity; // Unix time at which redemption becomes possible.
// bytes2 free
}
struct Debt {
uint96 max; // Maximum debt accepted for a given underlying, across all series
uint24 min; // Minimum debt accepted for a given underlying, across all series
uint8 dec; // Multiplying factor (10**dec) for max and min
uint128 sum; // Current debt for a given underlying, across all series
}
struct SpotOracle {
IOracle oracle; // Address for the spot price oracle
uint32 ratio; // Collateralization ratio to multiply the price for
// bytes8 free
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 26 : ICauldron.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IFYToken.sol";
import "./IOracle.sol";
import "./DataTypes.sol";
interface ICauldron {
/// @dev Variable rate lending oracle for an underlying
function lendingOracles(bytes6 baseId) external view returns (IOracle);
/// @dev An user can own one or more Vaults, with each vault being able to borrow from a single series.
function vaults(bytes12 vault)
external
view
returns (DataTypes.Vault memory);
/// @dev Series available in Cauldron.
function series(bytes6 seriesId)
external
view
returns (DataTypes.Series memory);
/// @dev Assets available in Cauldron.
function assets(bytes6 assetsId) external view returns (address);
/// @dev Each vault records debt and collateral balances_.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 26 : ILadle.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IJoin.sol";
import "./ICauldron.sol";
interface ILadle {
function joins(bytes6) external view returns (IJoin);
function pools(bytes6) external returns (address);
function cauldron() external view returns (ICauldron);
function build(
bytes6 seriesId,
bytes6 ilkId,
uint8 salt
) external returns (bytes12 vaultId, DataTypes.Vault memory vault);
function destroy(bytes12 vaultId) external;
function pour(
bytes12 vaultId,
address to,
int128 ink,
int128 art
) external payable;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 26 : IPool.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >= 0.8.0;
import "@yield-protocol/utils-v2/contracts/token/IERC20.sol";
import "@yield-protocol/utils-v2/contracts/token/IERC2612.sol";
import "@yield-protocol/vault-interfaces/IFYToken.sol";
interface IPool is IERC20, IERC2612 {
function ts() external view returns(int128);
function g1() external view returns(int128);
function g2() external view returns(int128);
function maturity() external view returns(uint32);
function scaleFactor() external view returns(uint96);
function getCache() external view returns (uint112, uint112, uint32);
function base() external view returns(IERC20);
function fyToken() external view returns(IFYToken);
function getBaseBalance() external view returns(uint112);
function getFYTokenBalance() external view returns(uint112);
function retrieveBase(address to) external returns(uint128 retrieved);
function retrieveFYToken(address to) external returns(uint128 retrieved);
function sellBase(address to, uint128 min) external returns(uint128);
function buyBase(address to, uint128 baseOut, uint128 max) external returns(uint128);
function sellFYToken(address to, uint128 min) external returns(uint128);
function buyFYToken(address to, uint128 fyTokenOut, uint128 max) external returns(uint128);
function sellBasePreview(uint128 baseIn) external view returns(uint128);
function buyBasePreview(uint128 baseOut) external view returns(uint128);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 26 : YieldMathExtensions.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.6;
import "@yield-protocol/yieldspace-interfaces/IPool.sol";
import "../YieldMath.sol";
library YieldMathExtensions {
/// @dev Calculate the invariant for this pool
function invariant(IPool pool) external view returns (uint128) {
uint32 maturity = pool.maturity();
uint32 timeToMaturity = (maturity > uint32(block.timestamp)) ? maturity - uint32(block.timestamp) : 0;
return YieldMath.invariant(
pool.getBaseBalance(),
pool.getFYTokenBalance(),
pool.totalSupply(),
timeToMaturity,
pool.ts()
);
}
/// @dev max amount of fyTokens that can be bought from the pool
function maxFYTokenOut(IPool pool) external view returns (uint128) {
(uint112 _baseCached, uint112 _fyTokenCached,) = pool.getCache();
uint96 scaleFactor = pool.scaleFactor();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 26 : IERC20Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// Taken from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/IERC20Metadata.sol
pragma solidity ^0.8.0;
import "./IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 26 : AddressStringUtil.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
library AddressStringUtil {
// converts an address to the uppercase hex string, extracting only len bytes (up to 20, multiple of 2)
function toAsciiString(address addr, uint256 len) internal pure returns (string memory) {
require(len % 2 == 0 && len > 0 && len <= 40, "AddressStringUtil: INVALID_LEN");
bytes memory s = new bytes(len);
uint256 addrNum = uint256(uint160(addr));
for (uint256 ii = 0; ii < len ; ii +=2) {
uint8 b = uint8(addrNum >> (4 * (38 - ii)));
s[ii] = char(b >> 4);
s[ii + 1] = char(b & 0x0f);
}
return string(s);
}
// hi and lo are only 4 bits and between 0 and 16
// this method converts those values to the unicode/ascii code point for the hex representation
// uses upper case for the characters
function char(uint8 b) private pure returns (bytes1 c) {
if (b < 10) {
return bytes1(b + 0x30);
} else {
return bytes1(b + 0x37);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 26 : RevertMsgExtractor.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-License-Identifier: MIT
// Taken from https://github.com/sushiswap/BoringSolidity/blob/441e51c0544cf2451e6116fe00515e71d7c42e2c/contracts/BoringBatchable.sol
pragma solidity >=0.6.0;
library RevertMsgExtractor {
/// @dev Helper function to extract a useful revert message from a failed call.
/// If the returned data is malformed or not correctly abi encoded then this call can fail itself.
function getRevertMsg(bytes memory returnData)
internal pure
returns (string memory)
{
// If the _res length is less than 68, then the transaction failed silently (without a revert message)
if (returnData.length < 68) return "Transaction reverted silently";
assembly {
// Slice the sighash.
returnData := add(returnData, 0x04)
}
return abi.decode(returnData, (string)); // All that remains is the revert string
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 26 : ERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
// Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/53516bc555a454862470e7860a9b5254db4d00f5/contracts/token/ERC20/ERC20Permit
    .sol
pragma solidity ^0.8.0;
import "./ERC20.sol";
import "./IERC2612.sol";
/**
* @dev Extension of {ERC20} that allows token holders to use their tokens
* without sending any transactions by setting {IERC20-allowance} with a
* signature using the {permit} method, and then spend them via
* {IERC20-transferFrom}.
*
* The {permit} signature mechanism conforms to the {IERC2612} interface.
*/
abstract contract ERC20Permit is ERC20, IERC2612 {
mapping (address => uint256) public override nonces;
bytes32 public immutable PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 private immutable _DOMAIN_SEPARATOR;
uint256 public immutable deploymentChainId;
constructor(string memory name_, string memory symbol_, uint8 decimals_) ERC20(name_, symbol_, decimals_) {
deploymentChainId = block.chainid;
_DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 26 : CastU256U128.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library CastU256U128 {
/// @dev Safely cast an uint256 to an uint128
function u128(uint256 x) internal pure returns (uint128 y) {
require (x <= type(uint128).max, "Cast overflow");
y = uint128(x);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 26 : CastU256U32.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
library CastU256U32 {
/// @dev Safely cast an uint256 to an u32
function u32(uint256 x) internal pure returns (uint32 y) {
require (x <= type(uint32).max, "Cast overflow");
y = uint32(x);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 26 : ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// Inspired on token.sol from DappHub. Natspec adpated from OpenZeppelin.
pragma solidity ^0.8.0;
import "./IERC20Metadata.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Calls to {transferFrom} do not check for allowance if the caller is the owner
* of the funds. This allows to reduce the number of approvals that are necessary.
*
* Finally, {transferFrom} does not decrease the allowance if it is set to
* type(uint256).max. This reduces the gas costs without any likely impact.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 26 : IERC2612.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC2612 standard as defined in the EIP.
*
* Adds the {permit} method, which can be used to change one's
* {IERC20-allowance} without having to send a transaction, by signing a
* message. This allows users to spend tokens without having to hold Ether.
*
* See https://eips.ethereum.org/EIPS/eip-2612.
*/
interface IERC2612 {
/**
* @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
* given `owner`'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 26 : IFYToken.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@yield-protocol/utils-v2/contracts/token/IERC20.sol";
interface IFYToken is IERC20 {
/// @dev Asset that is returned on redemption.
function underlying() external view returns (address);
/// @dev Unix time at which redemption of fyToken for underlying are possible
function maturity() external view returns (uint256);
/// @dev Record price data at maturity
function mature() external;
/// @dev Mint fyToken providing an equal amount of underlying to the protocol
function mintWithUnderlying(address to, uint256 amount) external;
/// @dev Burn fyToken after maturity for an amount of underlying.
function redeem(address to, uint256 amount) external returns (uint256);
/// @dev Mint fyToken.
/// This function can only be called by other Yield contracts, not users directly.
/// @param to Wallet to mint the fyToken in.
/// @param fyTokenAmount Amount of fyToken to mint.
function mint(address to, uint256 fyTokenAmount) external;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 26 : IOracle.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IOracle {
/**
* @notice Doesn't refresh the price, but returns the latest value available without doing any transactional operations:
* @return value in wei
*/
function peek(
bytes32 base,
bytes32 quote,
uint256 amount
) external view returns (uint256 value, uint256 updateTime);
/**
* @notice Does whatever work or queries will yield the most up-to-date price, and returns it.
* @return value in wei
*/
function get(
bytes32 base,
bytes32 quote,
uint256 amount
) external returns (uint256 value, uint256 updateTime);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 26 : IJoin.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@yield-protocol/utils-v2/contracts/token/IERC20.sol";
interface IJoin {
/// @dev asset managed by this contract
function asset() external view returns (address);
/// @dev Add tokens to this contract.
function join(address user, uint128 wad) external returns (uint128);
/// @dev Remove tokens to this contract.
function exit(address user, uint128 wad) external returns (uint128);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 26 : YieldMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.6;
import "./Math64x64.sol";
library Exp64x64 {
/**
* Raise given number x into power specified as a simple fraction y/z and then
* multiply the result by the normalization factor 2^(128 * (1 - y/z)).
* Revert if z is zero, or if both x and y are zeros.
*
* @param x number to raise into given power y/z
* @param y numerator of the power to raise x into
* @param z denominator of the power to raise x into
* @return x raised into power y/z and then multiplied by 2^(128 * (1 - y/z))
*/
function pow(uint128 x, uint128 y, uint128 z)
internal pure returns(uint128) {
unchecked {
require(z != 0);
if(x == 0) {
require(y != 0);
return 0;
} else {
uint256 l =
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 26 : Math64x64.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: BUSL-1.1
/*
* Math 64.64 Smart Contract Library. Copyright © 2019 by Consulting.
* Author: Mikhail Vladimirov <mikhail.vladimirov@gmail.com>
*/
pragma solidity 0.8.6;
/**
* Smart contract library of mathematical functions operating with signed
* 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is
* basically a simple fraction whose numerator is signed 128-bit integer and
* denominator is 2^64. As long as denominator is always the same, there is no
* need to store it, thus in Solidity signed 64.64-bit fixed point numbers are
* represented by int128 type holding only the numerator.
*/
library Math64x64 {
/*
* Minimum value signed 64.64-bit fixed point number may have.
*/
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000;
/*
* Maximum value signed 64.64-bit fixed point number may have.
*/
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {
"@yield-protocol/utils-v2/contracts/token/SafeERC20Namer.sol": {
"SafeERC20Namer": "0x39bb9cBe0221D769E30bD08d185842065BcE1706"
},
"@yield-protocol/yieldspace-v2/contracts/extensions/YieldMathExtensions.sol": {
"YieldMathExtensions": "0xdc3758330939a0253f30083a23e8843778348991"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"contract ILadle","name":"ladle_","type":"address"},{"internalType":"contract IERC20","name":"base_","type":"address"},{"internalType":"bytes6","name":"baseId_","type":"bytes6"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimed","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IPool","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes6","name":"seriesId","type":"bytes6"}],"name":"NextPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"accumulated","type":"uint256"}],"name":"RewardsPerTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"start","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"end","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"RewardsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"RewardsTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"role","type":"bytes4"},{"indexed":true,"internalType":"bytes4","name":"newAdminRole","type":"bytes4"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"role","type":"bytes4"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"role","type":"bytes4"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes6","name":"id","type":"bytes6"}],"name":"TokenIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"join","type":"address"}],"name":"TokenJoinReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"userRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"}],"name":"UserRewardsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ILadle","name":"ladle","type":"address"},{"indexed":false,"internalType":"contract ICauldron","name":"cauldron","type":"address"}],"name":"YieldSet","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK8605463013","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT4146650865","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"base","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseId","outputs":[{"internalType":"bytes6","name":"","type":"bytes6"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseJoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"withdrawal","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burnForBase","outputs":[{"internalType":"uint256","name":"withdrawal","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cached","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cauldron","outputs":[{"internalType":"contract ICauldron","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"claim","outputs":[{"internalType":"uint256","name":"claiming","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fyToken","outputs":[{"internalType":"contract IFYToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4[]","name":"roles","type":"bytes4[]"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"invariants","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ladle","outputs":[{"internalType":"contract ILadle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"}],"name":"lockRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"minted","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPool","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextSeriesId","outputs":[{"internalType":"bytes6","name":"","type":"bytes6"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTokenJoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4[]","name":"roles","type":"bytes4[]"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint128","name":"accumulated","type":"uint128"},{"internalType":"uint128","name":"checkpoint","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerToken","outputs":[{"internalType":"uint128","name":"accumulated","type":"uint128"},{"internalType":"uint32","name":"lastUpdated","type":"uint32"},{"internalType":"uint96","name":"rate","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPeriod","outputs":[{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint32","name":"end","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seriesId","outputs":[{"internalType":"bytes6","name":"","type":"bytes6"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool_","type":"address"},{"internalType":"bytes6","name":"seriesId_","type":"bytes6"}],"name":"setNextPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint32","name":"end","type":"uint32"},{"internalType":"uint96","name":"rate","type":"uint96"}],"name":"setRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"rewardsToken_","type":"address"}],"name":"setRewardsToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"role","type":"bytes4"},{"internalType":"bytes4","name":"adminRole","type":"bytes4"}],"name":"setRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes6","name":"baseId_","type":"bytes6"}],"name":"setTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILadle","name":"ladle_","type":"address"}],"name":"setYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minRatio","type":"uint256"},{"internalType":"uint256","name":"maxRatio","type":"uint256"}],"name":"startPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]

6101406040526003610100819052623f3f3f60e81b6101209081526200002991600491906200069b565b50604080518082019091526003808252623f3f3f60e81b602090920191825262000056916005916200069b565b506006805460ff191660121790557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c96080523480156200009557600080fd5b5060405162004a4e38038062004a4e833981016040819052620000b8916200081f565b6040516323b95ceb60e21b81526001600160a01b0383166004820152859085907339bb9cbe0221d769e30bd08d185842065bce170690638ee573ac9060240160206040518083038186803b1580156200011057600080fd5b505af415801562000125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014b9190620008d7565b8282828282826200015e600033620004af565b620001726001600160e01b03198062000547565b8251620001879060049060208601906200069b565b5081516200019d9060059060208501906200069b565b506006805460ff191660ff9290921691909117905550504660c0819052620001c590620005e5565b60a08181525050505050505050816001600160a01b0316836001600160a01b03166397ff6a046040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021657600080fd5b505afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002519190620007f8565b604051630cdf468960e11b81526001600160d01b0319841660048201526001600160a01b0391909116906319be8d129060240160206040518083038186803b1580156200029d57600080fd5b505afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d89190620007f8565b6001600160a01b031614620003275760405162461bcd60e51b8152602060048201526011602482015270135a5cdb585d18da19590818985cd95259607a1b604482015260640160405180910390fd5b606082901b6001600160601b03191660e052600c805465ffffffffffff191660d083901c1790556040516330705b1b60e11b81526001600160d01b0319821660048201526001600160a01b038416906360e0b6369060240160206040518083038186803b1580156200039857600080fd5b505afa158015620003ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d39190620007f8565b600c8054600160301b600160d01b03191666010000000000006001600160a01b0393841602179055600d80546001600160a01b0319169185169182179055604080516325ffda8160e21b815290516397ff6a0491600480820192602092909190829003018186803b1580156200044857600080fd5b505afa1580156200045d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004839190620007f8565b600e80546001600160a01b0319166001600160a01b03929092169190911790555062000a0c9350505050565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915290205460ff1662000543576001600160e01b031982166000818152602081815260408083206001600160a01b0386168085529252808320805460ff1916600117905551339391927fe6231789d19137da31d0550f4ba9ee379020a8cfb64cb79bf1790c996d2e616591a45b5050565b6001600160e01b0319811662000579836001600160e01b03191660009081526020819052604090206001015460e01b90565b6001600160e01b0319161462000543576001600160e01b0319828116600081815260208190526040808220600101805463ffffffff191660e087901c17905551928416927fd348e2220a50b4500ec353f6e802d2f14dd1b5d6786148fd1bbcc570bf92d4739190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6004604051620006199190620008fc565b60408051918290038220828201825260018352603160f81b602093840152815180840194909452838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301949094523060a0808401919091528451808403909101815260c09092019093528051920191909120919050565b828054620006a990620009a0565b90600052602060002090601f016020900481019282620006cd576000855562000718565b82601f10620006e857805160ff191683800117855562000718565b8280016001018555821562000718579182015b8281111562000718578251825591602001919060010190620006fb565b50620007269291506200072a565b5090565b5b808211156200072657600081556001016200072b565b600082601f8301126200075357600080fd5b81516001600160401b0380821115620007705762000770620009dd565b604051601f8301601f19908116603f011681019082821181831017156200079b576200079b620009dd565b81604052838152602092508683858801011115620007b857600080fd5b600091505b83821015620007dc5785820183015181830184015290820190620007bd565b83821115620007ee5760008385830101525b9695505050505050565b6000602082840312156200080b57600080fd5b81516200081881620009f3565b9392505050565b600080600080600060a086880312156200083857600080fd5b85516001600160401b03808211156200085057600080fd5b6200085e89838a0162000741565b965060208801519150808211156200087557600080fd5b50620008848882890162000741565b94505060408601516200089781620009f3565b6060870151909350620008aa81620009f3565b60808701519092506001600160d01b031981168114620008c957600080fd5b809150509295509295909350565b600060208284031215620008ea57600080fd5b815160ff811681146200081857600080fd5b600080835481600182811c9150808316806200091957607f831692505b60208084108214156200093a57634e487b7160e01b86526022600452602486fd5b818015620009515760018114620009635762000992565b60ff1986168952848901965062000992565b60008a81526020902060005b868110156200098a5781548b8201529085019083016200096f565b505084890196505b509498975050505050505050565b600181811c90821680620009b557607f821691505b60208210811415620009d757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462000a0957600080fd5b50565b60805160a05160c05160e05160601c613fb162000a9d6000396000818161059f015281816112010152818161191e015281816119c60152818161222b01528181612673015281816127610152818161289f015261295e0152600081816107db01528181610e0b0152611ae8015260008181610e410152611b1d01526000818161053e0152611a5f0152613fb16000f3fe608060405234801561001057600080fd5b50600436106103735760003560e01c80637ecebe00116101d3578063cd0d009611610104578063de02cde7116100a2578063e9e5d6d01161007c578063e9e5d6d0146108f1578063effae35314610904578063f8c2b77314610917578063ffffffff1461077b57600080fd5b8063de02cde71461088a578063de320cc11461089d578063dea587b0146108b057600080fd5b8063d95edafe116100de578063d95edafe14610823578063dc3bfba914610836578063dd46e85414610849578063dd62ed3e1461085157600080fd5b8063cd0d0096146107d6578063d1af0c7d146107fd578063d505accf1461081057600080fd5b806397ff6a0411610171578063a9059cbb1161014b578063a9059cbb1461078a578063ad82110f1461079d578063ae93c1b5146107b0578063ba3573b0146107c357600080fd5b806397ff6a0414610755578063a354f39e14610768578063a4f0d7d01461077b57600080fd5b80638cc96ac5116101ad5780638cc96ac51461071d5780639326295b1461073157806394b8e38f1461073a57806395d89b411461074d57600080fd5b80637ecebe00146106d75780638737a2dc146106f757806389afcb441461070a57600080fd5b806330adf81f116102ad5780635909c12f1161024b5780636a627842116102255780636a627842146106175780636ed3e3e31461062a57806370641a361461063e57806370a08231146106ae57600080fd5b80635909c12f146103785780635ba5e9f0146105f1578063687f0e4c1461060457600080fd5b806344faded01161028757806344faded0146105875780635001f3b51461059a57806354fd4d50146105c1578063559742d9146105de57600080fd5b806330adf81f14610539578063313ce567146105605780633644e5151461057f57600080fd5b806318160ddd1161031a578063243d6585116102f4578063243d6585146104bd57806326ae2b78146104d057806328c3b85c146105095780632d42cf7d1461052f57600080fd5b806318160ddd146104855780631e83409a1461049757806323b872dd146104aa57600080fd5b80630700037d116103565780630700037d146103e8578063095ea7b31461043c57806310ab94321461045f57806316f0115b1461047257600080fd5b8015610378578063068b8a801461039e57806306fdde03146103d3575b600080fd5b610380600081565b6040516001600160e01b031990911681526020015b60405180910390f35b600c546103bb90660100000000000090046001600160a01b031681565b6040516001600160a01b039091168152602001610395565b6103db61092a565b6040516103959190613d44565b61041c6103f63660046137a4565b600b602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610395565b61044f61044a3660046138cf565b6109b8565b6040519015158152602001610395565b61044f61046d3660046139fe565b6109cc565b600f546103bb906001600160a01b031681565b6001545b604051908152602001610395565b6104896104a53660046137a4565b610a00565b61044f6104b8366004613817565b610aa5565b6011546103bb906001600160a01b031681565b6009546104ec9063ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610395565b600c546105169060d01b81565b6040516001600160d01b03199091168152602001610395565b610537610ac5565b005b6104897f000000000000000000000000000000000000000000000000000000000000000081565b60065461056d9060ff1681565b60405160ff9091168152602001610395565b610489610e07565b6105376105953660046139fe565b610e63565b6103bb7f000000000000000000000000000000000000000000000000000000000000000081565b6040805180820190915260018152603160f81b60208201526103db565b6105376105ec3660046139e3565b610efd565b6103806105ff3660046139e3565b610f76565b6105376106123660046139fe565b610f9d565b6104896106253660046137a4565b610fff565b60115461051690600160a01b900460d01b81565b600a54610676906001600160801b03811690600160801b810463ffffffff1690600160a01b90046bffffffffffffffffffffffff1683565b604080516001600160801b03909416845263ffffffff90921660208401526bffffffffffffffffffffffff1690820152606001610395565b6104896106bc3660046137a4565b6001600160a01b031660009081526002602052604090205490565b6104896106e53660046137a4565b60076020526000908152604090205481565b610537610705366004613a6a565b611123565b6104896107183660046137a4565b61144a565b600f5461051690600160a01b900460d01b81565b61048960125481565b600d546103bb906001600160a01b031681565b6103db611507565b600e546103bb906001600160a01b031681565b610537610776366004613c30565b611514565b6103806001600160e01b031981565b61044f6107983660046138cf565b611766565b6105376107ab3660046138fb565b611773565b6105376107be366004613a1a565b61182f565b6104896107d13660046137a4565b61189c565b6104897f000000000000000000000000000000000000000000000000000000000000000081565b6008546103bb906001600160a01b031681565b61053761081e366004613858565b6119f3565b6105376108313660046137a4565b611c7d565b6010546103bb906001600160a01b031681565b610537611e19565b61048961085f3660046137de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6105376108983660046139fe565b611fe6565b6105376108ab3660046137a4565b612053565b6108d96108be3660046137a4565b6013602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610395565b6105376108ff366004613a4d565b612163565b6105376109123660046138fb565b6123ed565b610537610925366004613be0565b61247f565b6004805461093790613e7f565b80601f016020809104026020016040519081016040528092919081815260200182805461096390613e7f565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b505050505081565b60006109c5338484612b6c565b9392505050565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915281205460ff166109c5565b6000610a0a612bd5565b610a1333612dbb565b336000908152600b6020526040902080546fffffffffffffffffffffffffffffffff191690556008546001600160801b03919091169150610a5e906001600160a01b03168383612f30565b604080516001600160a01b0384168152602081018390527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a1919050565b6000610ab18483613053565b50610abd8484846130fc565b949350505050565b601060009054906101000a90046001600160a01b03166001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190613bc7565b4263ffffffff161015610ba55760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206166746572206d617475726974790000000000000000000000000060448201526064015b60405180910390fd5b600f546010546040516370a0823160e01b81523060048201526001600160a01b03928316929091169060009083906370a082319060240160206040518083038186803b158015610bf457600080fd5b505afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190613bc7565b9050610c426001600160a01b0384168483612f30565b6040517fd7020d0a000000000000000000000000000000000000000000000000000000008152306004820181905260248201526000604482018190526000196064830152906001600160a01b0385169063d7020d0a90608401606060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ced9190613c02565b9250610d069150506001600160a01b0384168483612f30565b6040517f1e9a6950000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03841690631e9a695090604401602060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190613bc7565b506040516001600160a01b03851681527ffeba534d95469be2b9f083643be5f83b8ffd5aba9b64b79f3e71e51acd5c87a29060200160405180910390a15050600f8054601080546001600160a01b03191690556001600160d01b031916905550506000601255565b60007f00000000000000000000000000000000000000000000000000000000000000004614610e3e57610e3946613125565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b81610eb5610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6001600160e01b03191660009081526020818152604080832033845290915290205460ff1690565b610eee5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef883836131d9565b505050565b80610f27610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b610f605760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610f72826001600160e01b031961326d565b5050565b6001600160e01b0319811660009081526020819052604081206001015460e01b5b92915050565b6001600160a01b0381163314610ff55760405162461bcd60e51b815260206004820152601660248201527f52656e6f756e6365206f6e6c7920666f722073656c66000000000000000000006044820152606401610b9c565b610f7282826131d9565b600f546000906001600160a01b031661105a5760405162461bcd60e51b815260206004820152601160248201527f506f6f6c206e6f742073656c65637465640000000000000000000000000000006044820152606401610b9c565b601254600f546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190613bc7565b6110e79190613e1b565b905081816001546110f89190613dd4565b6111029190613dc0565b925061110e8183613da8565b60125561111b8484613309565b505050919050565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166111855760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b816001600160a01b0316635001f3b56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111be57600080fd5b505afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f691906137c1565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146112765760405162461bcd60e51b815260206004820152600f60248201527f4d69736d617463686564206261736500000000000000000000000000000000006044820152606401610b9c565b600e546040517f55d03e340000000000000000000000000000000000000000000000000000000081526001600160d01b0319831660048201526000916001600160a01b0316906355d03e349060240160606040518083038186803b1580156112dd57600080fd5b505afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113159190613b2c565b9050826001600160a01b031663dc3bfba96040518163ffffffff1660e01b815260040160206040518083038186803b15801561135057600080fd5b505afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138891906137c1565b6001600160a01b031681600001516001600160a01b0316146113ec5760405162461bcd60e51b815260206004820152601360248201527f4d69736d617463686564207365726965734964000000000000000000000000006044820152606401610b9c565b601180546001600160a01b0385166001600160d01b03199182168117600160a01b60d087901c021790925560405190841691907fa0868ad381d06fdaa9677c62624fe2c7bdcfb52ff9147345f2b1b691f3f5ec7d90600090a3505050565b600f546000906001600160a01b03166114a55760405162461bcd60e51b815260206004820152601160248201527f506f6f6c206e6f742073656c65637465640000000000000000000000000000006044820152606401610b9c565b601254306000908152600260205260409020546001546114c58284613dd4565b6114cf9190613dc0565b92506114db8383613e1b565b6012556114e83082613327565b50600f54611500906001600160a01b03168585612f30565b5050919050565b6005805461093790613e7f565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166115765760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b8163ffffffff168363ffffffff1611156115d25760405162461bcd60e51b815260206004820152600f60248201527f496e636f727265637420696e70757400000000000000000000000000000000006044820152606401610b9c565b6008546001600160a01b031661162a5760405162461bcd60e51b815260206004820152601560248201527f5265776172647320746f6b656e206e6f742073657400000000000000000000006044820152606401610b9c565b60095463ffffffff1661163c42613345565b63ffffffff16108061166b5750600954640100000000900463ffffffff1661166342613345565b63ffffffff16115b6116b75760405162461bcd60e51b815260206004820152600f60248201527f4f6e676f696e67207265776172647300000000000000000000000000000000006044820152606401610b9c565b6009805463ffffffff85811667ffffffffffffffff19909216821764010000000091861691820217909255600a80546001600160801b0316600160801b83026001600160a01b031617600160a01b6bffffffffffffffffffffffff861690810291909117909155604080519283526020830193909352918101919091527f95efd8a2a0aa591f48fd9673cf5d13c2150ca7a1fe1cbe438dd3f0ae470646639060600160405180910390a1505050565b60006109c53384846130fc565b60005b8251811015610ef8576117c1610e8d84838151811061179757611797613f0f565b60200260200101516001600160e01b03191660009081526020819052604090206001015460e01b90565b6117fa5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b61181d83828151811061180f5761180f613f0f565b6020026020010151836131d9565b8061182781613eb4565b915050611776565b81611859610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6118925760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef8838361326d565b600f546000906001600160a01b0316156118e85760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b30600081815260026020526040908190205460015491516370a0823160e01b815260048101939093529182906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561196057600080fd5b505afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613bc7565b6119a29190613dd4565b6119ac9190613dc0565b91506119b83082613327565b506119ed6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484612f30565b50919050565b42841015611a435760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610b9c565b6001600160a01b038716600090815260076020526040812080547f0000000000000000000000000000000000000000000000000000000000000000918a918a918a919086611a9083613eb4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060007f00000000000000000000000000000000000000000000000000000000000000004614611b1b57611b1646613125565b611b3d565b7f00000000000000000000000000000000000000000000000000000000000000005b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611be3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611c195750896001600160a01b0316816001600160a01b0316145b611c655760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610b9c565b611c708a8a8a612b6c565b5050505050505050505050565b600f546001600160a01b031615611cc65760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff16611d285760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d80546001600160a01b0319166001600160a01b038316908117909155604080516325ffda8160e21b81529051600092916397ff6a04916004808301926020929190829003018186803b158015611d7f57600080fd5b505afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db791906137c1565b600e80546001600160a01b0319166001600160a01b0383811691821790925560408051928616835260208301919091529192507f2fe4e5ef899cc1bf6c10bd764667743de04f9dfe0ad51bbc956f4539b4f8a654910160405180910390a15050565b600f546001600160a01b031615611e625760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff16611ec45760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d54600c546040517f60e0b63600000000000000000000000000000000000000000000000000000000815260d09190911b6001600160d01b03191660048201526001600160a01b03909116906360e0b6369060240160206040518083038186803b158015611f3257600080fd5b505afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906137c1565b600c80547fffffffffffff0000000000000000000000000000000000000000ffffffffffff1666010000000000006001600160a01b0393841681029190911791829055604051910490911681527f9261f5bf303fa2594f2b969e042420fc0125c062081305ab742561823f41c8f89060200160405180910390a1565b81612010610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6120495760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef8838361338f565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166120b55760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b6008546001600160a01b03161561210e5760405162461bcd60e51b815260206004820152601960248201527f5265776172647320746f6b656e20616c726561647920736574000000000000006044820152606401610b9c565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f45a4cbe003c343d60028e5acd63eecf588647b0eb369733afa2c0482180d4f74906020015b60405180910390a150565b600f546001600160a01b0316156121ac5760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff1661220e5760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d54604080516325ffda8160e21b815290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169316916397ff6a04916004808301926020929190829003018186803b15801561227457600080fd5b505afa158015612288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ac91906137c1565b6040517f19be8d120000000000000000000000000000000000000000000000000000000081526001600160d01b0319841660048201526001600160a01b0391909116906319be8d129060240160206040518083038186803b15801561231057600080fd5b505afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234891906137c1565b6001600160a01b03161461239e5760405162461bcd60e51b815260206004820152601160248201527f4d69736d617463686564206261736549640000000000000000000000000000006044820152606401610b9c565b600c805465ffffffffffff191660d083901c1790556040516001600160d01b0319821681527fa5a662d5f3165a00b47bd97ea0424c19490c0f263661390c2ab7dcedfa1a17ce90602001612158565b60005b8251811015610ef857612411610e8d84838151811061179757611797613f0f565b61244a5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b61246d83828151811061245f5761245f613f0f565b60200260200101518361338f565b8061247781613eb4565b9150506123f0565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166124e15760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600f546001600160a01b03161561252a5760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b6011546001600160a01b0316806125835760405162461bcd60e51b815260206004820152601160248201527f4e65787420706f6f6c206e6f74207365740000000000000000000000000000006044820152606401610b9c565b60008190506000816001600160a01b031663dc3bfba96040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c357600080fd5b505afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb91906137c1565b60118054600f8054601080546001600160a01b038781166001600160a01b03199092169190911790915565ffffffffffff600160a01b808604918216026001600160d01b03199384168a8416171790935592169092556040516370a0823160e01b815230600482015292935060d09190911b916000917f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156126b557600080fd5b505afa1580156126c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ed9190613bc7565b90506000811161273f5760405162461bcd60e51b815260206004820152601660248201527f4e6f2066756e647320746f2073746172742077697468000000000000000000006044820152606401610b9c565b6040516370a0823160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b1580156127a557600080fd5b505afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613bc7565b6040516370a0823160e01b81526001600160a01b0387811660048301529192506000918616906370a082319060240160206040518083038186803b15801561282457600080fd5b505afa158015612838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285c9190613bc7565b9050600061287d61286d8385613da8565b6128778587613dd4565b90613425565b9050600061288b8286613e1b565b600c549091506128d2906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691660100000000000090041683612f30565b6010546040517fb64b80840000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152602482018490529091169063b64b808490604401600060405180830381600087803b15801561293957600080fd5b505af115801561294d573d6000803e3d6000fd5b506129879250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690508984612f30565b6040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815230600482018190526024820152604481018c9052606481018b90526001600160a01b0389169063b3f1c93d90608401606060405180830381600087803b1580156129f657600080fd5b505af1158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613c02565b6012555050600154612a4857612a4633601254613309565b505b6040517f9e1f907b0000000000000000000000000000000000000000000000000000000081526001600160a01b038916600482015273dc3758330939a0253f30083a23e884377834899190639e1f907b9060240160206040518083038186803b158015612ab457600080fd5b505af4158015612ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aec9190613b9e565b6001600160a01b03891660008181526013602090815260409182902080546fffffffffffffffffffffffffffffffff19166001600160801b039590951694909417909355519081527fbf392a2214e536eb932a25b4490f99634f238baedb37418c3fd6de8923c94133910160405180910390a15050505050505050505050565b6001600160a01b03838116600081815260036020908152604080832094871680845294825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b60408051606081018252600a546001600160801b0381168252600160801b810463ffffffff908116602080850191909152600160a01b9092046bffffffffffffffffffffffff168385015283518085019094526009548082168086526401000000009091049091169184019190915260015491929190612c5442613345565b63ffffffff161015612c6557505050565b6000612c7d612c7342613345565b8460200151613468565b90506000846020015182612c919190613e32565b63ffffffff16905080612ca5575050505050565b8215612d1057612d048386604001516bffffffffffffffffffffffff1683670de0b6b3a7640000612cd69190613dd4565b612ce09190613dd4565b612cea9190613dc0565b8651612cff91906001600160801b0316613da8565b61348a565b6001600160801b031685525b63ffffffff8216602086018190528551600a80546040808a01516bffffffffffffffffffffffff16600160a01b026001600160a01b03600160801b9096026001600160a01b03199093166001600160801b03861617929092179490941617905590517fe972555b20cae8150e291bb40efce3ef4e3ed6b6b2c39c029346600e95469d4891612dac916001600160801b0391909116815260200190565b60405180910390a15050505050565b6001600160a01b0381166000908152600b602090815260408083208151808301835290546001600160801b038082168352600160801b9182900481168386019081528451606081018652600a5492831680825293830463ffffffff1696810196909652600160a01b9091046bffffffffffffffffffffffff16938501939093529151909291612ea391670de0b6b3a764000091612e589190613df3565b6001600160a01b038716600090815260026020526040902054612e84916001600160801b031690613dd4565b612e8e9190613dc0565b8351612cff91906001600160801b0316613da8565b6001600160801b0390811683528151811660208085019182526001600160a01b0387166000818152600b835260409081902087519451948616600160801b95909616948502861790558051918252918101939093528201527f5b9aaf4cc5141c090a75f8b8a627863eba92df81f0c83c096350da9b79aedd049060600160405180910390a1505192915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691612fba9190613c8c565b6000604051808303816000865af19150503d8060008114612ff7576040519150601f19603f3d011682016040523d82523d6000602084013e612ffc565b606091505b509150915081801561302657508051158061302657508080602001905181019061302691906139c1565b61304c57613033816134d3565b60405162461bcd60e51b8152600401610b9c9190613d44565b5050505050565b60006001600160a01b03831633146130f3576001600160a01b038316600090815260036020908152604080832033845290915290205460001981146130f157828110156130e25760405162461bcd60e51b815260206004820152601c60248201527f45524332303a20496e73756666696369656e7420617070726f76616c000000006044820152606401610b9c565b6130ef8433858403612b6c565b505b505b50600192915050565b6000613106612bd5565b61310f84612dbb565b5061311983612dbb565b50610abd848484613532565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60046040516131579190613ca8565b60408051918290038220828201825260018352603160f81b602093840152815180840194909452838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301949094523060a0808401919091528451808403909101815260c09092019093528051920191909120919050565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915290205460ff1615610f72576001600160e01b031982166000818152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339391927f4ddc7b757e7bdd7254a9cd39452d307a52761bc824625c6a33104a075d8099e691a45050565b6001600160e01b0319811661329e836001600160e01b03191660009081526020819052604090206001015460e01b90565b6001600160e01b03191614610f72576001600160e01b0319828116600081815260208190526040808220600101805463ffffffff191660e087901c17905551928416927fd348e2220a50b4500ec353f6e802d2f14dd1b5d6786148fd1bbcc570bf92d4739190a35050565b6000613313612bd5565b61331c83612dbb565b506109c58383613621565b6000613331612bd5565b61333a83612dbb565b506109c583836136ba565b600063ffffffff82111561338b5760405162461bcd60e51b815260206004820152600d60248201526c43617374206f766572666c6f7760981b6044820152606401610b9c565b5090565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915290205460ff16610f72576001600160e01b031982166000818152602081815260408083206001600160a01b0386168085529252808320805460ff1916600117905551339391927fe6231789d19137da31d0550f4ba9ee379020a8cfb64cb79bf1790c996d2e616591a45050565b60006134318284613ecf565b15613453576134408284613dc0565b61344b906001613da8565b905080613461565b61345d8284613dc0565b9050805b5092915050565b60008163ffffffff168363ffffffff161061348357816109c5565b5090919050565b60006001600160801b0382111561338b5760405162461bcd60e51b815260206004820152600d60248201526c43617374206f766572666c6f7760981b6044820152606401610b9c565b606060448251101561351857505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190610f979190613a98565b6001600160a01b03831660009081526002602052604081205482111561359a5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e73756666696369656e742062616c616e636500000000006044820152606401610b9c565b6001600160a01b0380851660009081526002602052604080822080548690039055918516815220546135cd908390613da8565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612bc39086815260200190565b6001600160a01b038216600090815260026020526040812054613645908390613da8565b6001600160a01b03841660009081526002602052604090205560015461366c908390613da8565b6001556040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350600192915050565b6001600160a01b0382166000908152600260205260408120548211156137225760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e73756666696369656e742062616c616e636500000000006044820152606401610b9c565b6001600160a01b038316600081815260026020908152604080832080548790039055600180548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016136a9565b803561378781613f3b565b919050565b80356001600160e01b03198116811461378757600080fd5b6000602082840312156137b657600080fd5b81356109c581613f3b565b6000602082840312156137d357600080fd5b81516109c581613f3b565b600080604083850312156137f157600080fd5b82356137fc81613f3b565b9150602083013561380c81613f3b565b809150509250929050565b60008060006060848603121561382c57600080fd5b833561383781613f3b565b9250602084013561384781613f3b565b929592945050506040919091013590565b600080600080600080600060e0888a03121561387357600080fd5b873561387e81613f3b565b9650602088013561388e81613f3b565b95506040880135945060608801359350608088013560ff811681146138b257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156138e257600080fd5b82356138ed81613f3b565b946020939093013593505050565b6000806040838503121561390e57600080fd5b823567ffffffffffffffff8082111561392657600080fd5b818501915085601f83011261393a57600080fd5b813560208282111561394e5761394e613f25565b8160051b925061395f818401613d77565b8281528181019085830185870184018b101561397a57600080fd5b600096505b848710156139a4576139908161378c565b83526001969096019591830191830161397f565b5096506139b4905087820161377c565b9450505050509250929050565b6000602082840312156139d357600080fd5b815180151581146109c557600080fd5b6000602082840312156139f557600080fd5b6109c58261378c565b60008060408385031215613a1157600080fd5b6137fc8361378c565b60008060408385031215613a2d57600080fd5b613a368361378c565b9150613a446020840161378c565b90509250929050565b600060208284031215613a5f57600080fd5b81356109c581613f53565b60008060408385031215613a7d57600080fd5b8235613a8881613f3b565b9150602083013561380c81613f53565b600060208284031215613aaa57600080fd5b815167ffffffffffffffff80821115613ac257600080fd5b818401915084601f830112613ad657600080fd5b815181811115613ae857613ae8613f25565b613afb601f8201601f1916602001613d77565b9150808252856020828501011115613b1257600080fd5b613b23816020840160208601613e4f565b50949350505050565b600060608284031215613b3e57600080fd5b6040516060810181811067ffffffffffffffff82111715613b6157613b61613f25565b6040528251613b6f81613f3b565b81526020830151613b7f81613f53565b60208201526040830151613b9281613f69565b60408201529392505050565b600060208284031215613bb057600080fd5b81516001600160801b03811681146109c557600080fd5b600060208284031215613bd957600080fd5b5051919050565b60008060408385031215613bf357600080fd5b50508035926020909101359150565b600080600060608486031215613c1757600080fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215613c4557600080fd5b8335613c5081613f69565b92506020840135613c6081613f69565b915060408401356bffffffffffffffffffffffff81168114613c8157600080fd5b809150509250925092565b60008251613c9e818460208701613e4f565b9190910192915050565b600080835481600182811c915080831680613cc457607f831692505b6020808410821415613ce457634e487b7160e01b86526022600452602486fd5b818015613cf85760018114613d0957613d36565b60ff19861689528489019650613d36565b60008a81526020902060005b86811015613d2e5781548b820152908501908301613d15565b505084890196505b509498975050505050505050565b6020815260008251806020840152613d63816040850160208701613e4f565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613da057613da0613f25565b604052919050565b60008219821115613dbb57613dbb613ee3565b500190565b600082613dcf57613dcf613ef9565b500490565b6000816000190483118215151615613dee57613dee613ee3565b500290565b60006001600160801b0383811690831681811015613e1357613e13613ee3565b039392505050565b600082821015613e2d57613e2d613ee3565b500390565b600063ffffffff83811690831681811015613e1357613e13613ee3565b60005b83811015613e6a578181015183820152602001613e52565b83811115613e79576000848401525b50505050565b600181811c90821680613e9357607f821691505b602082108114156119ed57634e487b7160e01b600052602260045260246000fd5b6000600019821415613ec857613ec8613ee3565b5060010190565b600082613ede57613ede613ef9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613f5057600080fd5b50565b6001600160d01b031981168114613f5057600080fd5b63ffffffff81168114613f5057600080fdfea264697066735822122049af07b32bb63c724ae6146d9c9ce70501d8420cc4ca495dd760cd5e6f8540bc64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006cb18ff2a33e981d1e38a663ca056c0a5265066a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5969656c642053747261746567792045544820364d204a756e2044656300000000000000000000000000000000000000000000000000000000000000000000095953455448364d4a440000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103735760003560e01c80637ecebe00116101d3578063cd0d009611610104578063de02cde7116100a2578063e9e5d6d01161007c578063e9e5d6d0146108f1578063effae35314610904578063f8c2b77314610917578063ffffffff1461077b57600080fd5b8063de02cde71461088a578063de320cc11461089d578063dea587b0146108b057600080fd5b8063d95edafe116100de578063d95edafe14610823578063dc3bfba914610836578063dd46e85414610849578063dd62ed3e1461085157600080fd5b8063cd0d0096146107d6578063d1af0c7d146107fd578063d505accf1461081057600080fd5b806397ff6a0411610171578063a9059cbb1161014b578063a9059cbb1461078a578063ad82110f1461079d578063ae93c1b5146107b0578063ba3573b0146107c357600080fd5b806397ff6a0414610755578063a354f39e14610768578063a4f0d7d01461077b57600080fd5b80638cc96ac5116101ad5780638cc96ac51461071d5780639326295b1461073157806394b8e38f1461073a57806395d89b411461074d57600080fd5b80637ecebe00146106d75780638737a2dc146106f757806389afcb441461070a57600080fd5b806330adf81f116102ad5780635909c12f1161024b5780636a627842116102255780636a627842146106175780636ed3e3e31461062a57806370641a361461063e57806370a08231146106ae57600080fd5b80635909c12f146103785780635ba5e9f0146105f1578063687f0e4c1461060457600080fd5b806344faded01161028757806344faded0146105875780635001f3b51461059a57806354fd4d50146105c1578063559742d9146105de57600080fd5b806330adf81f14610539578063313ce567146105605780633644e5151461057f57600080fd5b806318160ddd1161031a578063243d6585116102f4578063243d6585146104bd57806326ae2b78146104d057806328c3b85c146105095780632d42cf7d1461052f57600080fd5b806318160ddd146104855780631e83409a1461049757806323b872dd146104aa57600080fd5b80630700037d116103565780630700037d146103e8578063095ea7b31461043c57806310ab94321461045f57806316f0115b1461047257600080fd5b8015610378578063068b8a801461039e57806306fdde03146103d3575b600080fd5b610380600081565b6040516001600160e01b031990911681526020015b60405180910390f35b600c546103bb90660100000000000090046001600160a01b031681565b6040516001600160a01b039091168152602001610395565b6103db61092a565b6040516103959190613d44565b61041c6103f63660046137a4565b600b602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610395565b61044f61044a3660046138cf565b6109b8565b6040519015158152602001610395565b61044f61046d3660046139fe565b6109cc565b600f546103bb906001600160a01b031681565b6001545b604051908152602001610395565b6104896104a53660046137a4565b610a00565b61044f6104b8366004613817565b610aa5565b6011546103bb906001600160a01b031681565b6009546104ec9063ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610395565b600c546105169060d01b81565b6040516001600160d01b03199091168152602001610395565b610537610ac5565b005b6104897f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60065461056d9060ff1681565b60405160ff9091168152602001610395565b610489610e07565b6105376105953660046139fe565b610e63565b6103bb7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040805180820190915260018152603160f81b60208201526103db565b6105376105ec3660046139e3565b610efd565b6103806105ff3660046139e3565b610f76565b6105376106123660046139fe565b610f9d565b6104896106253660046137a4565b610fff565b60115461051690600160a01b900460d01b81565b600a54610676906001600160801b03811690600160801b810463ffffffff1690600160a01b90046bffffffffffffffffffffffff1683565b604080516001600160801b03909416845263ffffffff90921660208401526bffffffffffffffffffffffff1690820152606001610395565b6104896106bc3660046137a4565b6001600160a01b031660009081526002602052604090205490565b6104896106e53660046137a4565b60076020526000908152604090205481565b610537610705366004613a6a565b611123565b6104896107183660046137a4565b61144a565b600f5461051690600160a01b900460d01b81565b61048960125481565b600d546103bb906001600160a01b031681565b6103db611507565b600e546103bb906001600160a01b031681565b610537610776366004613c30565b611514565b6103806001600160e01b031981565b61044f6107983660046138cf565b611766565b6105376107ab3660046138fb565b611773565b6105376107be366004613a1a565b61182f565b6104896107d13660046137a4565b61189c565b6104897f000000000000000000000000000000000000000000000000000000000000000181565b6008546103bb906001600160a01b031681565b61053761081e366004613858565b6119f3565b6105376108313660046137a4565b611c7d565b6010546103bb906001600160a01b031681565b610537611e19565b61048961085f3660046137de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6105376108983660046139fe565b611fe6565b6105376108ab3660046137a4565b612053565b6108d96108be3660046137a4565b6013602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610395565b6105376108ff366004613a4d565b612163565b6105376109123660046138fb565b6123ed565b610537610925366004613be0565b61247f565b6004805461093790613e7f565b80601f016020809104026020016040519081016040528092919081815260200182805461096390613e7f565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b505050505081565b60006109c5338484612b6c565b9392505050565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915281205460ff166109c5565b6000610a0a612bd5565b610a1333612dbb565b336000908152600b6020526040902080546fffffffffffffffffffffffffffffffff191690556008546001600160801b03919091169150610a5e906001600160a01b03168383612f30565b604080516001600160a01b0384168152602081018390527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a1919050565b6000610ab18483613053565b50610abd8484846130fc565b949350505050565b601060009054906101000a90046001600160a01b03166001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190613bc7565b4263ffffffff161015610ba55760405162461bcd60e51b815260206004820152601360248201527f4f6e6c79206166746572206d617475726974790000000000000000000000000060448201526064015b60405180910390fd5b600f546010546040516370a0823160e01b81523060048201526001600160a01b03928316929091169060009083906370a082319060240160206040518083038186803b158015610bf457600080fd5b505afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190613bc7565b9050610c426001600160a01b0384168483612f30565b6040517fd7020d0a000000000000000000000000000000000000000000000000000000008152306004820181905260248201526000604482018190526000196064830152906001600160a01b0385169063d7020d0a90608401606060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ced9190613c02565b9250610d069150506001600160a01b0384168483612f30565b6040517f1e9a6950000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03841690631e9a695090604401602060405180830381600087803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190613bc7565b506040516001600160a01b03851681527ffeba534d95469be2b9f083643be5f83b8ffd5aba9b64b79f3e71e51acd5c87a29060200160405180910390a15050600f8054601080546001600160a01b03191690556001600160d01b031916905550506000601255565b60007f00000000000000000000000000000000000000000000000000000000000000014614610e3e57610e3946613125565b905090565b507fcd778b5ebf551168d180b2231ac9fe10b22bf33c2e41e86f9b2226d598e7e8de90565b81610eb5610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6001600160e01b03191660009081526020818152604080832033845290915290205460ff1690565b610eee5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef883836131d9565b505050565b80610f27610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b610f605760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610f72826001600160e01b031961326d565b5050565b6001600160e01b0319811660009081526020819052604081206001015460e01b5b92915050565b6001600160a01b0381163314610ff55760405162461bcd60e51b815260206004820152601660248201527f52656e6f756e6365206f6e6c7920666f722073656c66000000000000000000006044820152606401610b9c565b610f7282826131d9565b600f546000906001600160a01b031661105a5760405162461bcd60e51b815260206004820152601160248201527f506f6f6c206e6f742073656c65637465640000000000000000000000000000006044820152606401610b9c565b601254600f546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190613bc7565b6110e79190613e1b565b905081816001546110f89190613dd4565b6111029190613dc0565b925061110e8183613da8565b60125561111b8484613309565b505050919050565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166111855760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b816001600160a01b0316635001f3b56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111be57600080fd5b505afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f691906137c1565b6001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316146112765760405162461bcd60e51b815260206004820152600f60248201527f4d69736d617463686564206261736500000000000000000000000000000000006044820152606401610b9c565b600e546040517f55d03e340000000000000000000000000000000000000000000000000000000081526001600160d01b0319831660048201526000916001600160a01b0316906355d03e349060240160606040518083038186803b1580156112dd57600080fd5b505afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113159190613b2c565b9050826001600160a01b031663dc3bfba96040518163ffffffff1660e01b815260040160206040518083038186803b15801561135057600080fd5b505afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138891906137c1565b6001600160a01b031681600001516001600160a01b0316146113ec5760405162461bcd60e51b815260206004820152601360248201527f4d69736d617463686564207365726965734964000000000000000000000000006044820152606401610b9c565b601180546001600160a01b0385166001600160d01b03199182168117600160a01b60d087901c021790925560405190841691907fa0868ad381d06fdaa9677c62624fe2c7bdcfb52ff9147345f2b1b691f3f5ec7d90600090a3505050565b600f546000906001600160a01b03166114a55760405162461bcd60e51b815260206004820152601160248201527f506f6f6c206e6f742073656c65637465640000000000000000000000000000006044820152606401610b9c565b601254306000908152600260205260409020546001546114c58284613dd4565b6114cf9190613dc0565b92506114db8383613e1b565b6012556114e83082613327565b50600f54611500906001600160a01b03168585612f30565b5050919050565b6005805461093790613e7f565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166115765760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b8163ffffffff168363ffffffff1611156115d25760405162461bcd60e51b815260206004820152600f60248201527f496e636f727265637420696e70757400000000000000000000000000000000006044820152606401610b9c565b6008546001600160a01b031661162a5760405162461bcd60e51b815260206004820152601560248201527f5265776172647320746f6b656e206e6f742073657400000000000000000000006044820152606401610b9c565b60095463ffffffff1661163c42613345565b63ffffffff16108061166b5750600954640100000000900463ffffffff1661166342613345565b63ffffffff16115b6116b75760405162461bcd60e51b815260206004820152600f60248201527f4f6e676f696e67207265776172647300000000000000000000000000000000006044820152606401610b9c565b6009805463ffffffff85811667ffffffffffffffff19909216821764010000000091861691820217909255600a80546001600160801b0316600160801b83026001600160a01b031617600160a01b6bffffffffffffffffffffffff861690810291909117909155604080519283526020830193909352918101919091527f95efd8a2a0aa591f48fd9673cf5d13c2150ca7a1fe1cbe438dd3f0ae470646639060600160405180910390a1505050565b60006109c53384846130fc565b60005b8251811015610ef8576117c1610e8d84838151811061179757611797613f0f565b60200260200101516001600160e01b03191660009081526020819052604090206001015460e01b90565b6117fa5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b61181d83828151811061180f5761180f613f0f565b6020026020010151836131d9565b8061182781613eb4565b915050611776565b81611859610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6118925760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef8838361326d565b600f546000906001600160a01b0316156118e85760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b30600081815260026020526040908190205460015491516370a0823160e01b815260048101939093529182906001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216906370a082319060240160206040518083038186803b15801561196057600080fd5b505afa158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190613bc7565b6119a29190613dd4565b6119ac9190613dc0565b91506119b83082613327565b506119ed6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168484612f30565b50919050565b42841015611a435760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610b9c565b6001600160a01b038716600090815260076020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611a9083613eb4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060007f00000000000000000000000000000000000000000000000000000000000000014614611b1b57611b1646613125565b611b3d565b7fcd778b5ebf551168d180b2231ac9fe10b22bf33c2e41e86f9b2226d598e7e8de5b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611be3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611c195750896001600160a01b0316816001600160a01b0316145b611c655760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610b9c565b611c708a8a8a612b6c565b5050505050505050505050565b600f546001600160a01b031615611cc65760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff16611d285760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d80546001600160a01b0319166001600160a01b038316908117909155604080516325ffda8160e21b81529051600092916397ff6a04916004808301926020929190829003018186803b158015611d7f57600080fd5b505afa158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db791906137c1565b600e80546001600160a01b0319166001600160a01b0383811691821790925560408051928616835260208301919091529192507f2fe4e5ef899cc1bf6c10bd764667743de04f9dfe0ad51bbc956f4539b4f8a654910160405180910390a15050565b600f546001600160a01b031615611e625760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff16611ec45760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d54600c546040517f60e0b63600000000000000000000000000000000000000000000000000000000815260d09190911b6001600160d01b03191660048201526001600160a01b03909116906360e0b6369060240160206040518083038186803b158015611f3257600080fd5b505afa158015611f46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6a91906137c1565b600c80547fffffffffffff0000000000000000000000000000000000000000ffffffffffff1666010000000000006001600160a01b0393841681029190911791829055604051910490911681527f9261f5bf303fa2594f2b969e042420fc0125c062081305ab742561823f41c8f89060200160405180910390a1565b81612010610e8d826001600160e01b03191660009081526020819052604090206001015460e01b90565b6120495760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b610ef8838361338f565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166120b55760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b6008546001600160a01b03161561210e5760405162461bcd60e51b815260206004820152601960248201527f5265776172647320746f6b656e20616c726561647920736574000000000000006044820152606401610b9c565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f45a4cbe003c343d60028e5acd63eecf588647b0eb369733afa2c0482180d4f74906020015b60405180910390a150565b600f546001600160a01b0316156121ac5760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff1661220e5760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600d54604080516325ffda8160e21b815290516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281169316916397ff6a04916004808301926020929190829003018186803b15801561227457600080fd5b505afa158015612288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ac91906137c1565b6040517f19be8d120000000000000000000000000000000000000000000000000000000081526001600160d01b0319841660048201526001600160a01b0391909116906319be8d129060240160206040518083038186803b15801561231057600080fd5b505afa158015612324573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234891906137c1565b6001600160a01b03161461239e5760405162461bcd60e51b815260206004820152601160248201527f4d69736d617463686564206261736549640000000000000000000000000000006044820152606401610b9c565b600c805465ffffffffffff191660d083901c1790556040516001600160d01b0319821681527fa5a662d5f3165a00b47bd97ea0424c19490c0f263661390c2ab7dcedfa1a17ce90602001612158565b60005b8251811015610ef857612411610e8d84838151811061179757611797613f0f565b61244a5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b6044820152606401610b9c565b61246d83828151811061245f5761245f613f0f565b60200260200101518361338f565b8061247781613eb4565b9150506123f0565b600080356001600160e01b03191681526020818152604080832033845290915290205460ff166124e15760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b6044820152606401610b9c565b600f546001600160a01b03161561252a5760405162461bcd60e51b815260206004820152600d60248201526c141bdbdb081cd95b1958dd1959609a1b6044820152606401610b9c565b6011546001600160a01b0316806125835760405162461bcd60e51b815260206004820152601160248201527f4e65787420706f6f6c206e6f74207365740000000000000000000000000000006044820152606401610b9c565b60008190506000816001600160a01b031663dc3bfba96040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c357600080fd5b505afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb91906137c1565b60118054600f8054601080546001600160a01b038781166001600160a01b03199092169190911790915565ffffffffffff600160a01b808604918216026001600160d01b03199384168a8416171790935592169092556040516370a0823160e01b815230600482015292935060d09190911b916000917f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216906370a082319060240160206040518083038186803b1580156126b557600080fd5b505afa1580156126c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ed9190613bc7565b90506000811161273f5760405162461bcd60e51b815260206004820152601660248201527f4e6f2066756e647320746f2073746172742077697468000000000000000000006044820152606401610b9c565b6040516370a0823160e01b81526001600160a01b0385811660048301526000917f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2909116906370a082319060240160206040518083038186803b1580156127a557600080fd5b505afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613bc7565b6040516370a0823160e01b81526001600160a01b0387811660048301529192506000918616906370a082319060240160206040518083038186803b15801561282457600080fd5b505afa158015612838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285c9190613bc7565b9050600061287d61286d8385613da8565b6128778587613dd4565b90613425565b9050600061288b8286613e1b565b600c549091506128d2906001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811691660100000000000090041683612f30565b6010546040517fb64b80840000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152602482018490529091169063b64b808490604401600060405180830381600087803b15801561293957600080fd5b505af115801561294d573d6000803e3d6000fd5b506129879250506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21690508984612f30565b6040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815230600482018190526024820152604481018c9052606481018b90526001600160a01b0389169063b3f1c93d90608401606060405180830381600087803b1580156129f657600080fd5b505af1158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613c02565b6012555050600154612a4857612a4633601254613309565b505b6040517f9e1f907b0000000000000000000000000000000000000000000000000000000081526001600160a01b038916600482015273dc3758330939a0253f30083a23e884377834899190639e1f907b9060240160206040518083038186803b158015612ab457600080fd5b505af4158015612ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aec9190613b9e565b6001600160a01b03891660008181526013602090815260409182902080546fffffffffffffffffffffffffffffffff19166001600160801b039590951694909417909355519081527fbf392a2214e536eb932a25b4490f99634f238baedb37418c3fd6de8923c94133910160405180910390a15050505050505050505050565b6001600160a01b03838116600081815260036020908152604080832094871680845294825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b60408051606081018252600a546001600160801b0381168252600160801b810463ffffffff908116602080850191909152600160a01b9092046bffffffffffffffffffffffff168385015283518085019094526009548082168086526401000000009091049091169184019190915260015491929190612c5442613345565b63ffffffff161015612c6557505050565b6000612c7d612c7342613345565b8460200151613468565b90506000846020015182612c919190613e32565b63ffffffff16905080612ca5575050505050565b8215612d1057612d048386604001516bffffffffffffffffffffffff1683670de0b6b3a7640000612cd69190613dd4565b612ce09190613dd4565b612cea9190613dc0565b8651612cff91906001600160801b0316613da8565b61348a565b6001600160801b031685525b63ffffffff8216602086018190528551600a80546040808a01516bffffffffffffffffffffffff16600160a01b026001600160a01b03600160801b9096026001600160a01b03199093166001600160801b03861617929092179490941617905590517fe972555b20cae8150e291bb40efce3ef4e3ed6b6b2c39c029346600e95469d4891612dac916001600160801b0391909116815260200190565b60405180910390a15050505050565b6001600160a01b0381166000908152600b602090815260408083208151808301835290546001600160801b038082168352600160801b9182900481168386019081528451606081018652600a5492831680825293830463ffffffff1696810196909652600160a01b9091046bffffffffffffffffffffffff16938501939093529151909291612ea391670de0b6b3a764000091612e589190613df3565b6001600160a01b038716600090815260026020526040902054612e84916001600160801b031690613dd4565b612e8e9190613dc0565b8351612cff91906001600160801b0316613da8565b6001600160801b0390811683528151811660208085019182526001600160a01b0387166000818152600b835260409081902087519451948616600160801b95909616948502861790558051918252918101939093528201527f5b9aaf4cc5141c090a75f8b8a627863eba92df81f0c83c096350da9b79aedd049060600160405180910390a1505192915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691612fba9190613c8c565b6000604051808303816000865af19150503d8060008114612ff7576040519150601f19603f3d011682016040523d82523d6000602084013e612ffc565b606091505b509150915081801561302657508051158061302657508080602001905181019061302691906139c1565b61304c57613033816134d3565b60405162461bcd60e51b8152600401610b9c9190613d44565b5050505050565b60006001600160a01b03831633146130f3576001600160a01b038316600090815260036020908152604080832033845290915290205460001981146130f157828110156130e25760405162461bcd60e51b815260206004820152601c60248201527f45524332303a20496e73756666696369656e7420617070726f76616c000000006044820152606401610b9c565b6130ef8433858403612b6c565b505b505b50600192915050565b6000613106612bd5565b61310f84612dbb565b5061311983612dbb565b50610abd848484613532565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60046040516131579190613ca8565b60408051918290038220828201825260018352603160f81b602093840152815180840194909452838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301949094523060a0808401919091528451808403909101815260c09092019093528051920191909120919050565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915290205460ff1615610f72576001600160e01b031982166000818152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339391927f4ddc7b757e7bdd7254a9cd39452d307a52761bc824625c6a33104a075d8099e691a45050565b6001600160e01b0319811661329e836001600160e01b03191660009081526020819052604090206001015460e01b90565b6001600160e01b03191614610f72576001600160e01b0319828116600081815260208190526040808220600101805463ffffffff191660e087901c17905551928416927fd348e2220a50b4500ec353f6e802d2f14dd1b5d6786148fd1bbcc570bf92d4739190a35050565b6000613313612bd5565b61331c83612dbb565b506109c58383613621565b6000613331612bd5565b61333a83612dbb565b506109c583836136ba565b600063ffffffff82111561338b5760405162461bcd60e51b815260206004820152600d60248201526c43617374206f766572666c6f7760981b6044820152606401610b9c565b5090565b6001600160e01b031982166000908152602081815260408083206001600160a01b038516845290915290205460ff16610f72576001600160e01b031982166000818152602081815260408083206001600160a01b0386168085529252808320805460ff1916600117905551339391927fe6231789d19137da31d0550f4ba9ee379020a8cfb64cb79bf1790c996d2e616591a45050565b60006134318284613ecf565b15613453576134408284613dc0565b61344b906001613da8565b905080613461565b61345d8284613dc0565b9050805b5092915050565b60008163ffffffff168363ffffffff161061348357816109c5565b5090919050565b60006001600160801b0382111561338b5760405162461bcd60e51b815260206004820152600d60248201526c43617374206f766572666c6f7760981b6044820152606401610b9c565b606060448251101561351857505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190610f979190613a98565b6001600160a01b03831660009081526002602052604081205482111561359a5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e73756666696369656e742062616c616e636500000000006044820152606401610b9c565b6001600160a01b0380851660009081526002602052604080822080548690039055918516815220546135cd908390613da8565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612bc39086815260200190565b6001600160a01b038216600090815260026020526040812054613645908390613da8565b6001600160a01b03841660009081526002602052604090205560015461366c908390613da8565b6001556040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350600192915050565b6001600160a01b0382166000908152600260205260408120548211156137225760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e73756666696369656e742062616c616e636500000000006044820152606401610b9c565b6001600160a01b038316600081815260026020908152604080832080548790039055600180548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016136a9565b803561378781613f3b565b919050565b80356001600160e01b03198116811461378757600080fd5b6000602082840312156137b657600080fd5b81356109c581613f3b565b6000602082840312156137d357600080fd5b81516109c581613f3b565b600080604083850312156137f157600080fd5b82356137fc81613f3b565b9150602083013561380c81613f3b565b809150509250929050565b60008060006060848603121561382c57600080fd5b833561383781613f3b565b9250602084013561384781613f3b565b929592945050506040919091013590565b600080600080600080600060e0888a03121561387357600080fd5b873561387e81613f3b565b9650602088013561388e81613f3b565b95506040880135945060608801359350608088013560ff811681146138b257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156138e257600080fd5b82356138ed81613f3b565b946020939093013593505050565b6000806040838503121561390e57600080fd5b823567ffffffffffffffff8082111561392657600080fd5b818501915085601f83011261393a57600080fd5b813560208282111561394e5761394e613f25565b8160051b925061395f818401613d77565b8281528181019085830185870184018b101561397a57600080fd5b600096505b848710156139a4576139908161378c565b83526001969096019591830191830161397f565b5096506139b4905087820161377c565b9450505050509250929050565b6000602082840312156139d357600080fd5b815180151581146109c557600080fd5b6000602082840312156139f557600080fd5b6109c58261378c565b60008060408385031215613a1157600080fd5b6137fc8361378c565b60008060408385031215613a2d57600080fd5b613a368361378c565b9150613a446020840161378c565b90509250929050565b600060208284031215613a5f57600080fd5b81356109c581613f53565b60008060408385031215613a7d57600080fd5b8235613a8881613f3b565b9150602083013561380c81613f53565b600060208284031215613aaa57600080fd5b815167ffffffffffffffff80821115613ac257600080fd5b818401915084601f830112613ad657600080fd5b815181811115613ae857613ae8613f25565b613afb601f8201601f1916602001613d77565b9150808252856020828501011115613b1257600080fd5b613b23816020840160208601613e4f565b50949350505050565b600060608284031215613b3e57600080fd5b6040516060810181811067ffffffffffffffff82111715613b6157613b61613f25565b6040528251613b6f81613f3b565b81526020830151613b7f81613f53565b60208201526040830151613b9281613f69565b60408201529392505050565b600060208284031215613bb057600080fd5b81516001600160801b03811681146109c557600080fd5b600060208284031215613bd957600080fd5b5051919050565b60008060408385031215613bf357600080fd5b50508035926020909101359150565b600080600060608486031215613c1757600080fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215613c4557600080fd5b8335613c5081613f69565b92506020840135613c6081613f69565b915060408401356bffffffffffffffffffffffff81168114613c8157600080fd5b809150509250925092565b60008251613c9e818460208701613e4f565b9190910192915050565b600080835481600182811c915080831680613cc457607f831692505b6020808410821415613ce457634e487b7160e01b86526022600452602486fd5b818015613cf85760018114613d0957613d36565b60ff19861689528489019650613d36565b60008a81526020902060005b86811015613d2e5781548b820152908501908301613d15565b505084890196505b509498975050505050505050565b6020815260008251806020840152613d63816040850160208701613e4f565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613da057613da0613f25565b604052919050565b60008219821115613dbb57613dbb613ee3565b500190565b600082613dcf57613dcf613ef9565b500490565b6000816000190483118215151615613dee57613dee613ee3565b500290565b60006001600160801b0383811690831681811015613e1357613e13613ee3565b039392505050565b600082821015613e2d57613e2d613ee3565b500390565b600063ffffffff83811690831681811015613e1357613e13613ee3565b60005b83811015613e6a578181015183820152602001613e52565b83811115613e79576000848401525b50505050565b600181811c90821680613e9357607f821691505b602082108114156119ed57634e487b7160e01b600052602260045260246000fd5b6000600019821415613ec857613ec8613ee3565b5060010190565b600082613ede57613ede613ef9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613f5057600080fd5b50565b6001600160d01b031981168114613f5057600080fd5b63ffffffff81168114613f5057600080fdfea264697066735822122049af07b32bb63c724ae6146d9c9ce70501d8420cc4ca495dd760cd5e6f8540bc64736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006cb18ff2a33e981d1e38a663ca056c0a5265066a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d5969656c642053747261746567792045544820364d204a756e2044656300000000000000000000000000000000000000000000000000000000000000000000095953455448364d4a440000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Yield Strategy ETH 6M Jun Dec
Arg [1] : symbol (string): YSETH6MJD
Arg [2] : ladle_ (address): 0x6cB18fF2A33e981D1e38A663Ca056c0a5265066A
Arg [3] : base_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : baseId_ (bytes6): 0x303000000000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000006cb18ff2a33e981d1e38a663ca056c0a5265066a
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 3030000000000000000000000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001d
Arg [6] : 5969656c642053747261746567792045544820364d204a756e20446563000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 5953455448364d4a440000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.