More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Loading...
Loading
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.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xC998A3de...7126456c4 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
PrincipalToken
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {FixedPointMathLib} from "solady/src/utils/FixedPointMathLib.sol";import {SafeTransferLib} from "solady/src/utils/SafeTransferLib.sol";import {DynamicArrayLib} from "solady/src/utils/DynamicArrayLib.sol";import {SafeCastLib} from "solady/src/utils/SafeCastLib.sol";import {LibString} from "solady/src/utils/LibString.sol";import {ECDSA} from "solady/src/utils/ECDSA.sol";// Interfacesimport "../Types.sol";import {IHook} from "../interfaces/IHook.sol";import {FeeModule} from "../modules/FeeModule.sol";import {IRewardProxy} from "../interfaces/IRewardProxy.sol";import {VerifierModule} from "../modules/VerifierModule.sol";import {VaultInfoResolver} from "../modules/resolvers/VaultInfoResolver.sol";import {Factory} from "../Factory.sol";import {YieldToken} from "./YieldToken.sol";// Librariesimport {LibRewardProxy} from "../utils/LibRewardProxy.sol";import {ModuleAccessor} from "../utils/ModuleAccessor.sol";import {TokenNameLib} from "../utils/TokenNameLib.sol";import {CustomRevert} from "../utils/CustomRevert.sol";import {LibExpiry} from "../utils/LibExpiry.sol";import {Events} from "../Events.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Arithmetic library with operations for fixed-point numbers./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/FixedPointMathLib.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)library FixedPointMathLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The operation failed, as the output exceeds the maximum value of uint256.error ExpOverflow();/// @dev The operation failed, as the output exceeds the maximum value of uint256.error FactorialOverflow();/// @dev The operation failed, due to an overflow.error RPowOverflow();/// @dev The mantissa is too big to fit.error MantissaOverflow();/// @dev The operation failed, due to an multiplication overflow.error MulWadFailed();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)/// @author Permit2 operations from (https://github.com/Uniswap/permit2/blob/main/src/libraries/Permit2Lib.sol)////// @dev Note:/// - For ETH transfers, please use `forceSafeTransferETH` for DoS protection.library SafeTransferLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The ETH transfer has failed.error ETHTransferFailed();/// @dev The ERC20 `transferFrom` has failed.error TransferFromFailed();/// @dev The ERC20 `transfer` has failed.error TransferFailed();/// @dev The ERC20 `approve` has failed.error ApproveFailed();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for memory arrays with automatic capacity resizing./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/DynamicArrayLib.sol)library DynamicArrayLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STRUCTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Type to represent a dynamic array in memory./// You can directly assign to `data`, and the `p` function will/// take care of the memory allocation.struct DynamicArray {uint256[] data;}/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CONSTANTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The constant returned when the element is not found in the array.uint256 internal constant NOT_FOUND = type(uint256).max;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* UINT256 ARRAY OPERATIONS */
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Safe integer casting library that reverts on overflow./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeCastLib.sol)/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeCast.sol)/// @dev Optimized for runtime gas for very high number of optimizer runs (i.e. >= 1000000).library SafeCastLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Unable to cast to the target type due to overflow.error Overflow();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* UNSIGNED INTEGER SAFE CASTING OPERATIONS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Casts `x` to a uint8. Reverts on overflow.function toUint8(uint256 x) internal pure returns (uint8) {if (x >= 1 << 8) _revertOverflow();return uint8(x);}/// @dev Casts `x` to a uint16. Reverts on overflow.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import {LibBytes} from "./LibBytes.sol";/// @notice Library for converting numbers into strings and other string operations./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibString.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/LibString.sol)////// @dev Note:/// For performance and bytecode compactness, most of the string operations are restricted to/// byte strings (7-bit ASCII), except where otherwise specified./// Usage of byte string operations on charsets with runes spanning two or more bytes/// can lead to undefined behavior.library LibString {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STRUCTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Goated string storage struct that totally MOGs, no cap, fr./// Uses less gas and bytecode than Solidity's native string storage. It's meta af./// Packs length with the first 31 bytes if <255 bytes, so it’s mad tight.struct StringStorage {bytes32 _spacer;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Gas optimized ECDSA wrapper./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ECDSA.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ECDSA.sol)/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol)////// @dev Note:/// - The recovery functions use the ecrecover precompile (0x1)./// - As of Solady version 0.0.68, the `recover` variants will revert upon recovery failure./// This is for more safety by default./// Use the `tryRecover` variants if you need to get the zero address back/// upon recovery failure instead./// - As of Solady version 0.0.134, all `bytes signature` variants accept both/// regular 65-byte `(r, s, v)` and EIP-2098 `(r, vs)` short form signatures./// See: https://eips.ethereum.org/EIPS/eip-2098/// This is for calldata efficiency on smart accounts prevalent on L2s.////// WARNING! Do NOT directly use signatures as unique identifiers:/// - The recovery operations do NOT check if a signature is non-malleable./// - Use a nonce in the digest to prevent replay attacks on the same contract./// - Use EIP-712 for the digest to prevent replay attacks across different chains and contracts./// EIP-712 also enables readable signing of typed data for better user safety./// - If you need a unique hash from a signature, please use the `canonicalHash` functions.library ECDSA {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import "./types/Token.sol" as TokenType;import "./types/FeePcts.sol" as FeePctsType;import "./types/ApproxValue.sol" as ApproxValueType;import "./types/TwoCrypto.sol" as TwoCryptoType;import "./types/ModuleIndex.sol" as ModuleIndexType;/// The `FeePcts` type is 256 bits long, and packs the following:////// ```/// | [uint176]: reserved for future use/// | | [uint16]: postSettlementFeePct/// | ↓ | [uint16]: redemptionFeePct/// | ↓ ↓ | [uint16]: performanceFeePct/// | ↓ ↓ ↓ | [uint16]: issuanceFeePct/// | ↓ ↓ ↓ ↓ ↓ [uint16]: splitPctBps/// 0x00000000000000000000000000000000000000000000AAAABBBBCCCCDDDDEEEE/// ```type FeePcts is uint256;using {FeePctsType.unwrap} for FeePcts global;/// The `ApproxValue` type represents an approximate value from off-chain sources or `Quoter` contract.type ApproxValue is uint256;
123456789101112// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;interface ISupplyHook {function onSupply(uint256 shares, uint256 principal, bytes calldata data) external;}interface IUniteHook {function onUnite(uint256 shares, uint256 principal, bytes calldata data) external;}interface IHook is ISupplyHook, IUniteHook {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {SafeCastLib} from "solady/src/utils/SafeCastLib.sol";import {LibClone} from "solady/src/utils/LibClone.sol";import {FeeParameters, FeePcts} from "../Types.sol";import {FeePctsLib} from "../utils/FeePctsLib.sol";import {Errors} from "../Errors.sol";import {Factory} from "../Factory.sol";import {BaseModule} from "./BaseModule.sol";/// @notice FeeModule is responsible for managing fee settingsabstract contract FeeModule is BaseModule {function getFeePcts() external view virtual returns (FeePcts);}/// @notice ConstantFeeModule is an implementation of FeeModule where all fees except split ratio are set once at initializationcontract ConstantFeeModule is FeeModule {using SafeCastLib for uint256;bytes32 public constant override VERSION = "2.0.0";uint256 private constant MAX_FEE_BPS = 10_000;uint256 private constant MAX_SPLIT_RATIO_BPS = 9_500;
123456789// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {TokenReward} from "src/Types.sol";interface IRewardProxy {function rewardTokens() external view returns (address[] memory);function collectReward(address rewardProxy) external returns (TokenReward[] memory);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {LibClone} from "solady/src/utils/LibClone.sol";import {SafeTransferLib} from "solady/src/utils/SafeTransferLib.sol";import {FixedPointMathLib} from "solady/src/utils/FixedPointMathLib.sol";import {VerificationStatus} from "../Types.sol";import {BaseModule} from "./BaseModule.sol";import {PrincipalToken} from "src/tokens/PrincipalToken.sol";/// @notice VerifierModule is used to restrict access to certain functions based on account and deposit cap./// @dev Integrators can extend this module to implement custom verification logic.abstract contract VerifierModule is BaseModule {bytes4 constant SUPPLY_SELECTOR = 0x674032b8;bytes4 constant SUPPLY_WITH_CALLBACK_SELECTOR = 0x5f04dfe2;bytes4 constant ISSUE_SELECTOR = 0xb696a6ad;bytes4 constant ISSUE_WITH_CALLBACK_SELECTOR = 0x6d4b055c;/// @dev MUST NOT revert./// @dev Key points: to distinguish between verification failure and unexpected error, the function/// must return verification status to indicate whether the transaction is allowed or not./// @dev The function MUST return VerificationStatus.Success if the transaction is allowed.function verify(bytes4 sig, address caller, uint256 shares, uint256 principal, address receiver)externalview
12345678910111213// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;/// @title VaultInfoResolver/// @notice Abstract contract for resolving vault information.abstract contract VaultInfoResolver {function asset() public view virtual returns (address);function target() public view virtual returns (address);function scale() public view virtual returns (uint256);function assetDecimals() public view virtual returns (uint8);function decimals() public view virtual returns (uint8);function label() public pure virtual returns (bytes32);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {SSTORE2} from "solady/src/utils/SSTORE2.sol";import {LibClone} from "solady/src/utils/LibClone.sol";import {LibTransient} from "solady/src/utils/LibTransient.sol";import {UUPSUpgradeable} from "solady/src/utils/UUPSUpgradeable.sol";import {EfficientHashLib} from "solady/src/utils/EfficientHashLib.sol";// Interfacesimport "./Types.sol";import {IPoolDeployer} from "./interfaces/IPoolDeployer.sol";// Modulesimport {BaseModule} from "./modules/BaseModule.sol";import {PrincipalToken} from "./tokens/PrincipalToken.sol";import {AccessManager, AccessManaged} from "./modules/AccessManager.sol";import {VaultInfoResolver} from "./modules/resolvers/VaultInfoResolver.sol";// Librariesimport {LibBlueprint} from "./utils/LibBlueprint.sol";import {ModuleAccessor} from "./utils/ModuleAccessor.sol";import {Errors} from "./Errors.sol";import {Events} from "./Events.sol";import "src/Constants.sol" as Constants;/// @notice Deployment Suite/// - Factory is responsible for deploying PrincipalToken, YT and Pool instances./// - Factory is agnostic to type of AMM by supporting multiple pool deployers implementations.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {ERC20} from "solady/src/tokens/ERC20.sol";import {PrincipalToken} from "./PrincipalToken.sol";import {TokenNameLib} from "../utils/TokenNameLib.sol";import {Errors} from "../Errors.sol";contract YieldToken is ERC20 {PrincipalToken public immutable i_principalToken;constructor(address _pt) {i_principalToken = PrincipalToken(_pt);}function name() public view override returns (string memory) {address underlying = _underlying();uint256 expiry = _maturity();return TokenNameLib.yieldTokenName(underlying, expiry);}function symbol() public view override returns (string memory) {address underlying = _underlying();uint256 expiry = _maturity();return TokenNameLib.yieldTokenSymbol(underlying, expiry);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;// https://gist.github.com/Vectorized/ebb23b2b5395b6d6aa83fc36af98a18cimport {TokenReward} from "../Types.sol";library LibRewardProxy {function delegateCallCollectReward(address rewardProxy) internal returns (TokenReward[] memory rewards) {assembly {mstore(0x14, rewardProxy) // Store the argument.mstore(0x00, 0x82c97b8d000000000000000000000000) // `collectReward(address)`.if iszero(delegatecall(gas(), rewardProxy, 0x10, 0x24, codesize(), 0x00)) {mstore(0x00, 0x3f12e961) // `PrincipalToken_CollectRewardFailed()`revert(0x1c, 0x04)}let m := mload(0x40) // Grab the free memory pointer.returndatacopy(m, 0x00, returndatasize()) // Just copy all of the return data.let t := add(m, mload(m)) // Pointer to `rewards` in the returndata.let n := mload(t) // `rewards.length`.let r := add(t, 0x20) // Pointer to `rewards[0]` in the returndata.// Skip the copied data.// We will initialize rewards as an array of pointers into the copied data.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {SSTORE2} from "solady/src/utils/SSTORE2.sol";import {ModuleIndex} from "../Types.sol";library ModuleAccessor {error ModuleOutOfBounds();function read(address pointer) internal view returns (address[] memory m) {// The first 32 bytes of the data is the offset to the start of the contents of the `data`. 0x20 is expected here.// The contents of the `data` is an address[] array.bytes memory data = SSTORE2.read(pointer);assembly {m := add(data, 0x40) // Grab the encoded array}}/// @notice Get a module address by index./// @dev Note: The module index is zero-based. Reverts with ModuleOutOfBounds if index is out of range.function get(address[] memory m, ModuleIndex idx) internal pure returns (address module) {assembly {if iszero(lt(idx, mload(m))) {mstore(0x00, 0x13bec8a3) // `ModuleOutOfBounds()`.revert(0x1c, 0x04)}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {MetadataReaderLib} from "solady/src/utils/MetadataReaderLib.sol";import {DateTimeLib} from "solady/src/utils/DateTimeLib.sol";import {LibString} from "solady/src/utils/LibString.sol";/// @dev Inputs `expiry` that exceed maximum timestamp results in undefined behavior.library TokenNameLib {using LibString for uint256;string constant PY_NAME_PREFIX = "NapierV2-";function principalTokenName(address target, uint256 expiry) internal view returns (string memory) {string memory underlyingName = MetadataReaderLib.readName(target);return string.concat(PY_NAME_PREFIX, "PT-", underlyingName, "@", expiryToDate(expiry));}function principalTokenSymbol(address target, uint256 expiry) internal view returns (string memory) {string memory underlyingSymbol = MetadataReaderLib.readSymbol(target);return string.concat("PT-", underlyingSymbol, "@", expiryToDate(expiry));}function yieldTokenName(address target, uint256 expiry) internal view returns (string memory) {string memory underlyingName = MetadataReaderLib.readName(target);return string.concat(PY_NAME_PREFIX, "YT-", underlyingName, "@", expiryToDate(expiry));
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.0;/// @notice Forked from https://github.com/Uniswap/v4-core/blob/c8173143cf1e6f1c6c7b682a3563b263f149255f/src/libraries/CustomRevert.sol/// @title Library for reverting with custom errors efficiently/// @notice Contains functions for reverting with custom errors with different argument types efficiently/// @dev To use this library, declare `using CustomRevert for bytes4;` and replace `revert CustomError()` with/// `CustomError.selector.revertWith()`/// @dev The functions may tamper with the free memory pointer but it is fine since the call context is exited immediatelylibrary CustomRevert {/// @dev Reverts with the selector of a custom error in the scratch spacefunction revertWith(bytes4 selector) internal pure {assembly ("memory-safe") {mstore(0, selector)revert(0, 0x04)}}function revertWith(bytes4 selector, uint256 value) internal pure {assembly ("memory-safe") {mstore(0, selector)mstore(0x04, value)revert(0, 0x24)}}}
123456789101112131415161718// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {EIP5095} from "../interfaces/EIP5095.sol";library LibExpiry {function isExpired(uint256 expiry) internal view returns (bool) {return block.timestamp >= expiry;}function isExpired(EIP5095 pt) internal view returns (bool) {return block.timestamp >= pt.maturity();}function isNotExpired(EIP5095 pt) internal view returns (bool) {return block.timestamp < pt.maturity();}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import "./Types.sol";library Events {/// @dev `keccak256(bytes("YieldFeeAccrued(uint256)"))`.uint256 constant _YIELD_FEE_ACCRUED_EVENT_SIGNATURE =0xac693c1b946bcf3ad16baa51b744b990b94ea9c79ac71f2d1b5369a823a7d065;/// @dev `keccak256(bytes("YieldAccrued(address,uint256,uint256)"))`.uint256 constant _YIELD_ACCRUED_EVENT_SIGNATURE = 0xaced61c86c507aa3c2be43553434c6ff191ea7cbbd812491a6ae59abc99d29dc;/// @dev `keccak256(bytes("Supply(address,address,uint256,uint256)"))`.uint256 constant _SUPPLY_EVENT_SIGNATURE = 0x69a3ea8e6d6819646fbf2b98e9e8dd6d9cd343852550621038b4d72e4aa6dd37;/// @dev `keccak256(bytes("Unite(address,address,uint256,uint256)"))`.uint256 constant _UNITE_EVENT_SIGNATURE = 0xc78456d21b5d71405d0daba05157c90a4a412d7379fd21c3bc8a679b65b13b5f;/// @dev `keccak256(bytes("Redeem(address,address,address,uint256,uint256)"))`.uint256 constant _REDEEM_EVENT_SIGNATURE = 0xaee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c;/// @dev `keccak256(bytes("InterestCollected(address,address,address,uint256)"))`.uint256 constant _INTEREST_COLLECTED_EVENT_SIGNATURE =0x54affe52c3988f9c9e1d9d4673ffb7b398832c049d65e63b51326c89255e8529;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;library Errors {error AccessManaged_Restricted();error Expired();error NotExpired();error PrincipalToken_NotFactory();error PrincipalToken_VerificationFailed(uint256 code);error PrincipalToken_CollectRewardFailed();error PrincipalToken_NotApprovedCollector();error PrincipalToken_OnlyYieldToken();error PrincipalToken_InsufficientSharesReceived();error PrincipalToken_UnderlyingTokenBalanceChanged();error PrincipalToken_Unstoppable();error PrincipalToken_ProtectedToken();error YieldToken_OnlyPrincipalToken();// Moduleerror Module_CallFailed();// FeeModuleerror FeeModule_InvalidFeeParam();error FeeModule_SplitFeeExceedsMaximum();
123456789101112131415161718192021222324// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;uint256 constant BASIS_POINTS = 10_000;uint256 constant WAD = 1e18;address constant NATIVE_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;// Rolesuint256 constant FEE_MANAGER_ROLE = 1 << 0;uint256 constant FEE_COLLECTOR_ROLE = 1 << 1;uint256 constant DEV_ROLE = 1 << 2;uint256 constant PAUSER_ROLE = 1 << 3;uint256 constant GOVERNANCE_ROLE = 1 << 4;uint256 constant CONNECTOR_REGISTRY_ROLE = 1 << 5;// TwoCryptouint256 constant TARGET_INDEX = 0;uint256 constant PT_INDEX = 1;// Currencyaddress constant WETH_ETHEREUM_MAINNET = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;// Default fee split ratio (100% to Curator)uint16 constant DEFAULT_SPLIT_RATIO_BPS = uint16(BASIS_POINTS);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {FeePcts} from "../Types.sol";library FeePctsLib {uint256 private constant FEE_MASK = 0xFFFF; // 16 bits maskuint256 private constant SPLIT_RATIO_OFFSET = 0;function getSplitPctBps(FeePcts self) internal pure returns (uint16) {return uint16(FeePcts.unwrap(self));}function getIssuanceFeePctBps(FeePcts self) internal pure returns (uint16) {return uint16(FeePcts.unwrap(self) >> 16);}function getPerformanceFeePctBps(FeePcts self) internal pure returns (uint16) {return uint16(FeePcts.unwrap(self) >> 32);}function getRedemptionFeePctBps(FeePcts self) internal pure returns (uint16) {return uint16(FeePcts.unwrap(self) >> 48);}function getPostSettlementFeePctBps(FeePcts self) internal pure returns (uint16) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {FixedPointMathLib} from "solady/src/utils/FixedPointMathLib.sol";import {SafeCastLib} from "solady/src/utils/SafeCastLib.sol";type YieldIndex is uint128;/// @param maxscale The last collected YBT share price in the underlying token./// @param globalIndex The accumulator of the accrued yield per YT.struct Snapshot {uint128 maxscale;YieldIndex globalIndex;}struct Yield {YieldIndex userIndex;uint128 accrued;}using {unwrap} for YieldIndex global;using {eq as ==, add as +, sub as -} for YieldIndex global;function unwrap(YieldIndex x) pure returns (uint128 result) {result = YieldIndex.unwrap(x);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {FixedPointMathLib} from "solady/src/utils/FixedPointMathLib.sol";import {SafeCastLib} from "solady/src/utils/SafeCastLib.sol";type RewardIndex is uint128;/// @notice A struct to store the reward information for a user./// @param userIndex The reward index when the user last accrued reward./// @param accrued The accrued reward since the last time the user accrued reward.struct Reward {RewardIndex userIndex; // rewardIndex_u(t_1): the reward index when the user last accrued rewarduint128 accrued; // r_u(t_1): the accrued reward since the last time the user accrued reward}using {unwrap} for RewardIndex global;using {eq as ==, add as +, sub as -} for RewardIndex global;function unwrap(RewardIndex x) pure returns (uint128 result) {result = RewardIndex.unwrap(x);}function wrap(uint128 x) pure returns (RewardIndex result) {result = RewardIndex.wrap(x);}
123456789101112131415161718192021222324// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.0;/// @notice Principal tokens (zero-coupon tokens) are redeemable for a single underlying EIP-20 token at a future timestamp./// https://eips.ethereum.org/EIPS/eip-5095interface EIP5095 {/// @dev We think EIP-5095 `Redeem` event lacks `by` and `principal` fields./// So we emit our own `Redeem` event instead of EIP-5095 `Redeem` event.event Redeem(address indexed owner, address indexed receiver, uint256 underlyings);/// @notice The address of the underlying token used by the Principal Token for accounting, and redeeming.function underlying() external view returns (address);/// @notice The unix timestamp (uint256) at or after which Principal Tokens can be redeemed for their underlying deposit.function maturity() external view returns (uint256 timestamp);/// @notice The amount of underlying that would be exchanged for the amount of PTs provided, in an ideal scenario where all the conditions are met./// @notice Before maturity, the amount of underlying returned is as if the PTs would be at maturity./// @notice MUST NOT be inclusive of any fees that are charged against redemptions./// @notice MUST NOT show any variations depending on the caller./// @notice MUST NOT reflect slippage or other on-chain conditions, when performing the actual redemption./// @notice MUST NOT revert unless due to integer overflow caused by an unreasonably large input./// @notice MUST round down towards 0./// @notice This calculation MAY NOT reflect the “per-user” price-per-principal-token, and instead should reflect the “average-user’s” price-per-principal-token, meaning what the average user should expect to see when exchanging to and from.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)pragma solidity ^0.8.20;import {Context} from "../utils/Context.sol";/*** @dev Contract module which allows children to implement an emergency stop* mechanism that can be triggered by an authorized account.** This module is used through inheritance. It will make available the* modifiers `whenNotPaused` and `whenPaused`, which can be applied to* the functions of your contract. Note that they will not be pausable by* simply including this module, only once the modifiers are put in place.*/abstract contract Pausable is Context {bool private _paused;/*** @dev Emitted when the pause is triggered by `account`.*/event Paused(address account);/*** @dev Emitted when the pause is lifted by `account`.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Reentrancy guard mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ReentrancyGuard.sol)abstract contract ReentrancyGuard {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Unauthorized reentrant call.error Reentrancy();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STORAGE *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Equivalent to: `uint72(bytes9(keccak256("_REENTRANCY_GUARD_SLOT")))`./// 9 bytes is large enough to avoid collisions with lower slots,/// but not too large to result in excessive bytecode bloat.uint256 private constant _REENTRANCY_GUARD_SLOT = 0x929eee149b4bd21268;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* REENTRANCY GUARD *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Simple ERC20 + EIP-2612 implementation./// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)////// @dev Note:/// - The ERC20 standard allows minting and transferring to and from the zero address,/// minting and transferring zero tokens, as well as self-approvals./// For performance, this implementation WILL NOT revert for such actions./// Please add any checks with overrides if desired./// - The `permit` function uses the ecrecover precompile (0x1).////// If you are overriding:/// - NEVER violate the ERC20 invariant:/// the total sum of all balances must be equal to `totalSupply()`./// - Check that the overridden function is actually used in the function you want to/// change the behavior of. Much of the code has been manually inlined for performance.abstract contract ERC20 {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The total supply has overflowed.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {OwnableRoles} from "solady/src/auth/OwnableRoles.sol";import {Initializable} from "solady/src/utils/Initializable.sol";import {Multicallable} from "solady/src/utils/Multicallable.sol";import "../Constants.sol" as Constants;import {Errors} from "../Errors.sol";/// @notice Access Manager module for managing single owner and multiple roles for multiple contracts and functions./// @dev Each PrincipalToken instance will have its own AccessManager instance to manage access control./// @dev AccessManager is a minimal proxy implementation to reduce deployment costs./// @dev Note: AccessManager must be initialized after deployment to set initial owner.contract AccessManager is OwnableRoles, Initializable, Multicallable {/// @notice Mapping of target contracts to their function selectors and roles that are allowed to call the functionmapping(address target => mapping(bytes4 selector => uint256 roles)) private s_targets;/// @notice Emitted when roles are granted for a target function/// @param target The address of the target contract/// @param selector The function selector/// @param roles The roles being grantedevent TargetFunctionRolesGranted(address indexed target, bytes4 indexed selector, uint256 indexed roles);/// @notice Emitted when roles are revoked for a target function/// @param target The address of the target contract
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {SafeTransferLib} from "solady/src/utils/SafeTransferLib.sol";abstract contract LibApproval {/// @dev The approval slot of (`src`, `spender`) is given by:/// ```/// mstore(0x20, spender)/// mstore(0x0c, _IS_APPROVED_SLOT_SEED)/// mstore(0x00, src)/// let allowanceSlot := keccak256(0x0c, 0x34)/// ```/// @dev Optimized storage slot for approval flags/// `mapping (address src => mapping (address spender => uint256 approved)) isApproved;`uint256 constant _IS_APPROVED_SLOT_SEED = 0xa8fe4407;/// @dev Get the approval status of the `spender` for the `src`. Return true if approved, 0 otherwise.function isApproved(address src, address spender) internal view returns (bool approved) {/// @solidity memory-safe-assemblyassembly {mstore(0x20, spender)mstore(0x0c, _IS_APPROVED_SLOT_SEED)mstore(0x00, src)approved := sload(keccak256(0x0c, 0x34))}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for byte related operations./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibBytes.sol)library LibBytes {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STRUCTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Goated bytes storage struct that totally MOGs, no cap, fr./// Uses less gas and bytecode than Solidity's native bytes storage. It's meta af./// Packs length with the first 31 bytes if <255 bytes, so it’s mad tight.struct BytesStorage {bytes32 _spacer;}/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CONSTANTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The constant returned when the `search` is not found in the bytes.uint256 internal constant NOT_FOUND = type(uint256).max;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* BYTE STORAGE OPERATIONS */
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {ERC20} from "solady/src/tokens/ERC20.sol";import {Token} from "../Types.sol";import {NATIVE_ETH} from "../Constants.sol";function unwrap(Token x) pure returns (address result) {result = Token.unwrap(x);}function erc20(Token token) pure returns (ERC20 result) {result = ERC20(Token.unwrap(token));}function isNative(Token x) pure returns (bool result) {result = Token.unwrap(x) == NATIVE_ETH;}function isNotNative(Token x) pure returns (bool result) {result = Token.unwrap(x) != NATIVE_ETH;}function eq(Token token0, address token1) pure returns (bool result) {result = Token.unwrap(token0) == token1;
12345678// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {FeePcts} from "../Types.sol";function unwrap(FeePcts x) pure returns (uint256 result) {result = FeePcts.unwrap(x);}
12345678// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {ApproxValue} from "../Types.sol";function unwrap(ApproxValue x) pure returns (uint256 result) {result = ApproxValue.unwrap(x);}
12345678// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {TwoCrypto} from "../Types.sol";function unwrap(TwoCrypto x) pure returns (address result) {result = TwoCrypto.unwrap(x);}
123456789101112131415161718// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.24;import {ModuleIndex, MAX_MODULES} from "../Types.sol";function unwrap(ModuleIndex x) pure returns (uint256 result) {result = ModuleIndex.unwrap(x);}/// @dev Checks if the given module index is supported by Factory./// @dev Even if Factory supports the module, Principal Token instance may not support it due to the length of the array mismatch.function isSupportedByFactory(ModuleIndex x) pure returns (bool result) {result = ModuleIndex.unwrap(x) < MAX_MODULES;}function eq(ModuleIndex x, ModuleIndex y) pure returns (bool result) {result = ModuleIndex.unwrap(x) == ModuleIndex.unwrap(y);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Minimal proxy library./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)/// @author Minimal proxy by 0age (https://github.com/0age)/// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)/// @author Minimal ERC1967 proxy by jtriley-eth (https://github.com/jtriley-eth/minimum-viable-proxy)////// @dev Minimal proxy:/// Although the sw0nt pattern saves 5 gas over the ERC1167 pattern during runtime,/// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,/// which saves 4 gas over the ERC1167 pattern during runtime, and has the smallest bytecode./// - Automatically verified on Etherscan.////// @dev Minimal proxy (PUSH0 variant):/// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai./// It is optimized first for minimal runtime gas, then for minimal bytecode./// The PUSH0 clone functions are intentionally postfixed with a jarring "_PUSH0" as/// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai./// Please use with caution./// - Automatically verified on Etherscan.////// @dev Clones with immutable args (CWIA):/// The implementation of CWIA here is does NOT append the immutable args into the calldata
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {LibClone} from "solady/src/utils/LibClone.sol";import {Initializable} from "solady/src/utils/Initializable.sol";import {Factory} from "../Factory.sol";import {AccessManager, AccessManaged} from "./AccessManager.sol";import {Errors} from "../Errors.sol";/// @dev Minimal proxy with CWIA implementation for modules. (LibClone.clone(implementation, args))/// args = abi.encode(principalToken, data) where data is module specific bytes-type dataabstract contract BaseModule is AccessManaged, Initializable {uint256 constant CWIA_ARG_OFFSET = 0x00;function VERSION() external pure virtual returns (bytes32);function i_factory() public view returns (Factory) {(bool s, bytes memory ret) = i_principalToken().staticcall(abi.encodeWithSignature("i_factory()"));if (!s) revert Errors.Module_CallFailed();return Factory(abi.decode(ret, (address)));}function i_accessManager() public view override returns (AccessManager) {(bool s, bytes memory ret) = i_principalToken().staticcall(abi.encodeWithSignature("i_accessManager()"));if (!s) revert Errors.Module_CallFailed();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Read and write to persistent storage at a fraction of the cost./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SSTORE2.sol)/// @author Saw-mon-and-Natalie (https://github.com/Saw-mon-and-Natalie)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)/// @author Modified from 0xSequence (https://github.com/0xSequence/sstore2/blob/master/contracts/SSTORE2.sol)/// @author Modified from SSTORE3 (https://github.com/Philogy/sstore3)library SSTORE2 {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CONSTANTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The proxy initialization code.uint256 private constant _CREATE3_PROXY_INITCODE = 0x67363d3d37363d34f03d5260086018f3;/// @dev Hash of the `_CREATE3_PROXY_INITCODE`./// Equivalent to `keccak256(abi.encodePacked(hex"67363d3d37363d34f03d5260086018f3"))`.bytes32 internal constant CREATE3_PROXY_INITCODE_HASH =0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for transient storage operations./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibTransient.sol)/// @author Modified from Transient Goodies by Philogy (https://github.com/Philogy/transient-goodies/blob/main/src/TransientBytesLib.sol)////// @dev Note: The functions postfixed with `Compat` will only use transient storage on L1./// L2s are super cheap anyway./// For best safety, always clear the storage after use.library LibTransient {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STRUCTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Pointer struct to a `uint256` in transient storage.struct TUint256 {uint256 _spacer;}/// @dev Pointer struct to a `int256` in transient storage.struct TInt256 {uint256 _spacer;}/// @dev Pointer struct to a `bytes32` in transient storage.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice UUPS proxy mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/UUPSUpgradeable.sol)/// @author Modified from OpenZeppelin/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/utils/UUPSUpgradeable.sol)////// @dev Note:/// - This implementation is intended to be used with ERC1967 proxies./// See: `LibClone.deployERC1967` and related functions./// - This implementation is NOT compatible with legacy OpenZeppelin proxies/// which do not store the implementation at `_ERC1967_IMPLEMENTATION_SLOT`.abstract contract UUPSUpgradeable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The upgrade failed.error UpgradeFailed();/// @dev The call is from an unauthorized call context.error UnauthorizedCallContext();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* IMMUTABLES */
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for efficiently performing keccak256 hashes./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/EfficientHashLib.sol)/// @dev To avoid stack-too-deep, you can use:/// ```/// bytes32[] memory buffer = EfficientHashLib.malloc(10);/// EfficientHashLib.set(buffer, 0, value0);/// ../// EfficientHashLib.set(buffer, 9, value9);/// bytes32 finalHash = EfficientHashLib.hash(buffer);/// ```library EfficientHashLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* MALLOC-LESS HASHING OPERATIONS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Returns `keccak256(abi.encode(v0))`.function hash(bytes32 v0) internal pure returns (bytes32 result) {/// @solidity memory-safe-assemblyassembly {mstore(0x00, v0)result := keccak256(0x00, 0x20)}}
12345678910// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;/// @notice Standard interface for deploying poolsinterface IPoolDeployer {function deploy(address target, address principalToken, bytes calldata initArgs)externalpayablereturns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.10;import {LibBytes} from "solady/src/utils/LibBytes.sol";import {SafeCastLib} from "solady/src/utils/SafeCastLib.sol";library LibBlueprint {using SafeCastLib for uint256;error DeploymentFailed();error InvalidBlueprint();/// @dev Deploy contract from blueprint using CREATE/// @param _blueprint Address of the blueprint contract/// @return The address of the deployed contractfunction create(address _blueprint) internal returns (address) {return _create(_blueprint, "");}/// @dev Return address(0) if deployment failsfunction tryCreate(address _blueprint, bytes memory args) internal returns (address deployed) {bytes memory initcode = extractCreationCode(_blueprint);// Combine initcode with constructor argumentsbytes memory deployCode = LibBytes.concat(initcode, args);// Deploy the contract
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for reading contract metadata robustly./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/MetadataReaderLib.sol)library MetadataReaderLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CONSTANTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Default gas stipend for contract reads. High enough for most practical use cases/// (able to SLOAD about 1000 bytes of data), but low enough to prevent griefing.uint256 internal constant GAS_STIPEND_NO_GRIEF = 100000;/// @dev Default string byte length limit.uint256 internal constant STRING_LIMIT_DEFAULT = 1000;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* METADATA READING OPERATIONS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/// Best-effort string reading operations.// Should NOT revert as long as sufficient gas is provided.//// Performs the following in order:// 1. Returns the empty string for the following cases:
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Library for date time operations./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/DateTimeLib.sol)/// @author Modified from BokkyPooBahsDateTimeLibrary (https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary)/// @dev/// Conventions:/// --------------------------------------------------------------------+/// Unit | Range | Notes |/// --------------------------------------------------------------------|/// timestamp | 0..0x1e18549868c76ff | Unix timestamp. |/// epochDay | 0..0x16d3e098039 | Days since 1970-01-01. |/// year | 1970..0xffffffff | Gregorian calendar year. |/// month | 1..12 | Gregorian calendar month. |/// day | 1..31 | Gregorian calendar day of month. |/// weekday | 1..7 | The day of the week (1-indexed). |/// --------------------------------------------------------------------+/// All timestamps of days are rounded down to 00:00:00 UTC.library DateTimeLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CONSTANTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/// Weekdays are 1-indexed, adhering to ISO 8601.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import {Ownable} from "./Ownable.sol";/// @notice Simple single owner and multiroles authorization mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)////// @dev Note:/// This implementation does NOT auto-initialize the owner to `msg.sender`./// You MUST call the `_initializeOwner` in the constructor / initializer.////// While the ownable portion follows/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,/// the nomenclature for the 2-step ownership handover may be unique to this codebase.abstract contract OwnableRoles is Ownable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* EVENTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The `user`'s roles is updated to `roles`./// Each bit of `roles` represents whether the role is set.event RolesUpdated(address indexed user, uint256 indexed roles);/// @dev `keccak256(bytes("RolesUpdated(address,uint256)"))`.uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Initializable mixin for the upgradeable contracts./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/Initializable.sol)/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/proxy/utils/Initializable.sol)abstract contract Initializable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The contract is already initialized.error InvalidInitialization();/// @dev The contract is not initializing.error NotInitializing();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* EVENTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Triggered when the contract has been initialized.event Initialized(uint64 version);/// @dev `keccak256(bytes("Initialized(uint64)"))`.bytes32 private constant _INTIALIZED_EVENT_SIGNATURE =
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Contract that enables a single call to call multiple methods on itself./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/Multicallable.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/Multicallable.sol)////// WARNING:/// This implementation is NOT to be used with ERC2771 out-of-the-box./// https://blog.openzeppelin.com/arbitrary-address-spoofing-vulnerability-erc2771context-multicall-public-disclosure/// This also applies to potentially other ERCs / patterns appending to the back of calldata.////// We do NOT have a check for ERC2771, as we do not inherit from OpenZeppelin's context./// Moreover, it is infeasible and inefficient for us to add checks and mitigations/// for all possible ERC / patterns appending to the back of calldata.////// We would highly recommend using an alternative pattern such as/// https://github.com/Vectorized/multicaller/// which is more flexible, futureproof, and safer by default.abstract contract Multicallable {/// @dev Apply `delegatecall` with the current contract to each calldata in `data`,/// and store the `abi.encode` formatted results of each `delegatecall` into `results`./// If any of the `delegatecall`s reverts, the entire context is reverted,/// and the error is bubbled up.////// By default, this function directly returns the results and terminates the call context.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Simple single owner authorization mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)////// @dev Note:/// This implementation does NOT auto-initialize the owner to `msg.sender`./// You MUST call the `_initializeOwner` in the constructor / initializer.////// While the ownable portion follows/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,/// the nomenclature for the 2-step ownership handover may be unique to this codebase.abstract contract Ownable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The caller is not authorized to call the function.error Unauthorized();/// @dev The `newOwner` cannot be the zero address.error NewOwnerIsZeroAddress();/// @dev The `pendingOwner` does not have a valid handover request.error NoHandoverRequest();
1234567891011121314151617181920212223242526{"remappings": ["@openzeppelin/=node_modules/@openzeppelin/","forge-std/=node_modules/forge-std/","halmos-cheatcodes/=node_modules/halmos-cheatcodes/","solady/=node_modules/solady/"],"optimizer": {"enabled": true,"runs": 1},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","abi"]}},"evmVersion": "cancun",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"AccessManaged_Restricted","type":"error"},{"inputs":[],"name":"AllowanceOverflow","type":"error"},{"inputs":[],"name":"AllowanceUnderflow","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidPermit","type":"error"},{"inputs":[],"name":"Permit2AllowanceIsFixedAtInfinity","type":"error"},{"inputs":[],"name":"PermitExpired","type":"error"},{"inputs":[],"name":"PrincipalToken_Unstoppable","type":"error"},{"inputs":[],"name":"Reentrancy","type":"error"},{"inputs":[],"name":"TotalSupplyOverflow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct TokenReward[]","name":"rewards","type":"tuple[]"}],"name":"CuratorFeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct TokenReward[]","name":"rewards","type":"tuple[]"}],"name":"ProtocolFeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"underlyings","type":"uint256"}],"name":"Redeem","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"collect","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TokenReward[]","name":"rewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"additionalTokens","type":"address[]"},{"internalType":"address","name":"feeReceiver","type":"address"}],"name":"collectCuratorFees","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TokenReward[]","name":"rewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"additionalTokens","type":"address[]"}],"name":"collectProtocolFees","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TokenReward[]","name":"rewards","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"collectRewards","outputs":[{"internalType":"uint256[]","name":"result","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"combine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"combine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToPrincipal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"name":"convertToUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getFeeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardGlobalIndex","outputs":[{"internalType":"RewardIndex","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSnapshot","outputs":[{"components":[{"internalType":"uint128","name":"maxscale","type":"uint128"},{"internalType":"YieldIndex","name":"globalIndex","type":"uint128"}],"internalType":"struct Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"getUserReward","outputs":[{"components":[{"internalType":"RewardIndex","name":"userIndex","type":"uint128"},{"internalType":"uint128","name":"accrued","type":"uint128"}],"internalType":"struct Reward","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getUserYield","outputs":[{"components":[{"internalType":"YieldIndex","name":"userIndex","type":"uint128"},{"internalType":"uint128","name":"accrued","type":"uint128"}],"internalType":"struct Yield","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i_accessManager","outputs":[{"internalType":"contract AccessManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i_asset","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i_factory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i_resolver","outputs":[{"internalType":"contract VaultInfoResolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i_yt","outputs":[{"internalType":"contract YieldToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"collector","type":"address"}],"name":"isApprovedCollector","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSettled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"issue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"issue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maturity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxIssue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"balanceOfOwner","type":"uint256"},{"internalType":"uint256","name":"balanceOfReceiver","type":"uint256"}],"name":"onYtTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"collector","type":"address"},{"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":"permitCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"previewCollect","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"name":"previewCombine","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"name":"previewIssue","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewSupply","outputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewUnite","outputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"s_modules","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"bool","name":"isApproved","type":"bool"}],"name":"setApprovalCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"modules","type":"address"}],"name":"setModules","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unite","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"unite","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106102d2575f3560e01c8062aa45a5146102d6578063064f853f1461030057806306fdde0314610334578063095ea7b3146103495780630a28a4771461036c5780630b5c090c1461038d578063147eefd0146103a557806318160ddd146103b85780631dc7f521146103c8578063204f83f9146103db57806323b872dd1461040157806325a8d87d14610414578063313ce567146104275780633270bb5b146104415780633644e515146104495780633f4ba83a146104515780634229abdd1461045b57806349a2c466146104ca5780634cdad506146104dd578063597fa895146104f05780635ab764ed146105035780635b5936961461056d5780635c975abb146105945780635f04dfe21461059e57806361dcf131146105b157806363851e4a146105c4578063674032b8146105d75780636d4b055c146105ea5780636f307dc3146105fd57806370a082311461062357806371b74a9914610636578063722aa7a3146106495780637ecebe001461065c57806381dddb0e1461066f578063827fd1f1146106825780638456cb59146106ce57806395832897146106d657806395d89b41146106de5780639c54297c146106e65780639cc7becf14610738578063a12ef25e1461074b578063a1818b6e1461075e578063a199bf721461077e578063a9059cbb146107a5578063b286de41146107b8578063b37257ec146107cb578063b460af94146107de578063b696a6ad146107f1578063b77b47a914610804578063ba0876521461082b578063bdffbdf61461083e578063c999d90614610851578063ce79fc3914610864578063ce96cb77146108b9578063d505accf146108cc578063d77175d2146108df578063d905777e146108f2578063db8d55f114610905578063dd62ed3e14610921578063e807aa7914610934578063f550dd3514610947578063fafe6cad1461095a578063ffa1ad741461096d575b5f80fd5b6102e96102e43660046146c1565b61097c565b6040516102f79291906146ff565b60405180910390f35b6103277f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b6040516102f79190614761565b61033c610b36565b6040516102f791906147b8565b61035c6103573660046147de565b610b47565b60405190151581526020016102f7565b61037f61037a366004614808565b610bb4565b6040519081526020016102f7565b5f54610327906201000090046001600160a01b031681565b61037f6103b3366004614808565b610ca4565b6805345cdf77eb68f44c5461037f565b61037f6103d6366004614808565b610cc3565b7f000000000000000000000000000000000000000000000000000000006853da8c61037f565b61035c61040f36600461481f565b610d73565b61037f610422366004614808565b610e2f565b61042f610e9d565b60405160ff90911681526020016102f7565b61035c610f1e565b61037f610f4b565b610459610fac565b005b6104bd61046936600461485d565b604080518082019091525f8082526020820152506001600160a01b03165f908152600460209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040516102f79190614878565b6104596104d83660046148a9565b610fc6565b61037f6104eb366004614808565b610fd5565b61037f6104fe366004614808565b6110b8565b6104bd6105113660046148e0565b6040805180820182525f80825260209182018190526001600160a01b03948516815260068252828120939094168452918252918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6103277f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f81565b5f5460ff1661035c565b61037f6105ac366004614950565b6110d7565b61037f6105bf36600461485d565b6112de565b6104596105d236600461485d565b611305565b61037f6105e53660046149f9565b61136e565b61037f6105f8366004614950565b611388565b7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe3955610327565b61037f61063136600461485d565b611572565b61037f610644366004614808565b611589565b61037f610657366004614950565b61166d565b61037f61066a36600461485d565b611870565b61037f61067d3660046149f9565b611887565b6106b661069036600461485d565b6001600160a01b03165f908152600660205260409020600201546001600160801b031690565b6040516001600160801b0390911681526020016102f7565b6104596118a1565b610327611943565b61033c611967565b6040805180820182525f808252602091820152815180830183526001546001600160801b03808216808452600160801b90920481169284019283528451918252915190911691810191909152016102f7565b61037f61074636600461485d565b611973565b6102e96107593660046148e0565b611a32565b61077161076c366004614a1c565b611ce9565b6040516102f79190614a7f565b6103277f000000000000000000000000565c0f7181cdec7a54d7f598a6ccf9dc3a6e50df81565b61035c6107b33660046147de565b611dd0565b6104596107c6366004614ac2565b611e34565b61035c6107d93660046148e0565b61200f565b61037f6107ec366004614b05565b61202d565b61037f6107ff3660046149f9565b612154565b6103277f0000000000000000000000000000001afbca1e8cf82fe458b33c9954a65b987b81565b61037f610839366004614b05565b61216e565b61037f61084c366004614950565b612288565b61037f61085f366004614808565b612441565b6108a461087236600461485d565b6001600160a01b03165f908152600660205260409020600101546001600160801b0380821692600160801b9092041690565b604080519283526020830191909152016102f7565b61037f6108c736600461485d565b612525565b6104596108da366004614b52565b612545565b6104596108ed366004614bbe565b6126cd565b61037f61090036600461485d565b6127bf565b6005546001600160801b0380821691600160801b9004166108a4565b61037f61092f3660046148e0565b6127dc565b6102e9610942366004614c1f565b612820565b61037f6109553660046149f9565b6128da565b61037f61096836600461485d565b6128f4565b61037f640322e302e360dc1b81565b5f60607f0000000000000000000000000000001afbca1e8cf82fe458b33c9954a65b987b6001600160a01b031663958328976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ff9190614c66565b610a0881612a50565b5f7f0000000000000000000000000000001afbca1e8cf82fe458b33c9954a65b987b6001600160a01b031663b0eacef06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190614c66565b600580546001600160801b03808216909255600160801b90041694509050610ab38686835f612b0e565b9250610ae07f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39558286612d90565b806001600160a01b0316336001600160a01b03167f34e4121734ea24c5a809467b9b240905cbd91636805cb1e5e36cc9f498c09a1a8686604051610b259291906146ff565b60405180910390a350509250929050565b6060610b426002612dda565b905090565b5f6001600160a01b0383166e22d473030f116ddee9f6b43ac78ba31882191517610b7857633f68539a5f526004601cfd5b82602052637f5e9f20600c52335f52816034600c2055815f52602c5160601c335f80516020614f2883398151915260205fa35060015b92915050565b5f3068929eee149b4bd212685403610bd35763ab143c065f526004601cfd5b610bdb612de5565b610be657505f919050565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f8054610c9d9291610c3891610c32906201000090046001600160a01b0316612e0c565b90612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c979190614c81565b84612e30565b5092915050565b5f3068929eee149b4bd212685403610be65763ab143c065f526004601cfd5b5f80610d5f7f000000000000000000000000565c0f7181cdec7a54d7f598a6ccf9dc3a6e50df6001600160a01b031663f51e181a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d489190614c81565b6001546001600160801b0316808218908210021890565b9050610d6c83825f612ec1565b9392505050565b5f8360601b6e22d473030f116ddee9f6b43ac78ba33314610dc85733602052637f5e9f208117600c526034600c208054801915610dc55780851115610dbf576313be252b5f526004601cfd5b84810382555b50505b6387a211a28117600c526020600c20805480851115610dee5763f4d678b85f526004601cfd5b84810382555050835f526020600c208381540181555082602052600c5160601c8160601c5f80516020614f08833981519152602080a3505060019392505050565b5f80610e907f000000000000000000000000565c0f7181cdec7a54d7f598a6ccf9dc3a6e50df6001600160a01b031663f51e181a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d5f803e3d5ffd5b9050610d6c83825f612ef3565b5f7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610efa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b429190614c98565b5f3068929eee149b4bd212685403610f3d5763ab143c065f526004601cfd5b505f54610100900460ff1690565b5f80610f55612f0c565b905080610f6e57610f64610b36565b8051906020012090505b5f610f77612f30565b604080515f80516020614f48833981519152815260208101949094528301525046606082015230608082015260a09020919050565b610fbc610fb7611943565b612a50565b610fc4612f54565b565b610fd1338383612f9f565b5050565b5f3068929eee149b4bd212685403610ff45763ab143c065f526004601cfd5b610ffc612de5565b61100757505f919050565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f8054610c9d929161105391610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b29190614c81565b84612fc4565b5f3068929eee149b4bd2126854036110075763ab143c065f526004601cfd5b5f3068929eee149b4bd2126854036110f65763ab143c065f526004601cfd5b3068929eee149b4bd212685561110a613040565b611112612de5565b1561112757611127630407b05b60e31b613063565b5f8054611142906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f6111788382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d79190614c81565b90505f806111e684848b61306b565b915091505f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016112379190614761565b602060405180830381865afa158015611252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112769190614c81565b9050611284868b858c6130ce565b61128f8585846131c8565b61129a858a83613288565b5f6112a4876132c3565b90506112b485825f808e87613366565b6112c1338b8d878d6135fa565b5091955050505050505b3868929eee149b4bd21268559392505050565b5f806112e983611973565b90505f1981036112fc57505f1992915050565b610d6c81610e2f565b336001600160a01b037f0000000000000000000000000000001afbca1e8cf82fe458b33c9954a65b987b16146113455761134563090f8f0360e01b613063565b5f80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b5f610d6c838360405180602001604052805f8152506110d7565b5f3068929eee149b4bd2126854036113a75763ab143c065f526004601cfd5b3068929eee149b4bd21268556113bb613040565b6113c3612de5565b156113d8576113d8630407b05b60e31b613063565b5f80546113f3906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f6114298382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114889190614c81565b90505f8061149784848b613728565b915091505f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016114e89190614761565b602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190614c81565b905061153586848c8c6130ce565b6115408585846131c8565b61154b858a83613288565b5f611555876132c3565b905061156585825f808e87613366565b6112c1338b868e8d6135fa565b6387a211a2600c9081525f91909152602090205490565b5f3068929eee149b4bd2126854036115a85763ab143c065f526004601cfd5b6115b0613770565b156115bc57505f919050565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f8054610c9d929161160891610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611643573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116679190614c81565b84613728565b5f3068929eee149b4bd21268540361168c5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f80546116b3906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f6116e98382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611724573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117489190614c81565b90505f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016117979190614761565b602060405180830381865afa1580156117b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d69190614c81565b90505f806117e585858c612fc4565b915091506117f48585836131c8565b6117ff853385613288565b5f611809876132c3565b9050611819858233875f80613366565b611826338b858e8d613788565b509095505050505050611837612de5565b801561184a57505f54610100900460ff16155b156112cb575f805461ff0019166101001790553868929eee149b4bd21268559392505050565b6338377508600c9081525f91909152602090205490565b5f610d6c838360405180602001604052805f81525061166d565b6118ac610fb7611943565b5f6118b5611943565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119149190614c66565b6001600160a01b03160361193b57604051633be94ab960e01b815260040160405180910390fd5b610fc46138a5565b7f000000000000000000000000912aaa74a3701a6e09cd1113d55fd683e6c2b17e90565b6060610b426003612dda565b5f61197c613770565b1561198857505f919050565b5f80546119ae906119a7906201000090046001600160a01b0316612e0c565b60026138e1565b90506001600160a01b0381166119c757505f1992915050565b604051639cc7becf60e01b81526001600160a01b03821690639cc7becf906119f3908690600401614761565b602060405180830381865afa158015611a0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6c9190614c81565b5f60603068929eee149b4bd212685403611a535763ab143c065f526004601cfd5b3068929eee149b4bd212685582611a69816138fa565b5f8054611a84906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f611aba8382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b199190614c81565b90505f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401611b689190614761565b602060405180830381865afa158015611b83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba79190614c81565b90505f80611bb785858c8661392f565b91509150611bc68585836131c8565b611bd1858b85613288565b6001600160a01b038a165f90815260046020526040902080546001600160801b03169055611c01338c8c856139bc565b611c0a866132c3565b9750611c1a84898c865f80613366565b5f5b88518114611c7357611c4b898281518110611c3957611c39614cb3565b60200260200101515f01518d8d6139f9565b898281518110611c5d57611c5d614cb3565b6020908102919091018101510152600101611c1c565b50611c9f7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39558c84612d90565b50965050505050611cae612de5565b8015611cc157505f54610100900460ff16155b15611cd5575f805461ff0019166101001790555b503868929eee149b4bd21268559250929050565b60603068929eee149b4bd212685403611d095763ab143c065f526004601cfd5b3068929eee149b4bd212685581611d1f816138fa565b846001600160401b03811115611d3757611d3761490c565b604051908082528060200260200182016040528015611d60578160200160208202803683370190505b5091505f5b808614611dba57611db18382611da28a8a86818110611d8657611d86614cb3565b9050602002016020810190611d9b919061485d565b89896139f9565b60059190911b82016020015290565b50600101611d65565b50503868929eee149b4bd2126855949350505050565b5f6387a211a2600c52335f526020600c20805480841115611df85763f4d678b85f526004601cfd5b83810382555050825f526020600c208281540181555081602052600c5160601c335f80516020614f08833981519152602080a350600192915050565b3068929eee149b4bd212685403611e525763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f1614611e9e57611e9e632a15dec960e01b613063565b5f8054611eb9906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f611eef8382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4e9190614c81565b5f805491925090610100900460ff16611f7057611f6b8260201c90565b611f7a565b611f7a8260401c90565b61ffff1690505f611f8b8483613aa1565b9050611f988484836131c8565b611fa3848a89613288565b611fae848988613288565b50505f611fba846132c3565b9050611fca82828a898b8a613366565b50505050611fd6612de5565b8015611fe957505f54610100900460ff16155b15611ffd575f805461ff0019166101001790555b3868929eee149b4bd212685550505050565b602081905263a8fe4407600c9081525f838152603490912054610d6c565b5f3068929eee149b4bd21268540361204c5763ab143c065f526004601cfd5b3068929eee149b4bd2126855612060612de5565b6120745761207463d0404f8560e01b613063565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f80546120bd908290610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211c9190614c81565b90505f8061212b84848a612e30565b9150915061213a8484836131c8565b6121473387898b86613b6c565b5092505050611837612de5565b5f610d6c838360405180602001604052805f815250611388565b5f3068929eee149b4bd21268540361218d5763ab143c065f526004601cfd5b3068929eee149b4bd21268556121a1612de5565b6121b5576121b563d0404f8560e01b613063565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f80546121fe908290610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612239573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225d9190614c81565b90505f8061226c84848a612fc4565b9150915061227b8484836131c8565b612147338789858c613b6c565b5f3068929eee149b4bd2126854036122a75763ab143c065f526004601cfd5b3068929eee149b4bd21268555f80546122ce906201000090046001600160a01b0316612e0c565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201529091505f6123048382612e22565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561233f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123639190614c81565b90505f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016123b29190614761565b602060405180830381865afa1580156123cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123f19190614c81565b90505f8061240085858c612e30565b9150915061240f8585836131c8565b61241a853385613288565b5f612424876132c3565b9050612434858233875f80613366565b611826338b8d868d613788565b5f3068929eee149b4bd2126854036124605763ab143c065f526004601cfd5b612468613770565b1561247457505f919050565b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f8054610c9d92916124c091610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251f9190614c81565b8461306b565b5f61252e612de5565b61253957505f919050565b610bae6103d683611572565b6001600160a01b0386166e22d473030f116ddee9f6b43ac78ba3188519151761257557633f68539a5f526004601cfd5b5f61257e612f0c565b9050806125975761258d610b36565b8051906020012090505b5f6125a0612f30565b9050854211156125b757631a15a3cc5f526004601cfd5b6040518960601b60601c99508860601b60601c985065383775081901600e52895f526020600c2080545f80516020614f48833981519152835284602084015283604084015246606084015230608084015260a08320602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983528b60208401528a60408401528960608401528060808401528860a084015260c08320604e526042602c205f528760ff16602052866040528560605260208060805f60015afa8c3d511461268c5763ddafbaef5f526004601cfd5b0190556303faf4f960a51b89176040526034602c20889055888a5f80516020614f28833981519152602060608501a360405250505f60605250505050505050565b834211156126e257631a15a3cc5f526004601cfd5b5f6126ec87611870565b90505f6126f7610f4b565b90505f6040517fabaa81be0e21ab93788e05cd5409517fd2908fd1c16213aab992c623ac2cf0a4815289602082015288604082015283606082015287608082015260a08120905061190160301b5f5282601a5280603a5250604260182090505f603a525f61276782888888613bd0565b9050896001600160a01b0316816001600160a01b0316146127925761279263ddafbaef60e01b613063565b6338377508600c52895f52600184016020600c20556127b38a8a6001612f9f565b50505050505050505050565b5f6127c8612de5565b6127d357505f919050565b610bae82611572565b5f6e22d473030f116ddee9f6b43ac78ba2196001600160a01b0383160161280557505f19610bae565b50602052637f5e9f20600c9081525f91909152603490205490565b5f606061282e610fb7611943565b600580546001600160801b031981169091556001600160801b031691506128588585856001612b0e565b90506128857f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39558484612d90565b826001600160a01b0316336001600160a01b03167f0562ba6de49a83ceb76e48ca97646748a8b943775cb1141dae72fbde60713a5884846040516128ca9291906146ff565b60405180910390a3935093915050565b5f610d6c838360405180602001604052805f815250612288565b5f3068929eee149b4bd2126854036129135763ab143c065f526004601cfd5b604080518082019091526001546001600160801b038082168352600160801b9091041660208201525f8054610c9d929161295f91610c32906201000090046001600160a01b0316612e0c565b6001600160a01b0316631143367f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561299a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129be9190614c81565b6040516370a0823160e01b815285906001600160a01b037f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f16906370a0823190612a0c908490600401614761565b602060405180830381865afa158015612a27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4b9190614c81565b61392f565b6001600160a01b03811663b70096133330612a6e60045f3681614cc7565b612a7791614cee565b60405160e085901b6001600160e01b031990811682526001600160a01b039485166004830152929093166024840152166044820152606401602060405180830381865afa158015612aca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aee9190614d1e565b612b0b57604051630804ee0360e11b815260040160405180910390fd5b50565b6060805f612b3a6001612b345f60029054906101000a90046001600160a01b0316612e0c565b906138e1565b90506001600160a01b03811615612bb057806001600160a01b031663c2b18aa06040518163ffffffff1660e01b81526004015f60405180830381865afa158015612b86573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612bad9190810190614d39565b91505b8151612bbc8782614df9565b6001600160401b03811115612bd357612bd361490c565b604051908082528060200260200182016040528015612c1757816020015b604080518082019091525f8082526020820152815260200190600190039081612bf15790505b5093505f5b84518114612d84575f828210612c5a578989848403818110612c4057612c40614cb3565b9050602002016020810190612c55919061485d565b612c66565b6020600583901b860101515b6001600160a01b0381165f9081526006602052604090208751919250908290889085908110612c9757612c97614cb3565b60209081029190910101516001600160a01b0390911690528715612cff57600181015487516001600160801b0390911690889085908110612cda57612cda614cb3565b60209081029190910181015101526001810180546001600160801b0319169055612d52565b8060010160109054906101000a90046001600160801b03166001600160801b0316878481518110612d3257612d32614cb3565b60209081029190910181015101526001810180546001600160801b031690555b612d7a828a898681518110612d6957612d69614cb3565b602002602001015160200151612d90565b5050600101612c1c565b50505050949350505050565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416612dd057803d853b151710612dd0576390b8ec185f526004601cfd5b505f603452505050565b6060610bae82613c15565b7f000000000000000000000000000000000000000000000000000000006853da8c42101590565b60605f612e1883613c7b565b6040019392505050565b602090810291909101015190565b5f805481908190610100900460ff16612e5257612e4d8560201c90565b612e5c565b612e5c8560401c90565b61ffff1690505f612e6d8783613aa1565b90505f612e8786612e7e8960301c90565b61ffff16613ca7565b9050612ea8612e968288614df9565b89516001600160801b03166001612ef3565b9450612eb48183614df9565b9350505050935093915050565b5f612ee682612ed08686613cb5565b612eda8787613cff565b81189115919091021890565b949350505050565b505050565b5f612ee682612f028686613d41565b612eda8787613d77565b7fba49d6273554ebffef990dae3d74fefbcb632c3df76b4d619fa1eca00e956d8890565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc690565b612f5c613da6565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612f959190614761565b60405180910390a1565b602082905263a8fe4407600c9081525f84905260349020819055612eee838383613dc8565b5f805481908190610100900460ff16612fe657612fe18560201c90565b612ff0565b612ff08560401c90565b61ffff1690505f6130018783613aa1565b905061301a85885f01516001600160801b03165f612ec1565b93505f6130348561302b8960301c90565b61ffff16613e03565b9050612ea88186614e0c565b5f5460ff1615610fc45760405163d93c066560e01b815260040160405180910390fd5b805f5260045ffd5b5f805f6130858661307c8760201c90565b61ffff16613aa1565b90505f6130968561302b8860101c90565b90506130b66130a58287614e0c565b88516001600160801b03165f612ef3565b93506130c28183614df9565b92505050935093915050565b5f6130da8560026138e1565b90506001600160a01b0381166130f057506131c2565b604051635dd6ca8760e01b81525f80356001600160e01b031916600483015233602483015260448201869052606482018590526001600160a01b038481166084840152909190831690635dd6ca879060a401602060405180830381865afa15801561315d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131819190614e1f565b9050600181600481111561319757613197614e3d565b146131bf576131bf8160048111156131b1576131b1614e3d565b6309a88d2360e31b90613e1a565b50505b50505050565b5f6127106131da61ffff851684614e51565b6131e49190614e68565b845160208601516001600160801b03908116600160801b02918116919091176001556005549192506132219161321c91849116614df9565b613e26565b600580546001600160801b0319166001600160801b039283161790819055613262918391613258918691600160801b900416614df9565b61321c9190614e0c565b600580546001600160801b03928316600160801b0292169190911790556131c282613e3e565b5f61329a600485602001518585613e69565b90506131c283826132b587602001516001600160801b031690565b6001600160801b0316613f0e565b60605f6132d18360016138e1565b90506001600160a01b0381166132e75750919050565b5f6133127f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe395530613f48565b905061331d82613f72565b92508061334a7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe395530613f48565b1461335f5761335f6326668c8b60e21b613063565b5050919050565b5f7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e79190614c81565b5f805491925061010090910460ff16905b875181146135ef575f60065f8a848151811061341657613416614cb3565b60200260200101515f01516001600160a01b03166001600160a01b031681526020019081526020015f2090508215613550575f6134538b60401c90565b61ffff1690505f8a848151811061346c5761346c614cb3565b60200260200101516020015190505f6134888284612710614020565b90505f6127108e61349d9061ffff1684614e51565b6134a79190614e68565b60018601549091506001600160801b0380821691600160801b9004166134cd8486614e0c565b8f89815181106134df576134df614cb3565b60209081029190910181015101526134fa61321c8484614df9565b6001880180546001600160801b0319166001600160801b039290921691909117905561352a836132588684614df9565b6001880180546001600160801b03928316600160801b0292169190911790555050505050505b5f61358f826002015f9054906101000a90046001600160801b0316868c868151811061357e5761357e614cb3565b60200260200101516020015161404d565b506002830180546001600160801b0319166001600160801b03831617905590506001600160a01b038916156135ca576135ca82828b8b6140b8565b6001600160a01b038716156135e5576135e5828289896140b8565b50506001016133f8565b505050505050505050565b5f836136267f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe395530613f48565b6136309190614df9565b905061363e86868686614181565b8151156136b15761364f85846141bf565b6040516393a4c94d60e01b81526001600160a01b038716906393a4c94d9061367f90879087908790600401614e87565b5f604051808303815f87803b158015613696575f80fd5b505af11580156136a8573d5f803e3d5ffd5b505050506136e7565b6136dd7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe3955873087614240565b6136e785846141bf565b806137127f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe395530613f48565b10156131bf576131bf63ef5ab5eb60e01b613063565b5f805f6137398661307c8760201c90565b905061375384875f01516001600160801b03166001612ec1565b92505f61376484612e7e8860101c90565b90506130b68185614df9565b5f613779612de5565b80610b425750505f5460ff1690565b61379485858585614299565b6137bf7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39558585612d90565b80511561382457604051630ba3359b60e41b81526001600160a01b0386169063ba3359b0906137f690869086908690600401614e87565b5f604051808303815f87803b15801561380d575f80fd5b505af115801561381f573d5f803e3d5ffd5b505050505b61382e85836142d7565b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f1690639dc29fac9061387c9088908690600401614eae565b5f604051808303815f87803b158015613893575f80fd5b505af11580156135ef573d5f803e3d5ffd5b6138ad613040565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612f883390565b5f8251821015610bae5750602090810291909101015190565b336001600160a01b0382161480159061391a5750613918813361200f565b155b15612b0b57612b0b63194c285560e31b613063565b5f805481908190610100900460ff166139515761394c8660201c90565b61395b565b61395b8660401c90565b61ffff16905061396b8782613aa1565b915061397e600488602001518787614338565b6001600160a01b0386165f908152600460205260409020546139b09190600160801b90046001600160801b0316614df9565b92505094509492505050565b805f525f1960601c8281168482168683167f54affe52c3988f9c9e1d9d4673ffb7b398832c049d65e63b51326c89255e852960205fa45050505050565b5f7f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39556001600160a01b0316846001600160a01b031603613a4357613a43630555489160e01b613063565b506001600160a01b038084165f90815260066020908152604080832093851683529290522080546001600160801b038082168355600160801b9091041690613a8e3385858886614371565b613a99858584612d90565b509392505050565b5f612ee6837f000000000000000000000000565c0f7181cdec7a54d7f598a6ccf9dc3a6e50df6001600160a01b031663f51e181a613ae66805345cdf77eb68f44c5490565b7f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b669190614c81565b876143b5565b613b798584868585614490565b336001600160a01b03851614613b9457613b948433836144d2565b613b9e84826142d7565b613bc97f000000000000000000000000e5da20f15420ad15de0fa650600afc998bbe39558484612d90565b5050505050565b5f604051855f5260ff851660205283604052826060526020600160805f60015afa5191503d613c0657638baa579f5f526004601cfd5b5f606052604052949350505050565b60405181546020820190600881901c5f8260ff841714613c4357505080825260ff8116601f80821115613c65575b855f5260205f205b8160051c81015482860152602082019150828210613c4b57505b508084525f920191825250602001604052919050565b60405164ffffffffff5f19833b0116602181015f601f8401853c80825260408201810160405250919050565b5f610d6c8383612710614020565b5f7812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f2283108202613ce557637c5f487d5f526004601cfd5b50670de0b6b3a76400009190910281810615159190040190565b5f7812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f2283108202613d2f57637c5f487d5f526004601cfd5b50670de0b6b3a7640000919091020490565b8181028181048314613d60578115613d605763bac65e5b5f526004601cfd5b670de0b6b3a7640000808206151591040192915050565b5f815f1904831115613d96578115613d965763bac65e5b5f526004601cfd5b50670de0b6b3a764000091020490565b5f5460ff16610fc457604051638dfc202b60e01b815260040160405180910390fd5b8015155f525f1960601c8281168482167fa3b5109b351b1b1c9b05310b3176941fadf2a0c23d9bd59f5107f23d888202af60205fa350505050565b5f610d6c8383613e1561271082614df9565b614020565b815f528060045260245ffd5b5f600160801b8210613e3a57613e3a614533565b5090565b805f527fac693c1b946bcf3ad16baa51b744b990b94ea9c79ac71f2d1b5369a823a7d06560205fa150565b5f613e7685858585614338565b9050613e8181613e26565b6001600160a01b0384165f9081526020879052604090208054601090613eb8908490600160801b90046001600160801b0316614ec7565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03949094165f90815260209690965250604090942080546001600160801b031916939092169290921790555090565b815f52806020525f1960601c8381167faced61c86c507aa3c2be43553434c6ff191ea7cbbd812491a6ae59abc99d29dc60405fa250505050565b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b6060816014526382c97b8d60601b5f525f3860246010855af4613f9c57633f12e9615f526004601cfd5b6040513d5f823e8051810180516020820191503d8301808260061b84011160203d1017845160401c1715613fce575f38fd5b8115614017578181526020810193508160051b84016040528094505f5b8060061b8401805160a01c15613fff575f38fd5b808260051b87015250600181019050828103613feb57505b50505050919050565b8282028315848204841417820261403e5763ad251c275f526004601cfd5b81810615159190040192915050565b5f80835f036140605750839050816140b0565b6140768561407161321c8688613cff565b614540565b91506140a384614095614089858961455d565b6001600160801b031690565b6001600160801b0316613d77565b6140ad9084614e0c565b90505b935093915050565b6001600160a01b0382165f908152602085905260408120546001600160801b0316906140e883614095878561455d565b90506140f381613e26565b6001600160a01b0385165f908152602088905260409020805460109061412a908490600160801b90046001600160801b0316614ec7565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03959095165f9081526020979097525050604090942080546001600160801b031916939092169290921790555050565b815f52806020525f1960601c8381168582167f69a3ea8e6d6819646fbf2b98e9e8dd6d9cd343852550621038b4d72e4aa6dd3760405fa35050505050565b6141c98282614577565b6040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000a2f2659151fe682a0627c0e1c767507dfa2d5f16906340c10f19906142179085908590600401614eae565b5f604051808303815f87803b15801561422e575f80fd5b505af11580156131bf573d5f803e3d5ffd5b60405181606052826040528360601b602c526323b872dd60601b600c5260205f6064601c5f895af18060015f51141661428b57803d873b15171061428b57637939f4245f526004601cfd5b505f60605260405250505050565b815f52806020525f1960601c8381168582167fc78456d21b5d71405d0daba05157c90a4a412d7379fd21c3bc8a679b65b13b5f60405fa35050505050565b6387a211a2600c52815f526020600c208054808311156142fe5763f4d678b85f526004601cfd5b82900390556805345cdf77eb68f44c805482900390555f8181526001600160a01b0383165f80516020614f08833981519152602083a35050565b6001600160a01b0382165f908152602085905260408120546001600160801b031661436783614095878461455d565b9695505050505050565b5f1960601c8281165f52816020528381168582168783167fc295ddd3f2581ded7ee79ef613567c637f9eabc1c1cf6c107bffaf63461614aa60405fa4505050505050565b5f805f885f01516001600160801b031690505f61442989896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061441e9190614c81565b838110818518021890565b9050614437828289886145e0565b909450925061444581613e26565b6001600160801b03168a525f86900361445f575050614485565b6144748a6020015161407161321c878a613cff565b6001600160801b031660208b015250505b965096945050505050565b815f52806020525f1960601c8381168582168783167faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c60405fa4505050505050565b6e22d473030f116ddee9f6b43ac78ba2196001600160a01b038316016144f757505050565b81602052637f5e9f20600c52825f526034600c208054801915613bc95780831115614529576313be252b5f526004601cfd5b9190910390555050565b6335278d125f526004601cfd5b5f610d6c61455a6001600160801b03848116908616614ec7565b90565b5f610d6c61455a6001600160801b03848116908616614ee7565b6805345cdf77eb68f44c548181018181101561459a5763e5cfe9575f526004601cfd5b806805345cdf77eb68f44c5550506387a211a2600c52815f526020600c208181540181555080602052600c5160601c5f5f80516020614f08833981519152602080a35050565b5f80855f036145f357505f90508061461a565b5f6145ff878787614623565b905061460e8185612710614020565b91506139b08282614e0c565b94509492505050565b5f82841061463257505f610d6c565b835f0361464057505f610d6c565b61464a8385614e51565b6146548585614e0c565b61465e9084614e51565b61467090670de0b6b3a7640000614e51565b612ee69190614e68565b5f8083601f84011261468a575f80fd5b5081356001600160401b038111156146a0575f80fd5b6020830191508360208260051b85010111156146ba575f80fd5b9250929050565b5f80602083850312156146d2575f80fd5b82356001600160401b038111156146e7575f80fd5b6146f38582860161467a565b90969095509350505050565b5f60408083018584526020604060208601528186518084526060870191506020880193505f5b8181101561475357845180516001600160a01b03168452840151848401529383019391850191600101614725565b509098975050505050505050565b6001600160a01b0391909116815260200190565b5f81518084525f5b818110156147995760208185018101518683018201520161477d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610d6c6020830184614775565b6001600160a01b0381168114612b0b575f80fd5b5f80604083850312156147ef575f80fd5b82356147fa816147ca565b946020939093013593505050565b5f60208284031215614818575f80fd5b5035919050565b5f805f60608486031215614831575f80fd5b833561483c816147ca565b9250602084013561484c816147ca565b929592945050506040919091013590565b5f6020828403121561486d575f80fd5b8135610d6c816147ca565b60408101610bae828480516001600160801b03908116835260209182015116910152565b8015158114612b0b575f80fd5b5f80604083850312156148ba575f80fd5b82356148c5816147ca565b915060208301356148d58161489c565b809150509250929050565b5f80604083850312156148f1575f80fd5b82356148fc816147ca565b915060208301356148d5816147ca565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156149485761494861490c565b604052919050565b5f805f60608486031215614962575f80fd5b83359250602080850135614975816147ca565b925060408501356001600160401b0380821115614990575f80fd5b818701915087601f8301126149a3575f80fd5b8135818111156149b5576149b561490c565b6149c7601f8201601f19168501614920565b915080825288848285010111156149dc575f80fd5b80848401858401375f848284010152508093505050509250925092565b5f8060408385031215614a0a575f80fd5b8235915060208301356148d5816147ca565b5f805f8060608587031215614a2f575f80fd5b84356001600160401b03811115614a44575f80fd5b614a508782880161467a565b9095509350506020850135614a64816147ca565b91506040850135614a74816147ca565b939692955090935050565b602080825282518282018190525f9190848201906040850190845b81811015614ab657835183529284019291840191600101614a9a565b50909695505050505050565b5f805f8060808587031215614ad5575f80fd5b8435614ae0816147ca565b93506020850135614af0816147ca565b93969395505050506040820135916060013590565b5f805f60608486031215614b17575f80fd5b833592506020840135614b29816147ca565b91506040840135614b39816147ca565b809150509250925092565b60ff81168114612b0b575f80fd5b5f805f805f805f60e0888a031215614b68575f80fd5b8735614b73816147ca565b96506020880135614b83816147ca565b955060408801359450606088013593506080880135614ba181614b44565b9699959850939692959460a0840135945060c09093013592915050565b5f805f805f8060c08789031215614bd3575f80fd5b8635614bde816147ca565b95506020870135614bee816147ca565b9450604087013593506060870135614c0581614b44565b9598949750929560808101359460a0909101359350915050565b5f805f60408486031215614c31575f80fd5b83356001600160401b03811115614c46575f80fd5b614c528682870161467a565b9094509250506020840135614b39816147ca565b5f60208284031215614c76575f80fd5b8151610d6c816147ca565b5f60208284031215614c91575f80fd5b5051919050565b5f60208284031215614ca8575f80fd5b8151610d6c81614b44565b634e487b7160e01b5f52603260045260245ffd5b5f8085851115614cd5575f80fd5b83861115614ce1575f80fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015614d165780818660040360031b1b83161692505b505092915050565b5f60208284031215614d2e575f80fd5b8151610d6c8161489c565b5f6020808385031215614d4a575f80fd5b82516001600160401b0380821115614d60575f80fd5b818501915085601f830112614d73575f80fd5b815181811115614d8557614d8561490c565b8060051b9150614d96848301614920565b8181529183018401918481019088841115614daf575f80fd5b938501935b83851015614dd95784519250614dc9836147ca565b8282529385019390850190614db4565b98975050505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bae57610bae614de5565b81810381811115610bae57610bae614de5565b5f60208284031215614e2f575f80fd5b815160058110610d6c575f80fd5b634e487b7160e01b5f52602160045260245ffd5b8082028115828204841417610bae57610bae614de5565b5f82614e8257634e487b7160e01b5f52601260045260245ffd5b500490565b838152826020820152606060408201525f614ea56060830184614775565b95945050505050565b6001600160a01b03929092168252602082015260400190565b6001600160801b03818116838216019080821115610c9d57610c9d614de5565b6001600160801b03828116828216039080821115610c9d57610c9d614de556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa2646970667358221220ae817a6e576e78f77be7d1068f3caccb55e0d3d184566deda1586c9ebf0cfabc64736f6c63430008180033
Deployed Bytecode Sourcemap
6204:44094:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44610:594;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;7534:30;;;;;;;;;;;;:::i;48223:113::-;;;:::i;:::-;;;;;;;:::i;8175:1029:4:-;;;;;;:::i;:::-;;:::i;:::-;;;3224:14:53;;3217:22;3199:41;;3187:2;3172:18;8175:1029:4;3059:187:53;39467:287:36;;;;;;:::i;:::-;;:::i;:::-;;;3582:25:53;;;3570:2;3555:18;39467:287:36;3436:177:53;8058:24:36;;;;;;;;-1:-1:-1;;;;;8058:24:36;;;38648:244;;;;;;:::i;:::-;;:::i;6907:195:4:-;7067:18;7061:25;6907:195;;40049:253:36;;;;;;:::i;:::-;;:::i;48133:84::-;48202:8;48133:84;;11165:4753:4;;;;;;:::i;:::-;;:::i;40308:245:36:-;;;;;;:::i;:::-;;:::i;48469:99::-;;;:::i;:::-;;;4459:4:53;4447:17;;;4429:36;;4417:2;4402:18;48469:99:36;4287:184:53;48685:102:36;;;:::i;21458:737:4:-;;;:::i;47677:66:36:-;;;:::i;:::-;;42043:117;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;42134:19:36;;;;;:12;:19;;;;;;;;;42127:26;;;;;;;;;-1:-1:-1;;;;;42127:26:36;;;;;-1:-1:-1;;;42127:26:36;;;;;;;;;42043:117;;;;;;;;:::i;24405:148::-;;;;;;:::i;:::-;;:::i;39760:283::-;;;;;;:::i;:::-;;:::i;38898:248::-;;;;;;:::i;:::-;;:::i;42351:158::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;42460:23:36;;;;;:15;:23;;;;;:42;;;;;;;;;;;;;42453:49;;;;;;;;;-1:-1:-1;;;;;42453:49:36;;;;;-1:-1:-1;;;42453:49:36;;;;;;;;;42351:158;7310:32;;;;;1850:84:1;1897:4;1920:7;;;1850:84;;10371:1251:36;;;;;;:::i;:::-;;:::i;41460:256::-;;;;;;:::i;:::-;;:::i;46926:184::-;;;;;;:::i;:::-;;:::i;10236:129::-;;;;;;:::i;:::-;;:::i;11865:1211::-;;;;;;:::i;:::-;;:::i;48032:95::-;48111:8;48032:95;;7168:286:4;;;;;;:::i;:::-;;:::i;38353:289:36:-;;;;;;:::i;:::-;;:::i;15780:884::-;;;;;;:::i;:::-;;:::i;17137:340:4:-;;;;;;:::i;:::-;;:::i;15637:137:36:-;;;;;;:::i;:::-;;:::i;42823:141::-;;;;;;:::i;:::-;-1:-1:-1;;;;;42922:23:36;42892:11;42922:23;;;:15;:23;;;;;:35;;;-1:-1:-1;;;;;42922:35:36;;42823:141;;;;-1:-1:-1;;;;;8644:32:53;;;8626:51;;8614:2;8599:18;42823:141:36;8447:236:53;47329:159:36;;;:::i;50184:112::-;;;:::i;48342:121::-;;;:::i;48793:97::-;-1:-1:-1;;;;;;;;;;;;;;;;;48866:17:36;;;;;;;48873:10;48866:17;-1:-1:-1;;;;;48866:17:36;;;;;;-1:-1:-1;;;48866:17:36;;;;;;;;;;;48793:97;;9157:41:53;;;9240:24;;9236:33;;;9214:20;;;9207:63;;;;9092:18;48793:97:36;8919:357:53;40957:353:36;;;;;;:::i;:::-;;:::i;17349:1483::-;;;;;;:::i;:::-;;:::i;19043:529::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7418:45::-;;;;;9391:1406:4;;;;;;:::i;:::-;;:::i;20581:1133:36:-;;;;;;:::i;:::-;;:::i;37908:142::-;;;;;;:::i;:::-;;:::i;21796:708::-;;;;;;:::i;:::-;;:::i;11628:133::-;;;;;;:::i;:::-;;:::i;7198:34::-;;;;;22864:878;;;;;;:::i;:::-;;:::i;14409:880::-;;;;;;:::i;:::-;;:::i;38056:291::-;;;;;;:::i;:::-;;:::i;42515:183::-;;;;;;:::i;:::-;-1:-1:-1;;;;;42613:23:36;42577:7;42613:23;;;:15;:23;;;;;:37;;;-1:-1:-1;;;;;42613:37:36;;;;-1:-1:-1;;;42652:38:36;;;;;42515:183;;;;;12261:25:53;;;12317:2;12302:18;;12295:34;;;;12234:18;42515:183:36;12087:248:53;41871:166:36;;;;;;:::i;:::-;;:::i;17661:3716:4:-;;;;;;:::i;:::-;;:::i;24901:1969:36:-;;;;;;:::i;:::-;;:::i;41722:143::-;;;;;;:::i;:::-;;:::i;42704:113::-;42782:12;;-1:-1:-1;;;;;42782:12:36;;;;-1:-1:-1;;;42796:13:36;;;42704:113;;7549:495:4;;;;;;:::i;:::-;;:::i;43664:536:36:-;;;;;;:::i;:::-;;:::i;13953:127::-;;;;;;:::i;:::-;;:::i;39152:309::-;;;;;;:::i;:::-;;:::i;6586:41::-;;-1:-1:-1;;;6586:41:36;;44610:594;44760:14;44776:28;44714:9;-1:-1:-1;;;;;44714:25:36;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5716:31:31;5733:13;5716:16;:31::i;:::-;44820:16:36::1;44839:9;-1:-1:-1::0;;;;;44839:20:36::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44881:13;::::0;;-1:-1:-1;;;;;44904:17:36;;::::1;::::0;;;-1:-1:-1;;;44881:13:36;::::1;;::::0;-1:-1:-1;44820:41:36;-1:-1:-1;44942:97:36::1;44980:16:::0;;44820:41;44920:1:::1;44942:18;:97::i;:::-;44932:107;;45049:65;45086:8;45097;45107:6;45049:28;:65::i;:::-;45171:8;-1:-1:-1::0;;;;;45130:67:36::1;45159:10;-1:-1:-1::0;;;;;45130:67:36::1;;45181:6;45189:7;45130:67;;;;;;;:::i;:::-;;;;;;;;44810:394;44610:594:::0;;;;;;:::o;48223:113::-;48269:19;48308:21;48322:6;48308:13;:21::i;:::-;48300:29;;48223:113;:::o;8175:1029:4:-;8249:4;-1:-1:-1;;;;;8483:25:4;;8510:8;8479:40;8528:11;;8521:19;8476:65;8466:222;;8578:10;8572:4;8565:24;8665:4;8659;8652:18;8466:222;8864:7;8858:4;8851:21;8898:20;8892:4;8885:34;8945:8;8939:4;8932:22;8997:6;8990:4;8984;8974:21;8967:37;9072:6;9066:4;9059:20;9160:4;9154:11;9150:2;9146:20;9136:8;-1:-1:-1;;;;;;;;;;;9103:4:4;9097;9092:75;-1:-1:-1;9193:4:4;8175:1029;;;;;:::o;39467:287:36:-;39548:17;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;39582:12:36::1;:10;:12::i;:::-;39577:27;;-1:-1:-1::0;39603:1:36::1;39467:287:::0;;;:::o;39577:27::-:1;39641:106;::::0;;;;::::1;::::0;;;39658:10:::1;39641:106:::0;-1:-1:-1;;;;;39641:106:36;;::::1;::::0;;-1:-1:-1;;;39641:106:36;;::::1;;;::::0;::::1;::::0;-1:-1:-1;39680:9:36;;39641:106:::1;::::0;;39680:44:::1;::::0;:16:::1;::::0;:9;;::::1;-1:-1:-1::0;;;;;39680:9:36::1;:14;:16::i;:::-;:26:::0;::::1;:44::i;:::-;-1:-1:-1::0;;;;;39670:66:36::1;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39740:6;39641:16;:106::i;:::-;-1:-1:-1::0;39614:133:36;39467:287;-1:-1:-1;;39467:287:36:o;38648:244::-;38726:17;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;40049:253:36;40118:7;40137:16;40156:62;40178:10;-1:-1:-1;;;;;40178:16:36;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40198:10;:19;-1:-1:-1;;;;;40198:19:36;47492:9:9;;;47503:8;;-1:-1:-1;47488:24:9;47481:32;;47331:198;40156:62:36;40137:81;;40235:60;40268:9;40279:8;40289:5;40235:32;:60::i;:::-;40228:67;40049:253;-1:-1:-1;;;40049:253:36:o;11165:4753:4:-;11253:4;11533;11529:2;11525:13;11578:8;11568;11565:22;11555:928;;11694:8;11688:4;11681:22;11747:20;11740:5;11737:31;11731:4;11724:45;11827:4;11821;11811:21;11877:13;11871:20;11993:10;11989:15;11986:479;;;12134:10;12126:6;12123:22;12120:183;;;12189:10;12183:4;12176:24;12272:4;12266;12259:18;12120:183;12435:6;12423:10;12419:23;12404:13;12397:46;11986:479;;;11555:928;12587:18;12580:5;12577:29;12571:4;12564:43;12663:4;12657;12647:21;12710:15;12704:22;12808:11;12800:6;12797:23;12794:158;;;12856:10;12850:4;12843:24;12929:4;12923;12916:18;12794:158;13069:6;13056:11;13052:24;13035:15;13028:49;;;13160:2;13154:4;13147:16;13217:4;13211;13201:21;13483:6;13467:13;13461:20;13457:33;13442:13;13435:56;;13567:6;13561:4;13554:20;13665:4;13659:11;13655:2;13651:20;13643:5;13639:2;13635:14;-1:-1:-1;;;;;;;;;;;13602:4:4;13596;13591:81;;-1:-1:-1;15907:4:4;11165:4753;;;;;:::o;40308:245:36:-;40373:7;40392:16;40411:62;40433:10;-1:-1:-1;;;;;40433:16:36;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40411:62;40392:81;;40490:56;40522:6;40530:8;40540:5;40490:31;:56::i;48469:99::-;48519:5;48543:7;-1:-1:-1;;;;;48543:16:36;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;48685:102::-;48746:4;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;-1:-1:-1;48769:11:36::1;::::0;::::1;::::0;::::1;;;::::0;48685:102::o;21458:737:4:-;21515:14;21541:16;21560:19;:17;:19::i;:::-;21541:38;-1:-1:-1;21541:38:4;21683:63;;21738:6;:4;:6::i;:::-;21722:24;;;;;;21711:35;;21683:63;21756:19;21778:14;:12;:14::i;:::-;21883:4;21877:11;;-1:-1:-1;;;;;;;;;;;21934:27:4;;21988:4;21981:12;;21974:30;;;;22024:12;;22017:33;-1:-1:-1;22084:9:4;22077:4;22070:12;;22063:31;22128:9;22121:4;22114:12;;22107:31;22174:4;22161:18;;;21458:737;-1:-1:-1;21458:737:4:o;47677:66:36:-;5596:35:31;5613:17;:15;:17::i;:::-;5596:16;:35::i;:::-;47726:10:36::1;:8;:10::i;:::-;47677:66::o:0;24405:148::-;24490:56;24512:10;24524:9;24535:10;24490:21;:56::i;:::-;24405:148;;:::o;39760:283::-;39842:14;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;39873:12:36::1;:10;:12::i;:::-;39868:27;;-1:-1:-1::0;39894:1:36::1;39467:287:::0;;;:::o;39868:27::-:1;39929:107;::::0;;;;::::1;::::0;;;39944:10:::1;39929:107:::0;-1:-1:-1;;;;;39929:107:36;;::::1;::::0;;-1:-1:-1;;;39929:107:36;;::::1;;;::::0;::::1;::::0;-1:-1:-1;39966:9:36;;39929:107:::1;::::0;;39966:44:::1;::::0;:16:::1;::::0;:9;;::::1;-1:-1:-1::0;;;;;39966:9:36::1;:14;:16::i;:44::-;-1:-1:-1::0;;;;;39956:66:36::1;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40026:9;39929:14;:107::i;38898:248::-:0;38981:14;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;10371:1251:36;10534:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;1474:19:1::1;:17;:19::i;:::-;49999:12:36::2;:10;:12::i;:::-;49995:54;;;50013:36;-1:-1:-1::0;;;50013:34:36::2;:36::i;:::-;10557:18:::3;10598:9:::0;;10578:30:::3;::::0;10598:9;;::::3;-1:-1:-1::0;;;;;10598:9:36::3;10578:19;:30::i;:::-;10618:37;::::0;;;;::::3;::::0;;;10645:10:::3;10618:37:::0;-1:-1:-1;;;;;10618:37:36;;::::3;::::0;;-1:-1:-1;;;10618:37:36;;::::3;;;::::0;::::3;::::0;10557:51;;-1:-1:-1;10618:24:36::3;10694:29;10557:51:::0;10618:24;10694:11:::3;:29::i;:::-;-1:-1:-1::0;;;;;10684:51:36::3;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10666:71;;10954:17;10973:11:::0;10988:41:::3;11003:8;11013:7;11022:6;10988:14;:41::i;:::-;10953:76;;;;11040:17;11060:4;-1:-1:-1::0;;;;;11060:14:36::3;;11075:8;11060:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11040:44;;11145:39;11153:1;11156:6;11164:9;11175:8;11145:7;:39::i;:::-;11195:35;11207:8;11217:7;11226:3;11195:11;:35::i;:::-;11241:43;11254:8;11264;11274:9;11241:12;:43::i;:::-;11328:28;11359:27;11384:1;11359:24;:27::i;:::-;11328:58;;11396:68;11411:7;11420;11437:1;11441::::0;11444:8:::3;11454:9;11396:14;:68::i;:::-;11526:62;11542:10;11554:8;11564:6;11572:9;11583:4;11526:15;:62::i;:::-;-1:-1:-1::0;11606:9:36;;-1:-1:-1;;;;;;50059:1:36::3;1937:10:17::0;1913:22;1906:42;10371:1251:36;;;;;:::o;41460:256::-;41519:7;41538:17;41558:19;41568:8;41558:9;:19::i;:::-;41538:39;;-1:-1:-1;;41591:9:36;:30;41587:60;;-1:-1:-1;;;41630:17:36;41460:256;-1:-1:-1;;41460:256:36:o;41587:60::-;41664:29;41683:9;41664:18;:29::i;46926:184::-;46986:10;-1:-1:-1;;;;;47008:9:36;46986:32;;46982:92;;47020:54;-1:-1:-1;;;47020:52:36;:54::i;:::-;47084:9;:19;;-1:-1:-1;;;;;47084:19:36;;;;;-1:-1:-1;;;;;;47084:19:36;;;;;;;;;46926:184::o;10236:129::-;10304:7;10330:28;10337:6;10345:8;10330:28;;;;;;;;;;;;:6;:28::i;11865:1211::-;12030:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;1474:19:1::1;:17;:19::i;:::-;49999:12:36::2;:10;:12::i;:::-;49995:54;;;50013:36;-1:-1:-1::0;;;50013:34:36::2;:36::i;:::-;12053:18:::3;12094:9:::0;;12074:30:::3;::::0;12094:9;;::::3;-1:-1:-1::0;;;;;12094:9:36::3;12074:19;:30::i;:::-;12114:37;::::0;;;;::::3;::::0;;;12141:10:::3;12114:37:::0;-1:-1:-1;;;;;12114:37:36;;::::3;::::0;;-1:-1:-1;;;12114:37:36;;::::3;;;::::0;::::3;::::0;12053:51;;-1:-1:-1;12114:24:36::3;12190:29;12053:51:::0;12114:24;12190:11:::3;:29::i;:::-;-1:-1:-1::0;;;;;12180:51:36::3;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12162:71;;12412:14;12428:11:::0;12443:43:::3;12457:8;12467:7;12476:9;12443:13;:43::i;:::-;12411:75;;;;12497:17;12517:4;-1:-1:-1::0;;;;;12517:14:36::3;;12532:8;12517:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12497:44;;12602:39;12610:1;12613:6;12621:9;12632:8;12602:7;:39::i;:::-;12652:35;12664:8;12674:7;12683:3;12652:11;:35::i;:::-;12698:43;12711:8;12721;12731:9;12698:12;:43::i;:::-;12785:28;12816:27;12841:1;12816:24;:27::i;:::-;12785:58;;12853:68;12868:7;12877;12894:1;12898::::0;12901:8:::3;12911:9;12853:14;:68::i;:::-;12983:62;12999:10;13011:8;13021:6;13029:9;13040:4;12983:15;:62::i;7168:286:4:-:0;7336:18;7330:4;7323:32;;;7231:14;7368:19;;;;7432:4;7416:21;;7410:28;;7168:286::o;38353:289:36:-;38434:14;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;38464:21:36::1;:19;:21::i;:::-;38460:35;;;-1:-1:-1::0;38494:1:36::1;39467:287:::0;;;:::o;38460:35::-:1;38529:106;::::0;;;;::::1;::::0;;;38543:10:::1;38529:106:::0;-1:-1:-1;;;;;38529:106:36;;::::1;::::0;;-1:-1:-1;;;38529:106:36;;::::1;;;::::0;::::1;::::0;-1:-1:-1;38565:9:36;;38529:106:::1;::::0;;38565:44:::1;::::0;:16:::1;::::0;:9;;::::1;-1:-1:-1::0;;;;;38565:9:36::1;:14;:16::i;:44::-;-1:-1:-1::0;;;;;38555:66:36::1;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38625:9;38529:13;:106::i;15780:884::-:0;15930:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;15953:18:36::2;15994:9:::0;;15974:30:::2;::::0;15994:9;;::::2;-1:-1:-1::0;;;;;15994:9:36::2;15974:19;:30::i;:::-;16014:37;::::0;;;;::::2;::::0;;;16041:10:::2;16014:37:::0;-1:-1:-1;;;;;16014:37:36;;::::2;::::0;;-1:-1:-1;;;16014:37:36;;::::2;;;::::0;::::2;::::0;15953:51;;-1:-1:-1;16014:24:36::2;16090:29;15953:51:::0;16014:24;16090:11:::2;:29::i;:::-;-1:-1:-1::0;;;;;16080:51:36::2;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16062:71;;16143:17;16163:4;-1:-1:-1::0;;;;;16163:14:36::2;;16178:10;16163:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16143:46;;16201:14;16217:11:::0;16232:45:::2;16248:8;16258:7;16267:9;16232:15;:45::i;:::-;16200:77;;;;16288:35;16300:8;16310:7;16319:3;16288:11;:35::i;:::-;16334:45;16347:8;16357:10;16369:9;16334:12;:45::i;:::-;16423:28;16454:27;16479:1;16454:24;:27::i;:::-;16423:58;;16491:70;16506:7;16515;16524:10;16536:9;16555:1;16559::::0;16491:14:::2;:70::i;:::-;16572:61;16587:10;16599:8;16609:6;16617:9;16628:4;16572:14;:61::i;:::-;-1:-1:-1::0;16651:6:36;;-1:-1:-1;;;;;;37357:12:36::1;:10;:12::i;:::-;:28;;;;-1:-1:-1::0;37374:11:36::1;::::0;::::1;::::0;::::1;;;37373:12;37357:28;37353:52;;;37387:11;:18:::0;;-1:-1:-1;;37387:18:36::1;;;::::0;;1937:10:17;1913:22;1906:42;15780:884:36;;;;;:::o;17137:340:4:-;17360:17;17354:4;17347:31;;;17197:14;17391:19;;;;17455:4;17439:21;;17433:28;;17137:340::o;15637:137:36:-;15709:7;15735:32;15743:9;15754:8;15735:32;;;;;;;;;;;;:7;:32::i;47329:159::-;5596:35:31;5613:17;:15;:17::i;5596:35::-;47417:1:36::1;47380:17;:15;:17::i;:::-;-1:-1:-1::0;;;;;47380:23:36::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47380:39:36::1;::::0;47376:87:::1;;47428:35;;-1:-1:-1::0;;;47428:35:36::1;;;;;;;;;;;47376:87;47473:8;:6;:8::i;50184:112::-:0;50273:16;;50184:112::o;48342:121::-;48390:21;48433:23;48447:8;48433:13;:23::i;40957:353::-;41015:7;41038:21;:19;:21::i;:::-;41034:35;;;-1:-1:-1;41068:1:36;;40957:353;-1:-1:-1;40957:353:36:o;41034:35::-;41079:16;41146:9;;41098:82;;41126:30;;41146:9;;;-1:-1:-1;;;;;41146:9:36;41126:19;:30::i;:::-;3779:1:26;41098:27:36;:82::i;:::-;41079:101;-1:-1:-1;;;;;;41194:22:36;;41190:52;;-1:-1:-1;;;41225:17:36;40957:353;-1:-1:-1;;40957:353:36:o;41190:52::-;41259:44;;-1:-1:-1;;;41259:44:36;;-1:-1:-1;;;;;41259:34:36;;;;;:44;;41294:8;;41259:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17349:1483::-;17518:7;17527:28;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;17470:5:36::1;49348:37;49379:5;49348:30;:37::i;:::-;17571:18:::3;17612:9:::0;;17592:30:::3;::::0;17612:9;;::::3;-1:-1:-1::0;;;;;17612:9:36::3;17592:19;:30::i;:::-;17632:37;::::0;;;;::::3;::::0;;;17659:10:::3;17632:37:::0;-1:-1:-1;;;;;17632:37:36;;::::3;::::0;;-1:-1:-1;;;17632:37:36;;::::3;;;::::0;::::3;::::0;17571:51;;-1:-1:-1;17632:24:36::3;17707:29;17571:51:::0;17632:24;17707:11:::3;:29::i;:::-;-1:-1:-1::0;;;;;17697:51:36::3;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17679:71;;17761:17;17781:4;-1:-1:-1::0;;;;;17781:14:36::3;;17796:5;17781:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17761:41;;17906:14;17922:11:::0;17937:52:::3;17953:8;17963:7;17972:5;17979:9;17937:15;:52::i;:::-;17905:84;;;;18000:35;18012:8;18022:7;18031:3;18000:11;:35::i;:::-;18113:40;18126:8;18136:5;18143:9;18113:12;:40::i;:::-;-1:-1:-1::0;;;;;18170:19:36;::::3;;::::0;;;:12:::3;:19;::::0;;;;18163:34;;-1:-1:-1;;;;;18163:34:36::3;::::0;;18208:96:::3;18242:10;18278:8:::0;18183:5;18296:6;18208:28:::3;:96::i;:::-;18379:27;18404:1;18379:24;:27::i;:::-;18369:37;;18416:65;18431:7;18440;18449:5;18456:9;18475:1;18479::::0;18416:14:::3;:65::i;:::-;18497:9;18492:224;18513:7;:14;18508:1;:19;18492:224;;18564:50;18580:7;18588:1;18580:10;;;;;;;;:::i;:::-;;;;;;;:16;;;18598:8;18608:5;18564:15;:50::i;:::-;18544:7;18552:1;18544:10;;;;;;;;:::i;:::-;;::::0;;::::3;::::0;;;;;;;:17:::3;:70:::0;18688:3:::3;;18492:224;;;;18726:65;18763:8;18774;18784:6;18726:28;:65::i;:::-;-1:-1:-1::0;18809:6:36;-1:-1:-1;;;;;37357:12:36::2;:10;:12::i;:::-;:28;;;;-1:-1:-1::0;37374:11:36::2;::::0;::::2;::::0;::::2;;;37373:12;37357:28;37353:52;;;37387:11;:18:::0;;-1:-1:-1;;37387:18:36::2;;;::::0;;37353:52:::2;1829:1:17::1;1937:10:::0;1913:22;1906:42;17349:1483:36;;;;;:::o;19043:529::-;19228:23;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;19204:5:36::1;49348:37;49379:5;49348:30;:37::i;:::-;19290:12:::0;-1:-1:-1;;;;;19276:34:36;::::2;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19276:34:36::2;;19267:43;;19325:9;19320:246;19336:24:::0;;::::2;19320:246;;19377:81;19397:6;19405:1;19408:49;19424:12;;19437:1;19424:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19441:8;19451:5;19408:15;:49::i;:::-;4264:1:6::0;4260:9;;;;4237:33;;4253:4;4237:33;4230:47;4153:1;4000:293;19377:81:36::2;-1:-1:-1::0;19538:3:36::2;;19320:246;;;;1829:1:17::1;1937:10:::0;1913:22;1906:42;19043:529:36;;;;;;:::o;9391:1406:4:-;9461:4;9670:18;9664:4;9657:32;9715:8;9709:4;9702:22;9776:4;9770;9760:21;9819:15;9813:22;9909:11;9901:6;9898:23;9895:146;;;9953:10;9947:4;9940:24;10022:4;10016;10009:18;9895:146;10150:6;10137:11;10133:24;10116:15;10109:49;;;10233:2;10227:4;10220:16;10286:4;10280;10270:21;10536:6;10520:13;10514:20;10510:33;10495:13;10488:56;;10612:6;10606:4;10599:20;10700:4;10694:11;10690:2;10686:20;10676:8;-1:-1:-1;;;;;;;;;;;10643:4:4;10637;10632:75;-1:-1:-1;10786:4:4;9391:1406;;;;:::o;20581:1133:36:-;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;20767:10:36::2;-1:-1:-1::0;;;;;20789:4:36::2;20767:27;;20763:91;;20796:58;-1:-1:-1::0;;;20796:56:36::2;:58::i;:::-;20865:18;20906:9:::0;;20886:30:::2;::::0;20906:9;;::::2;-1:-1:-1::0;;;;;20906:9:36::2;20886:19;:30::i;:::-;20926:37;::::0;;;;::::2;::::0;;;20953:10:::2;20926:37:::0;-1:-1:-1;;;;;20926:37:36;;::::2;::::0;;-1:-1:-1;;;20926:37:36;;::::2;;;::::0;::::2;::::0;20865:51;;-1:-1:-1;20926:24:36::2;21002:29;20865:51:::0;20926:24;21002:11:::2;:29::i;:::-;-1:-1:-1::0;;;;;20992:51:36::2;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21138:18;21159:11:::0;;20974:71;;-1:-1:-1;21138:18:36;21159:11:::2;::::0;::::2;;;:86;;21212:33;:7;636:2:44::0;612:26;;510:136;21212:33:36::2;21159:86;;;21173:36;:7;922:2:44::0;898:26;;793:139;21173:36:36::2;21138:107;;;;21260:11;21274:34;21287:8;21297:10;21274:12;:34::i;:::-;21260:48;;21323:35;21335:8;21345:7;21354:3;21323:11;:35::i;:::-;21424:45;21437:8;21447:5;21454:14;21424:12;:45::i;:::-;21483:51;21496:8;21506;21516:17;21483:12;:51::i;:::-;21055:490;;21555:28;21586:27;21611:1;21586:24;:27::i;:::-;21555:58;;21623:84;21638:7;21647;21656:5;21663:14;21679:8;21689:17;21623:14;:84::i;:::-;20753:961;;;;37357:12:::1;:10;:12::i;:::-;:28;;;;-1:-1:-1::0;37374:11:36::1;::::0;::::1;::::0;::::1;;;37373:12;37357:28;37353:52;;;37387:11;:18:::0;;-1:-1:-1;;37387:18:36::1;;;::::0;;37353:52:::1;1937:10:17::0;1913:22;1906:42;20581:1133:36;;;;:::o;37908:142::-;912:4:45;905:21;;;952:22;946:4;939:36;;;37992:4:36;988:17:45;;;1052:4;1036:21;;;1030:28;38015::36;741:333:45;21796:708:36;21958:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;50107:12:36::1;:10;:12::i;:::-;50102:58;;50121:39;-1:-1:-1::0;;;50121:37:36::1;:39::i;:::-;21981:37:::3;::::0;;;;::::3;::::0;;;22008:10:::3;21981:37:::0;-1:-1:-1;;;;;21981:37:36;;::::3;::::0;;-1:-1:-1;;;21981:37:36;;::::3;;;::::0;::::3;::::0;-1:-1:-1;22076:9:36;;22056:58:::3;::::0;-1:-1:-1;;22056:30:36::3;::::0;22076:9;;::::3;-1:-1:-1::0;;;;;22076:9:36::3;22056:19;:30::i;:58::-;-1:-1:-1::0;;;;;22046:80:36::3;;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22028:100;;22245:17;22264:11:::0;22279:43:::3;22296:8;22306:7;22315:6;22279:16;:43::i;:::-;22244:78;;;;22369:35;22381:8;22391:7;22400:3;22369:11;:35::i;:::-;22415:55;22423:10;22435:5;22442:8;22452:6;22460:9;22415:7;:55::i;:::-;-1:-1:-1::0;22488:9:36;-1:-1:-1;;;37357:12:36::2;:10;:12::i;11628:133::-:0;11698:7;11724:30;11730:9;11741:8;11724:30;;;;;;;;;;;;:5;:30::i;22864:878::-;23027:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;50107:12:36::1;:10;:12::i;:::-;50102:58;;50121:39;-1:-1:-1::0;;;50121:37:36::1;:39::i;:::-;23050:37:::3;::::0;;;;::::3;::::0;;;23077:10:::3;23050:37:::0;-1:-1:-1;;;;;23050:37:36;;::::3;::::0;;-1:-1:-1;;;23050:37:36;;::::3;;;::::0;::::3;::::0;-1:-1:-1;23145:9:36;;23125:58:::3;::::0;-1:-1:-1;;23125:30:36::3;::::0;23145:9;;::::3;-1:-1:-1::0;;;;;23145:9:36::3;23125:19;:30::i;:58::-;-1:-1:-1::0;;;;;23115:80:36::3;;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23097:100;;23333:14;23349:11:::0;23364:44:::3;23379:8;23389:7;23398:9;23364:14;:44::i;:::-;23332:76;;;;23455:35;23467:8;23477:7;23486:3;23455:11;:35::i;:::-;23656:55;23664:10;23676:5;23683:8;23693:6;23701:9;23656:7;:55::i;14409:880::-:0;14554:7;1635:9:17;1610:22;1604:29;1601:44;1598:158;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;14577:18:36::2;14618:9:::0;;14598:30:::2;::::0;14618:9;;::::2;-1:-1:-1::0;;;;;14618:9:36::2;14598:19;:30::i;:::-;14638:37;::::0;;;;::::2;::::0;;;14665:10:::2;14638:37:::0;-1:-1:-1;;;;;14638:37:36;;::::2;::::0;;-1:-1:-1;;;14638:37:36;;::::2;;;::::0;::::2;::::0;14577:51;;-1:-1:-1;14638:24:36::2;14714:29;14577:51:::0;14638:24;14714:11:::2;:29::i;:::-;-1:-1:-1::0;;;;;14704:51:36::2;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14686:71;;14767:17;14787:4;-1:-1:-1::0;;;;;14787:14:36::2;;14802:10;14787:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14767:46;;14825:17;14844:11:::0;14859:40:::2;14873:8;14883:7;14892:6;14859:13;:40::i;:::-;14824:75;;;;14910:35;14922:8;14932:7;14941:3;14910:11;:35::i;:::-;14956:45;14969:8;14979:10;14991:9;14956:12;:45::i;:::-;15045:28;15076:27;15101:1;15076:24;:27::i;:::-;15045:58;;15113:70;15128:7;15137;15146:10;15158:9;15177:1;15181::::0;15113:14:::2;:70::i;:::-;15194:61;15209:10;15221:8;15231:6;15239:9;15250:4;15194:14;:61::i;38056:291::-:0;38135:17;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;38168:21:36::1;:19;:21::i;:::-;38164:35;;;-1:-1:-1::0;38198:1:36::1;39467:287:::0;;;:::o;38164:35::-:1;38236:104;::::0;;;;::::1;::::0;;;38251:10:::1;38236:104:::0;-1:-1:-1;;;;;38236:104:36;;::::1;::::0;;-1:-1:-1;;;38236:104:36;;::::1;;;::::0;::::1;::::0;-1:-1:-1;38273:9:36;;38236:104:::1;::::0;;38273:44:::1;::::0;:16:::1;::::0;:9;;::::1;-1:-1:-1::0;;;;;38273:9:36::1;:14;:16::i;:44::-;-1:-1:-1::0;;;;;38263:66:36::1;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38333:6;38236:14;:104::i;41871:166::-:0;41930:7;41954:12;:10;:12::i;:::-;41949:27;;-1:-1:-1;41975:1:36;;41871:166;-1:-1:-1;41871:166:36:o;41949:27::-;41993:37;42013:16;42023:5;42013:9;:16::i;17661:3716:4:-;-1:-1:-1;;;;;18077:25:4;;18104:8;18073:40;18122:10;;18115:18;18070:64;18060:221;;18171:10;18165:4;18158:24;18258:4;18252;18245:18;18060:221;18314:16;18333:19;:17;:19::i;:::-;18314:38;-1:-1:-1;18314:38:4;18456:63;;18511:6;:4;:6::i;:::-;18495:24;;;;;;18484:35;;18456:63;18529:19;18551:14;:12;:14::i;:::-;18529:36;;18733:8;18720:11;18717:25;18714:142;;;18774:10;18768:4;18761:24;18837:4;18831;18824:18;18714:142;18884:4;18878:11;19000:5;18996:2;18992:14;18988:2;18984:23;18975:32;;19047:7;19043:2;19039:16;19035:2;19031:25;19020:36;;19140:39;19134:4;19127:53;19206:5;19200:4;19193:19;19258:4;19252;19242:21;19300:9;19294:16;-1:-1:-1;;;;;;;;;;;19375:1:4;19368:27;19429:8;19422:4;19419:1;19415:12;19408:30;19472:11;19465:4;19462:1;19458:12;19451:33;19518:9;19511:4;19508:1;19504:12;19497:31;19562:9;19555:4;19552:1;19548:12;19541:31;19611:4;19608:1;19598:18;19592:4;19585:32;19680:16;19677:1;19670:27;19731:5;19724:4;19721:1;19717:12;19710:27;19771:7;19764:4;19761:1;19757:12;19750:29;19813:5;19806:4;19803:1;19799:12;19792:27;19853:10;19846:4;19843:1;19839:12;19832:32;19898:8;19891:4;19888:1;19884:12;19877:30;19946:4;19943:1;19933:18;19927:4;19920:32;20041:4;20035;20025:21;20019:4;20012:35;20083:1;20077:4;20073:12;20067:4;20060:26;20112:1;20106:4;20099:15;20140:1;20134:4;20127:15;20203:4;20197;20191;20185;20182:1;20175:5;20164:44;20624:5;20605:16;20599:23;20596:34;20586:159;;20663:10;20657:4;20650:24;20726:4;20720;20713:18;20586:159;20830:18;20812:37;;-1:-1:-1;;;21025:43:4;;21019:4;21012:57;21105:4;21099;21089:21;21082:36;;;21060:7;21225:5;-1:-1:-1;;;;;;;;;;;;21185:4:4;21178:12;;21173:67;21260:4;21253:15;-1:-1:-1;;21330:1:4;21324:4;21317:15;-1:-1:-1;;;;;;;17661:3716:4:o;24901:1969:36:-;25155:8;25142:11;25139:25;25136:142;;;25196:10;25190:4;25183:24;25259:4;25253;25246:18;25136:142;25298:13;25314;25321:5;25314:6;:13::i;:::-;25298:29;;25337:23;25363:18;:16;:18::i;:::-;25337:44;;25392:14;25592:4;25586:11;25693:25;25690:1;25683:36;25753:5;25746:4;25743:1;25739:12;25732:27;25829:9;25822:4;25819:1;25815:12;25808:31;25909:5;25902:4;25899:1;25895:12;25888:27;25949:8;25942:4;25939:1;25935:12;25928:30;26002:4;25999:1;25989:18;25971:36;;-1:-1:-1;;;26077:4:36;26070:32;26149:15;26143:4;26136:29;26222:10;26216:4;26209:24;;26298:4;26292;26282:21;26272:31;;26407:1;26401:4;26394:15;26429:14;26446:30;26460:6;26468:1;26471;26474;26446:13;:30::i;:::-;26429:47;;26500:5;-1:-1:-1;;;;;26490:15:36;:6;-1:-1:-1;;;;;26490:15:36;;26486:56;;26507:35;-1:-1:-1;;;26507:33:36;:35::i;:::-;26692:17;26686:4;26679:31;26736:5;26730:4;26723:19;26796:1;26789:5;26785:13;26778:4;26772;26762:21;26755:44;26818:45;26840:5;26847:9;26858:4;26818:21;:45::i;:::-;25030:1840;;;;24901:1969;;;;;;:::o;41722:143::-;41779:7;41803:12;:10;:12::i;:::-;41798:27;;-1:-1:-1;41824:1:36;;41722:143;-1:-1:-1;41722:143:36:o;41798:27::-;41842:16;41852:5;41842:9;:16::i;7549:495:4:-;7661:14;-1:-1:-1;;;;;;;7746:19:4;;;7742:49;;-1:-1:-1;;;7767:24:4;;7742:49;-1:-1:-1;7884:4:4;7877:21;7924:20;7918:4;7911:34;;;7965:4;7958:19;;;;8022:4;8006:21;;8000:28;;7549:495::o;43664:536:36:-;43803:14;43819:28;5596:35:31;5613:17;:15;:17::i;5596:35::-;43872:12:36::1;::::0;;-1:-1:-1;;;;;;43894:16:36;::::1;::::0;;;-1:-1:-1;;;;;43872:12:36::1;::::0;-1:-1:-1;43931:99:36::1;43969:16:::0;;44000:11;43872:12;43931:18:::1;:99::i;:::-;43921:109;;44040:68;44077:8;44088:11;44101:6;44040:28;:68::i;:::-;44164:11;-1:-1:-1::0;;;;;44124:69:36::1;44152:10;-1:-1:-1::0;;;;;44124:69:36::1;;44177:6;44185:7;44124:69;;;;;;;:::i;:::-;;;;;;;;43664:536:::0;;;;;;:::o;13953:127::-;14020:7;14046:27;14052:6;14060:8;14046:27;;;;;;;;;;;;:5;:27::i;39152:309::-;39231:14;2182:9:17;2157:22;2151:29;2148:44;2145:158;;2224:10;2218:4;2211:24;2284:4;2278;2271:18;2145:158;39269:185:36::1;::::0;;;;::::1;::::0;;;39298:10:::1;39269:185:::0;-1:-1:-1;;;;;39269:185:36;;::::1;::::0;;-1:-1:-1;;;39269:185:36;;::::1;;;::::0;::::1;::::0;-1:-1:-1;39332:9:36;;39269:185:::1;::::0;;39332:44:::1;::::0;:16:::1;::::0;:9;;::::1;-1:-1:-1::0;;;;;39332:9:36::1;:14;:16::i;:44::-;-1:-1:-1::0;;;;;39322:66:36::1;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39423:21;::::0;-1:-1:-1;;;39423:21:36;;39404:5;;-1:-1:-1;;;;;39423:4:36::1;:14;::::0;::::1;::::0;:21:::1;::::0;39404:5;;39423:21:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39269:15;:185::i;5771:228:31:-:0;-1:-1:-1;;;;;5855:21:31;;;5877:10;5897:4;5911:13;5922:1;5911:8;;;:13;:::i;:::-;5904:21;;;:::i;:::-;5855:71;;;;;;-1:-1:-1;;;;;;5855:71:31;;;;;-1:-1:-1;;;;;16825:15:53;;;5855:71:31;;;16807:34:53;16877:15;;;;16857:18;;;16850:43;16929:33;16909:18;;;16902:61;16742:18;;5855:71:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5850:143;;5949:33;;-1:-1:-1;;;5949:33:31;;;;;;;;;;;5850:143;5771:228;:::o;45429:1491:36:-;45565:28;45609:29;45649:19;45671:70;3713:1:26;45671:30:36;45691:9;;;;;;;;;-1:-1:-1;;;;;45691:9:36;45671:19;:30::i;:::-;:43;;:70::i;:::-;45649:92;-1:-1:-1;;;;;;45755:25:36;;;45751:86;;45810:11;-1:-1:-1;;;;;45797:38:36;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45797:40:36;;;;;;;;;;;;:::i;:::-;45782:55;;45751:86;45860:19;;45917:27;45921:16;45860:19;45917:27;:::i;:::-;-1:-1:-1;;;;;45899:46:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;45899:46:36;;;;;;;;;;;;;;;;45889:56;;45997:9;45992:922;46013:7;:14;46008:1;:19;45992:922;;46072:13;46092:1;46088;:5;:170;;46235:16;;46256:1;46252;:5;46235:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;46088:170;;;3296:4:6;3307:1;3303:9;;;3285:28;;;3279:35;46116:58:36;-1:-1:-1;;;;;46306:22:36;;46276:27;46306:22;;;:15;:22;;;;;46347:10;;46072:186;;-1:-1:-1;46306:22:36;46072:186;;46347:7;;46355:1;;46347:10;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;46347:24:36;;;;;46389:277;;;;46446:20;;;;46426:10;;-1:-1:-1;;;;;46446:20:36;;;;46426:7;;46434:1;;46426:10;;;;;;:::i;:::-;;;;;;;;;;;;:17;:40;46488:20;;;:24;;-1:-1:-1;;;;;;46488:24:36;;;46389:277;;;46579:6;:21;;;;;;;;;;-1:-1:-1;;;;;46579:21:36;-1:-1:-1;;;;;46559:41:36;:7;46567:1;46559:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;:41;46622:21;;;:25;;-1:-1:-1;;;;;46622:25:36;;;46389:277;46800:67;46829:5;46836:11;46849:7;46857:1;46849:10;;;;;;;;:::i;:::-;;;;;;;:17;;;46800:28;:67::i;:::-;-1:-1:-1;;46886:3:36;;45992:922;;;;45599:1321;;;45429:1491;;;;;;:::o;13399:887:20:-;13562:2;13556:4;13549:16;13619:6;13613:4;13606:20;-1:-1:-1;;;13678:4:20;13671:48;13880:4;13874;13868;13862;13859:1;13852:5;13845;13840:45;13932:7;13928:1;13921:4;13915:11;13912:18;13908:32;13898:275;;14023:7;14004:16;13995:5;13983:18;13976:26;13973:48;13970:61;13960:199;;14068:10;14062:4;14055:24;14136:4;14130;14123:18;13960:199;13898:275;14199:1;14193:4;14186:15;13399:887;;;:::o;5086:137:13:-;5147:13;5186:29;5212:1;5186:12;:29::i;49657:104:36:-;49745:8;219:15:47;:25;;;48223:113:36:o;220:404:49:-;274:18;488:17;508:21;521:7;508:12;:21::i;:::-;577:4;567:15;;220:404;-1:-1:-1;;;220:404:49:o;1138:194::-;1309:4;1300:14;;;1282:33;;;;;1276:40;;1138:194::o;33402:695:36:-;33534:17;33601:11;;33534:17;;;;33601:11;;;;;:86;;33654:33;:7;636:2:44;612:26;;510:136;33654:33:36;33601:86;;;33615:36;:7;922:2:44;898:26;;793:139;33615:36:36;33580:107;;;;33698:22;33723:34;33736:8;33746:10;33723:12;:34::i;:::-;33698:59;;33768:21;33792:51;33802:6;33810:32;:7;777:2:44;753:26;;652:135;33810:32:36;33792:51;;:9;:51::i;:::-;33768:75;-1:-1:-1;33964:80:36;33996:22;33768:75;33996:6;:22;:::i;:::-;34020:17;;-1:-1:-1;;;;;33964:80:36;34039:4;33964:31;:80::i;:::-;33952:92;-1:-1:-1;34060:30:36;34077:13;34060:14;:30;:::i;:::-;34054:36;;33570:527;;;33402:695;;;;;;:::o;10654:336:52:-;10757:7;10831:152;10870:7;10879:47;10906:9;10917:8;10879:26;:47::i;:::-;10928:45;10953:9;10964:8;10928:24;:45::i;:::-;30348:9:9;;30359:17;;30344:33;;;;30337:41;;30167:227;10831:152:52;10824:159;10654:336;-1:-1:-1;;;;10654:336:52:o;30066:91:4:-;;;;:::o;10273:326:52:-;10372:7;10446:146;10485:7;10494:44;10521:6;10529:8;10494:26;:44::i;:::-;10540:42;10565:6;10573:8;10540:24;:42::i;49179:104:36:-;49266:10;;49179:104::o;16501:118:4:-;5177:66;;16501:118::o;2710:117:1:-;1721:16;:14;:16::i;:::-;2778:5:::1;2768:15:::0;;-1:-1:-1;;2768:15:1::1;::::0;;2798:22:::1;735:10:0::0;2807:12:1::1;2798:22;;;;;;:::i;:::-;;;;;;;;2710:117::o:0;27159:250:36:-;1372:4:45;1365:21;;;1412:22;1406:4;1399:36;;;1455:4;1448:17;;;1501:4;1485:21;;1478:39;;;27311:91:36;27351:5;27369:9;27390:10;27311:31;:91::i;34103:615::-;34236:14;34300:11;;34236:14;;;;34300:11;;;;;:86;;34353:33;:7;636:2:44;612:26;;510:136;34353:33:36;34300:86;;;34314:36;:7;922:2:44;898:26;;793:139;34314:36:36;34279:107;;;;34397:22;34422:34;34435:8;34445:10;34422:12;:34::i;:::-;34397:59;;34476:69;34509:9;34520:8;:17;;;-1:-1:-1;;;;;34476:69:36;34539:5;34476:32;:69::i;:::-;34467:78;;34555:21;34579:53;34591:6;34599:32;:7;777:2:44;753:26;;652:135;34599:32:36;34579:53;;:11;:53::i;:::-;34555:77;-1:-1:-1;34642:23:36;34555:77;34642:23;;:::i;2002:128:1:-;1897:4;1920:7;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:1;;;;;;;;;;;746:163:43;856:8;853:1;846:19;888:4;885:1;878:15;30906:557:36;31036:17;31055:11;31082:22;31107:57;31120:8;31130:33;:7;636:2:44;612:26;;510:136;31130:33:36;31107:57;;:12;:57::i;:::-;31082:82;;31238:19;31260:51;31272:6;31280:30;:7;494:2:44;470:26;;371:133;31260:51:36;31238:73;-1:-1:-1;31333:79:36;31365:20;31238:73;31365:6;:20;:::i;:::-;31387:17;;-1:-1:-1;;;;;31333:79:36;31387:17;31333:31;:79::i;:::-;31321:91;-1:-1:-1;31428:28:36;31445:11;31428:14;:28;:::i;:::-;31422:34;;31072:391;;30906:557;;;;;;:::o;36658:526::-;36772:23;36813:53;36841:1;3779::26;36813:27:36;:53::i;:::-;36772:95;-1:-1:-1;;;;;;36881:31:36;;36877:44;;36914:7;;;36877:44;36959:65;;-1:-1:-1;;;36959:65:36;;36931:25;36975:7;;-1:-1:-1;;;;;;36975:7:36;36959:65;;;18892:52:53;36984:10:36;18998:18:53;;;18991:43;19050:18;;;19043:34;;;19093:18;;;19086:34;;;-1:-1:-1;;;;;19157:15:53;;;19136:19;;;19129:44;36931:25:36;;36959:15;;;;;;18864:19:53;;36959:65:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36931:93;-1:-1:-1;37048:26:36;37038:6;:36;;;;;;;;:::i;:::-;;37034:144;;37090:77;37159:6;37151:15;;;;;;;;:::i;:::-;-1:-1:-1;;;37090:49:36;:60;:77::i;:::-;36762:422;;36658:526;;;;;:::o;27500:424::-;27596:18;94:6:22;27618:30:36;;;;:3;:30;:::i;:::-;27617:47;;;;:::i;:::-;27718:21;;;;;;-1:-1:-1;;;;;27718:21:36;;;-1:-1:-1;;;27718:21:36;;;;;;;;:10;:21;27765:12;;27596:68;;-1:-1:-1;27764:39:36;;27765:25;;27596:68;;27765:12;:25;:::i;:::-;27764:37;:39::i;:::-;27749:12;:54;;-1:-1:-1;;;;;;27749:54:36;-1:-1:-1;;;;;27749:54:36;;;;;;;;27829:46;;27852:10;;27830:19;;27846:3;;-1:-1:-1;;;27830:13:36;;;:19;:::i;:::-;:32;;;;:::i;27829:46::-;27813:13;:62;;-1:-1:-1;;;;;27813:62:36;;;-1:-1:-1;;;27813:62:36;;;;;;;;;27886:31;27913:3;27886:26;:31::i;28017:285::-;28117:15;28135:81;28164:12;28178:8;:20;;;28200:4;28206:9;28135:28;:81::i;:::-;28117:99;;28226:69;28250:4;28256:7;28265:29;:8;:20;;;-1:-1:-1;;;;;28265:27:36;5509:6:13;5282:249;28265:29:36;-1:-1:-1;;;;;28226:69:36;:23;:69::i;35933:719::-;36005:28;36045:19;36067:57;36095:1;3713::26;36067:27:36;:57::i;:::-;36045:79;-1:-1:-1;;;;;;36138:25:36;;36134:45;;36165:14;35933:719;;;:::o;36134:45::-;36190:21;36214:59;36248:8;36267:4;36214:25;:59::i;:::-;36190:83;;36294:53;36335:11;36294:40;:53::i;:::-;36284:63;;36533:13;36470:59;36504:8;36523:4;36470:25;:59::i;:::-;:76;36466:180;;36562:73;-1:-1:-1;;;36562:71:36;:73::i;:::-;36035:617;;35933:719;;;:::o;28593:1658::-;28807:16;28826:4;-1:-1:-1;;;;;28826:16:36;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28854:12;28869:11;;28807:37;;-1:-1:-1;28869:11:36;;;;;;;28891:1354;28912:7;:14;28907:1;:19;28891:1354;;28943:27;28973:15;:33;28989:7;28997:1;28989:10;;;;;;;;:::i;:::-;;;;;;;:16;;;-1:-1:-1;;;;;28973:33:36;-1:-1:-1;;;;;28973:33:36;;;;;;;;;;;;28943:63;;29054:7;29050:735;;;29081:14;29098:36;:7;922:2:44;898:26;;793:139;29098:36:36;29081:53;;;;29153:14;29170:7;29178:1;29170:10;;;;;;;;:::i;:::-;;;;;;;:17;;;29153:34;;29205:11;29219:56;29246:6;29254;94::22;29219:26:36;:56::i;:::-;29205:70;-1:-1:-1;29293:18:36;94:6:22;29321:7:36;29315:30;;;;:3;:30;:::i;:::-;29314:47;;;;:::i;:::-;29431:20;;;;29293:68;;-1:-1:-1;;;;;;29431:20:36;;;;-1:-1:-1;;;29453:21:36;;;29588:12;29597:3;29588:6;:12;:::i;:::-;29568:7;29576:1;29568:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;:32;29641:40;29642:26;29658:10;29642:13;:26;:::i;29641:40::-;29618:20;;;:63;;-1:-1:-1;;;;;;29618:63:36;-1:-1:-1;;;;;29618:63:36;;;;;;;;;;29723:47;29747:10;29724:20;29741:3;29724:14;:20;:::i;29723:47::-;29699:21;;;:71;;-1:-1:-1;;;;;29699:71:36;;;-1:-1:-1;;;29699:71:36;;;;;;;;;-1:-1:-1;;;;;;29050:735:36;29800:20;29825:74;29851:6;:18;;;;;;;;;;-1:-1:-1;;;;;29851:18:36;29871:8;29881:7;29889:1;29881:10;;;;;;;;:::i;:::-;;;;;;;:17;;;29825:25;:74::i;:::-;-1:-1:-1;29913:18:36;;;:29;;-1:-1:-1;;;;;;29913:29:36;-1:-1:-1;;;;;29913:29:36;;;;;;-1:-1:-1;;;;;;29960:17:36;;;29956:102;;29979:79;30010:6;30030:8;30040:3;30045:12;29979:30;:79::i;:::-;-1:-1:-1;;;;;30076:17:36;;;30072:102;;30095:79;30126:6;30146:8;30156:3;30161:12;30095:30;:79::i;:::-;-1:-1:-1;;30217:3:36;;28891:1354;;;;28797:1454;;28593:1658;;;;;;:::o;13082:865::-;13222:16;13303:6;13241:59;13275:8;13294:4;13241:25;:59::i;:::-;:68;;;;:::i;:::-;13222:87;;13320:85;13343:2;13357:8;13375:6;13394:9;13320:17;:85::i;:::-;13446:11;;:15;13442:319;;13518:26;13524:8;13534:9;13518:5;:26::i;:::-;13558:43;;-1:-1:-1;;;13558:43:36;;-1:-1:-1;;;;;13558:18:36;;;;;:43;;13577:6;;13585:9;;13596:4;;13558:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13442:319;;;13632:78;13673:8;13684:2;13696:4;13703:6;13632:32;:78::i;:::-;13724:26;13730:8;13740:9;13724:5;:26::i;:::-;13836:8;13774:59;13808:8;13827:4;13774:25;:59::i;:::-;:70;13770:171;;;13860:70;-1:-1:-1;;;13860:68:36;:70::i;31469:508::-;31601:14;31617:11;31644:22;31669:57;31682:8;31692:33;:7;636:2:44;612:26;;510:136;31669:57:36;31644:82;;31746:68;31779:9;31790:8;:17;;;-1:-1:-1;;;;;31746:68:36;31809:4;31746:32;:68::i;:::-;31737:77;;31824:19;31846:49;31856:6;31864:30;:7;494:2:44;470:26;;371:133;31846:49:36;31824:71;-1:-1:-1;31905:21:36;31824:71;31905:21;;:::i;49849:108::-;49903:4;49926:12;:10;:12::i;:::-;:24;;;-1:-1:-1;;1897:4:1;1920:7;;;;48223:113:36:o;16670:467::-;16809:84;16831:2;16845:8;16863:6;16882:9;16809:16;:84::i;:::-;16904:65;16941:8;16952;16962:6;16904:28;:65::i;:::-;16983:11;;:15;16979:88;;17014:42;;-1:-1:-1;;;17014:42:36;;-1:-1:-1;;;;;17014:17:36;;;;;:42;;17032:6;;17040:9;;17051:4;;17014:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:88;17076:20;17082:2;17086:9;17076:5;:20::i;:::-;17106:24;;-1:-1:-1;;;17106:24:36;;-1:-1:-1;;;;;17106:4:36;:9;;;;:24;;17116:2;;17120:9;;17106:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:115:1;1474:19;:17;:19::i;:::-;2522:7:::1;:14:::0;;-1:-1:-1;;2522:14:1::1;2532:4;2522:14;::::0;;2551:20:::1;2558:12;735:10:0::0;;656:96;1338:222:49;1420:14;1486:1;1480:8;1475:3;1472:17;1469:75;;;-1:-1:-1;1535:4:49;1526:14;;;1508:33;;;;;1502:40;;1338:222::o;49409:242:36:-;49492:10;-1:-1:-1;;;;;49492:19:36;;;;;;:62;;;49516:38;49536:5;49543:10;49516:19;:38::i;:::-;49515:39;49492:62;49488:157;;;49570:64;-1:-1:-1;;;49570:62:36;:64::i;34724:517::-;34878:14;34942:11;;34878:14;;;;34942:11;;;;;:86;;34995:33;:7;636:2:44;612:26;;510:136;34995:33:36;34942:86;;;34956:36;:7;922:2:44;898:26;;793:139;34956:36:36;34921:107;;;;35045:34;35058:8;35068:10;35045:12;:34::i;:::-;35039:40;;35140:94;35176:12;35190:8;:20;;;35212:5;35219:14;35140:35;:94::i;:::-;-1:-1:-1;;;;;35098:19:36;;;;;;:12;:19;;;;;:27;:136;;;-1:-1:-1;;;35098:27:36;;-1:-1:-1;;;;;35098:27:36;:136;:::i;:::-;35089:145;;34911:330;34724:517;;;;;;;:::o;5724:318:24:-;5871:6;5865:4;5858:20;5912:1;5908:6;5904:2;5900:15;6019:5;6016:1;6012:13;6001:8;5998:1;5994:16;5989:2;5986:1;5982:10;5945:35;5939:4;5933;5928:98;;5724:318;;;;:::o;19654:674:36:-;19745:15;19793:8;-1:-1:-1;;;;;19776:26:36;:5;-1:-1:-1;;;;;19776:26:36;;19772:90;;19804:58;-1:-1:-1;;;19804:56:36;:58::i;:::-;-1:-1:-1;;;;;;19944:22:36;;;19916:25;19944:22;;;:15;:22;;;;;;;;:41;;;;;;;;;20005:18;;-1:-1:-1;;;;;20033:25:36;;;;;-1:-1:-1;;;20005:18:36;;;;;20069:187;20115:10;20175:8;19979:5;19960;20005:18;20069:27;:187::i;:::-;20267:54;20296:5;20303:8;20313:7;20267:28;:54::i;:::-;19762:566;19654:674;;;;;:::o;30538:362::-;30636:11;30669:224;30714:8;30745:10;-1:-1:-1;;;;;30745:16:36;;30785:13;7067:18:4;7061:25;;6907:195;30785:13:36;30822:4;-1:-1:-1;;;;;30822:16:36;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30865:17;30669:24;:224::i;23748:531::-;23864:99;23887:2;23915:8;23898:5;23933:6;23952:9;23864:17;:99::i;:::-;24050:10;-1:-1:-1;;;;;24050:19:36;;;24046:70;;24071:45;24087:5;24094:10;24106:9;24071:15;:45::i;:::-;24126:23;24132:5;24139:9;24126:5;:23::i;:::-;24207:65;24244:8;24255;24265:6;24207:28;:65::i;:::-;23748:531;;;;;:::o;6831:835:7:-;6940:14;7051:4;7045:11;7116:4;7110;7103:18;7154:4;7151:1;7147:12;7141:4;7134:26;7186:1;7180:4;7173:15;7214:1;7208:4;7201:15;7284:4;7278;7272;7266;7263:1;7256:5;7245:44;7239:51;7229:61;;7398:16;7388:144;;7447:10;7441:4;7434:24;7513:4;7507;7500:18;7388:144;7558:1;7552:4;7545:15;7606:4;7599:15;6831:835;;-1:-1:-1;;;;6831:835:7:o;4125:1091:11:-;4298:4;4292:11;4369:13;;4337:4;4325:17;;;4408:1;4404:14;;;4446:1;4504:6;4497:4;4489:6;4486:16;4483:28;4473:220;;-1:-1:-1;;4535:17:11;;;4582:4;4578:17;;4621:4;4656:8;;;4646:29;4668:5;4646:29;;4723:6;4717:4;4710:20;4778:4;4772;4762:21;4747:215;4851:1;4848;4844:9;4841:1;4837:17;4831:24;4827:1;4824;4820:9;4813:43;4889:4;4886:1;4882:12;4877:17;;4931:1;4928;4925:8;4747:215;4915:29;4751:34;4431:567;-1:-1:-1;5011:17:11;;;5094:1;5083:9;;5076:20;;;-1:-1:-1;5174:4:11;5159:20;5153:4;5146:34;5018:6;4125:1091;-1:-1:-1;4125:1091:11:o;10291:445:18:-;10454:4;10448:11;10485:12;-1:-1:-1;;10503:20:18;;10499:31;10481:50;10595:4;10588:12;;10582:4;10575;10565:15;;10515:7;10544:57;10627:1;10621:4;10614:15;10693:4;10687;10683:15;10680:1;10676:23;10670:4;10663:37;;10291:445;;;:::o;35359:178:36:-;35440:7;35466:64;35493:6;35501:14;94:6:22;35466:26:36;:64::i;7005:488:9:-;7068:9;7258:24;7252:31;;7245:39;;7235:163;;7317:10;7311:4;7304:24;7379:4;7373;7366:18;7235:163;-1:-1:-1;7468:3:9;7461:11;;;;7434:19;;;7427:27;7420:35;7457:19;;;7416:61;;7005:488::o;5389:444::-;5450:9;5640:24;5634:31;;5627:39;;5617:163;;5699:10;5693:4;5686:24;5761:4;5755;5748:18;5617:163;-1:-1:-1;5809:3:9;5802:11;;;;5798:19;;5389:444::o;4478:523::-;4633:9;;;4746;;;4743:16;;4733:189;;4782:1;4779:129;;;4819:10;4813:4;4806:24;4885:4;4879;4872:18;4779:129;4980:3;4958:11;;;4951:19;4944:27;4973:11;;4940:45;;4478:523;-1:-1:-1;;4478:523:9:o;2809:465::-;2870:9;3056:1;3052;3048:6;3044:14;3041:1;3038:21;3035:186;;;3081:1;3078:129;;;3118:10;3112:4;3105:24;3184:4;3178;3171:18;3078:129;-1:-1:-1;3254:3:9;3243:9;;3239:19;;2809:465::o;2202:126:1:-;1897:4;1920:7;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:1;;;;;;;;;;;6451:341:24;6603:8;6596:16;6589:24;6583:4;6576:38;6669:1;6665:6;6661:2;6657:15;6765:9;6762:1;6758:17;6750:5;6747:1;6743:13;6702:39;6696:4;6690;6685:91;;6451:341;;;:::o;35630:197:36:-;35713:7;35739:81;35766:6;35774:14;35790:29;94:6:22;35774:14:36;35790:29;:::i;:::-;35739:26;:81::i;915:210:43:-;1040:8;1037:1;1030:19;1075:5;1069:4;1062:19;1104:4;1101:1;1094:15;4215:142:19;4268:7;-1:-1:-1;;;4291:1:19;:13;4287:36;;4306:17;:15;:17::i;:::-;-1:-1:-1;4348:1:19;4215:142::o;4209:182:24:-;4306:3;4300:4;4293:17;4340:34;4334:4;4328;4323:52;4209:182;:::o;8347:409:52:-;8561:15;8598:55;8621:4;8627:5;8634:7;8643:9;8598:22;:55::i;:::-;8588:65;;8689:19;:7;:17;:19::i;:::-;-1:-1:-1;;;;;8664:13:52;;;;;;;;;;;;;:44;;:21;;:44;;;;-1:-1:-1;;;8664:44:52;;-1:-1:-1;;;;;8664:44:52;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;8664:44:52;;;;;;;;;;;;;;;-1:-1:-1;;;;;8718:13:52;;;;-1:-1:-1;8718:13:52;;;;;;;;-1:-1:-1;8718:13:52;;;;:31;;-1:-1:-1;;;;;;8718:31:52;;;;;;;;;;;-1:-1:-1;8718:13:52;8347:409::o;4397:315:24:-;4534:8;4528:4;4521:22;4569:11;4563:4;4556:25;4615:1;4611:6;4607:2;4603:15;4687:7;4684:1;4680:15;4648:30;4642:4;4636;4631:65;;4397:315;;;:::o;19059:739:20:-;19133:14;19238:7;19232:4;19225:21;-1:-1:-1;;;19299:4:20;19292:48;19737:4;19731;19725;19719;19712:5;19705;19694:48;19632:4;19614:16;19611:26;19522:242;19495:4;19489:11;19404:378;19378:404;;19059:739;;;;:::o;206:1824:48:-;280:28;356:11;350:4;343:25;-1:-1:-1;;;411:4:48;404:48;561:4;549:10;543:4;537;524:11;517:5;504:62;494:207;;599:10;593:4;586:24;682:4;676;669:18;494:207;730:4;724:11;805:16;799:4;796:1;781:41;895:1;889:8;886:1;882:16;969:1;963:8;1021:4;1018:1;1014:12;1005:21;;1227:16;1224:1;1220:24;1335:1;1330;1327;1323:9;1320:1;1316:17;1313:24;1306:4;1288:16;1285:26;1282:56;1277:1;1271:8;1267:2;1263:17;1260:79;1257:139;;;1377:4;1365:10;1358:24;1257:139;1413:1;1410:604;;;1443:1;1440;1433:12;1512:4;1509:1;1505:12;1496:21;;1561:1;1558;1554:9;1551:1;1547:17;1541:4;1534:31;1617:1;1606:12;;1650:1;1635:365;1704:1;1701;1697:9;1694:1;1690:17;1824:1;1818:8;1813:3;1809:18;1806:50;;;1849:4;1837:10;1830:24;1806:50;1903:1;1898;1895;1891:9;1888:1;1884:17;1877:28;;1938:1;1935;1931:9;1926:14;;1970:1;1967;1964:8;1635:365;1961:21;1639:14;1410:604;;;;;206:1824;;;:::o;28251:516:9:-;28417:9;;;28546;;28560;;;28557:16;;28543:31;28539:39;;28529:163;;28611:10;28605:4;28598:24;28673:4;28667;28660:18;28529:163;28728:9;;;28721:17;28714:25;28741:9;;;28710:41;;28251:516;-1:-1:-1;;28251:516:9:o;2838:1584:50:-;2965:20;2987:18;3110:8;3122:1;3110:13;3106:47;;-1:-1:-1;3133:5:50;;-1:-1:-1;3140:12:50;3125:28;;3106:47;4209:86;:5;4234:60;:48;4259:12;4273:8;4234:24;:48::i;:60::-;4209:86;:::i;:::-;4198:97;;4333:63;4358:8;4368:27;4369:16;:8;4380:5;4369:16;:::i;:::-;-1:-1:-1;;;;;4368:25:50;5509:6:13;5282:249;4368:27:50;-1:-1:-1;;;;;4333:63:50;:24;:63::i;:::-;4318:78;;:12;:78;:::i;:::-;4305:91;;2838:1584;;;;;;;:::o;4834:756::-;-1:-1:-1;;;;;5093:13:50;;5069:21;5093:13;;;;;;;;;;:23;-1:-1:-1;;;;;5093:23:50;;5368:74;5393:9;5423:17;:5;5093:23;5423:17;:::i;5368:74::-;5350:92;;5489:19;:7;:17;:19::i;:::-;-1:-1:-1;;;;;5464:13:50;;;;;;;;;;;;;:44;;:21;;:44;;;;-1:-1:-1;;;5464:44:50;;-1:-1:-1;;;;;5464:44:50;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5464:44:50;;;;;;;;;;;;;;;-1:-1:-1;;;;;5552:13:50;;;;-1:-1:-1;5552:13:50;;;;;;;;-1:-1:-1;;5552:13:50;;;;:31;;-1:-1:-1;;;;;;5552:31:50;;;;;;;;;;;-1:-1:-1;;4834:756:50:o;4718:320:24:-;4858:6;4852:4;4845:20;4891:9;4885:4;4878:23;4935:1;4931:6;4927:2;4923:15;5012:8;5009:1;5005:16;5000:2;4997:1;4993:10;4968:23;4962:4;4956;4951:71;;4718:320;;;;:::o;30294:132:36:-;30365:23;30377:2;30381:6;30365:11;:23::i;:::-;30398:21;;-1:-1:-1;;;30398:21:36;;-1:-1:-1;;;;;30398:4:36;:9;;;;:21;;30408:2;;30412:6;;30398:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9261:1026:20;9444:4;9438:11;9509:6;9503:4;9496:20;9574:2;9568:4;9561:16;9639:4;9635:2;9631:13;9625:4;9618:27;-1:-1:-1;;;9695:4:20;9688:48;9848:4;9842;9836;9830;9827:1;9820:5;9813;9808:45;9900:7;9896:1;9889:4;9883:11;9880:18;9876:32;9866:279;;9991:7;9972:16;9963:5;9951:18;9944:26;9941:48;9938:61;9928:203;;10036:10;10030:4;10023:24;10108:4;10102;10095:18;9928:203;-1:-1:-1;10171:1:20;10165:4;10158:15;10227:4;10220:15;-1:-1:-1;;;;9261:1026:20:o;5044:318:24:-;5183:6;5177:4;5170:20;5216:9;5210:4;5203:23;5260:1;5256:6;5252:2;5248:15;5336:8;5333:1;5329:16;5324:2;5321:1;5317:10;5293:22;5287:4;5281;5276:70;;5044:318;;;;:::o;24177:1119:4:-;24444:18;24438:4;24431:32;24489:4;24483;24476:18;24546:4;24540;24530:21;24589:15;24583:22;24679:11;24671:6;24668:23;24665:146;;;24723:10;24717:4;24710:24;24792:4;24786;24779:18;24665:146;24903:24;;;24879:49;;25038:18;25032:25;;25028:38;;;25001:66;;-1:-1:-1;25122:20:4;;;-1:-1:-1;;;;;25199:22:4;;-1:-1:-1;;;;;;;;;;;25166:4:4;-1:-1:-1;25155:70:4;24405:148:36;;:::o;8923:604:52:-;-1:-1:-1;;;;;9404:13:52;;9110:15;9404:13;;;;;;;;;;:23;-1:-1:-1;;;;;9404:23:52;9447:73;9472:9;9501:17;:5;9404:23;9501:17;:::i;9447:73::-;9437:83;8923:604;-1:-1:-1;;;;;;8923:604:52:o;6048:397:24:-;6236:1;6232:6;6228:2;6224:15;6272:11;6269:1;6265:19;6259:4;6252:33;6311:7;6305:4;6298:21;6422:5;6419:1;6415:13;6404:8;6401:1;6397:16;6392:2;6389:1;6385:10;6349:34;6343:4;6337;6332:97;;6048:397;;;;;:::o;6557:1373:52:-;6776:20;6798:11;6881:20;6904:4;:13;;;-1:-1:-1;;;;;6881:36:52;;;6927:19;6949:46;6971:7;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;47492:9:9;;;47488:24;47481:32;;47331:198;6949:46:52;6927:68;;7028:65;7046:12;7060:11;7073:8;7083:9;7028:17;:65::i;:::-;7006:87;;-1:-1:-1;7006:87:52;-1:-1:-1;7145:23:52;:11;:21;:23::i;:::-;-1:-1:-1;;;;;7129:39:52;;;:13;7745;;;7741:45;;7760:26;;;;7741:45;7827:96;:4;:16;;;7862:60;:48;7887:12;7901:8;7862:24;:48::i;7827:96::-;-1:-1:-1;;;;;7796:127:52;:16;;;:127;-1:-1:-1;;6557:1373:52;;;;;;;;;;:::o;5368:350:24:-;5523:6;5517:4;5510:20;5556:9;5550:4;5543:23;5600:1;5596:6;5592:2;5588:15;5695:5;5692:1;5688:13;5677:8;5674:1;5670:16;5665:2;5662:1;5658:10;5633:23;5627:4;5621;5616:86;;5368:350;;;;;:::o;27414:1087:4:-;-1:-1:-1;;;;;;;27569:19:4;;;27565:32;;27414:1087;;;:::o;27565:32::-;27798:7;27792:4;27785:21;27832:20;27826:4;27819:34;27879:5;27873:4;27866:19;27935:4;27929;27919:21;27977:13;27971:20;28077:10;28073:15;28070:415;;;28202:10;28194:6;28191:22;28188:159;;;28249:10;28243:4;28236:24;28324:4;28318;28311:18;28188:159;28447:23;;;;28425:46;;-1:-1:-1;;27414:1087:4:o;23502:290:19:-;23691:10;23685:4;23678:24;23771:4;23765;23758:18;1148:132:50;1209:18;1244:33;1249:27;-1:-1:-1;;;;;1264:10:50;;;;1249;;:27;:::i;:::-;5509:6:13;5282:249;1282:132:50;1343:18;1378:33;1383:27;-1:-1:-1;;;;;1398:10:50;;;;1383;;:27;:::i;22599:1172:4:-;22820:18;22814:25;22899:6;22880:17;22876:30;22996:17;22978:16;22975:39;22972:162;;;23046:10;23040:4;23033:24;23115:4;23109;23102:18;22972:162;23221:16;23201:18;23194:44;;;23324:18;23318:4;23311:32;23369:2;23363:4;23356:16;23422:4;23416;23406:21;23538:6;23522:13;23516:20;23512:33;23497:13;23490:56;;23614:6;23608:4;23601:20;23695:4;23689:11;23685:2;23681:20;23678:1;-1:-1:-1;;;;;;;;;;;23645:4:4;23639;23634:68;24405:148:36;;:::o;2422:616:52:-;2574:15;2591:11;2622:12;2638:1;2622:17;2618:36;;-1:-1:-1;2649:1:52;;-1:-1:-1;2649:1:52;2641:13;;2618:36;2757:20;2780:44;2790:12;2804:11;2817:6;2780:9;:44::i;:::-;2757:67;;2901:65;2928:12;2942:9;2035:6;2901:26;:65::i;:::-;2895:71;-1:-1:-1;3013:18:52;2895:71;3013:12;:18;:::i;2422:616::-;;;;;;;;:::o;9633:585::-;9732:7;9771:8;9755:12;:24;9751:38;;-1:-1:-1;9788:1:52;9781:8;;9751:38;9803:12;9819:1;9803:17;9799:31;;-1:-1:-1;9829:1:52;9822:8;;9799:31;10187:23;10202:8;10187:12;:23;:::i;:::-;10150;10161:12;10150:8;:23;:::i;:::-;10139:35;;:7;:35;:::i;:::-;10138:44;;10178:4;10138:44;:::i;:::-;10137:74;;;;:::i;14:367:53:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:53;;-1:-1:-1;;;;;214:30:53;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:437::-;472:6;480;533:2;521:9;512:7;508:23;504:32;501:52;;;549:1;546;539:12;501:52;576:23;;-1:-1:-1;;;;;611:30:53;;608:50;;;654:1;651;644:12;608:50;693:70;755:7;746:6;735:9;731:22;693:70;:::i;:::-;782:8;;667:96;;-1:-1:-1;386:437:53;-1:-1:-1;;;;386:437:53:o;828:895::-;1058:4;1087:2;1127;1116:9;1112:18;1157:6;1146:9;1139:25;1183:2;1221;1216;1205:9;1201:18;1194:30;1244:6;1279;1273:13;1310:6;1302;1295:22;1348:2;1337:9;1333:18;1326:25;;1386:2;1378:6;1374:15;1360:29;;1407:1;1417:280;1431:6;1428:1;1425:13;1417:280;;;1490:13;;1532:9;;-1:-1:-1;;;;;1528:35:53;1516:48;;1604:11;;1598:18;1584:12;;;1577:40;1672:15;;;;1637:12;;;;1560:1;1446:9;1417:280;;;-1:-1:-1;1714:3:53;;828:895;-1:-1:-1;;;;;;;;828:895:53:o;1728:217::-;-1:-1:-1;;;;;1906:32:53;;;;1888:51;;1876:2;1861:18;;1728:217::o;1950:423::-;1992:3;2030:5;2024:12;2057:6;2052:3;2045:19;2082:1;2092:162;2106:6;2103:1;2100:13;2092:162;;;2168:4;2224:13;;;2220:22;;2214:29;2196:11;;;2192:20;;2185:59;2121:12;2092:162;;;2096:3;2299:1;2292:4;2283:6;2278:3;2274:16;2270:27;2263:38;2362:4;2355:2;2351:7;2346:2;2338:6;2334:15;2330:29;2325:3;2321:39;2317:50;2310:57;;;1950:423;;;;:::o;2378:220::-;2527:2;2516:9;2509:21;2490:4;2547:45;2588:2;2577:9;2573:18;2565:6;2547:45;:::i;2603:131::-;-1:-1:-1;;;;;2678:31:53;;2668:42;;2658:70;;2724:1;2721;2714:12;2739:315;2807:6;2815;2868:2;2856:9;2847:7;2843:23;2839:32;2836:52;;;2884:1;2881;2874:12;2836:52;2923:9;2910:23;2942:31;2967:5;2942:31;:::i;:::-;2992:5;3044:2;3029:18;;;;3016:32;;-1:-1:-1;;;2739:315:53:o;3251:180::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;-1:-1:-1;3402:23:53;;3251:180;-1:-1:-1;3251:180:53:o;3826:456::-;3903:6;3911;3919;3972:2;3960:9;3951:7;3947:23;3943:32;3940:52;;;3988:1;3985;3978:12;3940:52;4027:9;4014:23;4046:31;4071:5;4046:31;:::i;:::-;4096:5;-1:-1:-1;4153:2:53;4138:18;;4125:32;4166:33;4125:32;4166:33;:::i;:::-;3826:456;;4218:7;;-1:-1:-1;;;4272:2:53;4257:18;;;;4244:32;;3826:456::o;4658:247::-;4717:6;4770:2;4758:9;4749:7;4745:23;4741:32;4738:52;;;4786:1;4783;4776:12;4738:52;4825:9;4812:23;4844:31;4869:5;4844:31;:::i;5117:242::-;5299:2;5284:18;;5311:42;5288:9;5335:6;5023:12;;-1:-1:-1;;;;;5019:21:53;;;5007:34;;5094:4;5083:16;;;5077:23;5073:32;5057:14;;5050:56;4910:202;5364:118;5450:5;5443:13;5436:21;5429:5;5426:32;5416:60;;5472:1;5469;5462:12;5487:382;5552:6;5560;5613:2;5601:9;5592:7;5588:23;5584:32;5581:52;;;5629:1;5626;5619:12;5581:52;5668:9;5655:23;5687:31;5712:5;5687:31;:::i;:::-;5737:5;-1:-1:-1;5794:2:53;5779:18;;5766:32;5807:30;5766:32;5807:30;:::i;:::-;5856:7;5846:17;;;5487:382;;;;;:::o;5874:388::-;5942:6;5950;6003:2;5991:9;5982:7;5978:23;5974:32;5971:52;;;6019:1;6016;6009:12;5971:52;6058:9;6045:23;6077:31;6102:5;6077:31;:::i;:::-;6127:5;-1:-1:-1;6184:2:53;6169:18;;6156:32;6197:33;6156:32;6197:33;:::i;6744:127::-;6805:10;6800:3;6796:20;6793:1;6786:31;6836:4;6833:1;6826:15;6860:4;6857:1;6850:15;6876:275;6947:2;6941:9;7012:2;6993:13;;-1:-1:-1;;6989:27:53;6977:40;;-1:-1:-1;;;;;7032:34:53;;7068:22;;;7029:62;7026:88;;;7094:18;;:::i;:::-;7130:2;7123:22;6876:275;;-1:-1:-1;6876:275:53:o;7156:966::-;7242:6;7250;7258;7311:2;7299:9;7290:7;7286:23;7282:32;7279:52;;;7327:1;7324;7317:12;7279:52;7363:9;7350:23;7340:33;;7392:2;7444;7433:9;7429:18;7416:32;7457:31;7482:5;7457:31;:::i;:::-;7507:5;-1:-1:-1;7563:2:53;7548:18;;7535:32;-1:-1:-1;;;;;7616:14:53;;;7613:34;;;7643:1;7640;7633:12;7613:34;7681:6;7670:9;7666:22;7656:32;;7726:7;7719:4;7715:2;7711:13;7707:27;7697:55;;7748:1;7745;7738:12;7697:55;7784:2;7771:16;7806:2;7802;7799:10;7796:36;;;7812:18;;:::i;:::-;7854:53;7897:2;7878:13;;-1:-1:-1;;7874:27:53;7870:36;;7854:53;:::i;:::-;7841:66;;7930:2;7923:5;7916:17;7970:7;7965:2;7960;7956;7952:11;7948:20;7945:33;7942:53;;;7991:1;7988;7981:12;7942:53;8046:2;8041;8037;8033:11;8028:2;8021:5;8017:14;8004:45;8090:1;8085:2;8080;8073:5;8069:14;8065:23;8058:34;;8111:5;8101:15;;;;;7156:966;;;;;:::o;8127:315::-;8195:6;8203;8256:2;8244:9;8235:7;8231:23;8227:32;8224:52;;;8272:1;8269;8262:12;8224:52;8308:9;8295:23;8285:33;;8368:2;8357:9;8353:18;8340:32;8381:31;8406:5;8381:31;:::i;9281:713::-;9385:6;9393;9401;9409;9462:2;9450:9;9441:7;9437:23;9433:32;9430:52;;;9478:1;9475;9468:12;9430:52;9505:23;;-1:-1:-1;;;;;9540:30:53;;9537:50;;;9583:1;9580;9573:12;9537:50;9622:70;9684:7;9675:6;9664:9;9660:22;9622:70;:::i;:::-;9711:8;;-1:-1:-1;9596:96:53;-1:-1:-1;;9796:2:53;9781:18;;9768:32;9809:31;9768:32;9809:31;:::i;:::-;9859:5;-1:-1:-1;9916:2:53;9901:18;;9888:32;9929:33;9888:32;9929:33;:::i;:::-;9281:713;;;;-1:-1:-1;9281:713:53;;-1:-1:-1;;9281:713:53:o;9999:632::-;10170:2;10222:21;;;10292:13;;10195:18;;;10314:22;;;10141:4;;10170:2;10393:15;;;;10367:2;10352:18;;;10141:4;10436:169;10450:6;10447:1;10444:13;10436:169;;;10511:13;;10499:26;;10580:15;;;;10545:12;;;;10472:1;10465:9;10436:169;;;-1:-1:-1;10622:3:53;;9999:632;-1:-1:-1;;;;;;9999:632:53:o;10871:525::-;10957:6;10965;10973;10981;11034:3;11022:9;11013:7;11009:23;11005:33;11002:53;;;11051:1;11048;11041:12;11002:53;11090:9;11077:23;11109:31;11134:5;11109:31;:::i;:::-;11159:5;-1:-1:-1;11216:2:53;11201:18;;11188:32;11229:33;11188:32;11229:33;:::i;:::-;10871:525;;11281:7;;-1:-1:-1;;;;11335:2:53;11320:18;;11307:32;;11386:2;11371:18;11358:32;;10871:525::o;11401:456::-;11478:6;11486;11494;11547:2;11535:9;11526:7;11522:23;11518:32;11515:52;;;11563:1;11560;11553:12;11515:52;11599:9;11586:23;11576:33;;11659:2;11648:9;11644:18;11631:32;11672:31;11697:5;11672:31;:::i;:::-;11722:5;-1:-1:-1;11779:2:53;11764:18;;11751:32;11792:33;11751:32;11792:33;:::i;:::-;11844:7;11834:17;;;11401:456;;;;;:::o;12340:114::-;12424:4;12417:5;12413:16;12406:5;12403:27;12393:55;;12444:1;12441;12434:12;12459:801;12570:6;12578;12586;12594;12602;12610;12618;12671:3;12659:9;12650:7;12646:23;12642:33;12639:53;;;12688:1;12685;12678:12;12639:53;12727:9;12714:23;12746:31;12771:5;12746:31;:::i;:::-;12796:5;-1:-1:-1;12853:2:53;12838:18;;12825:32;12866:33;12825:32;12866:33;:::i;:::-;12918:7;-1:-1:-1;12972:2:53;12957:18;;12944:32;;-1:-1:-1;13023:2:53;13008:18;;12995:32;;-1:-1:-1;13079:3:53;13064:19;;13051:33;13093:31;13051:33;13093:31;:::i;:::-;12459:801;;;;-1:-1:-1;12459:801:53;;;;13143:7;13197:3;13182:19;;13169:33;;-1:-1:-1;13249:3:53;13234:19;;;13221:33;;12459:801;-1:-1:-1;;12459:801:53:o;13265:732::-;13367:6;13375;13383;13391;13399;13407;13460:3;13448:9;13439:7;13435:23;13431:33;13428:53;;;13477:1;13474;13467:12;13428:53;13516:9;13503:23;13535:31;13560:5;13535:31;:::i;:::-;13585:5;-1:-1:-1;13642:2:53;13627:18;;13614:32;13655:33;13614:32;13655:33;:::i;:::-;13707:7;-1:-1:-1;13761:2:53;13746:18;;13733:32;;-1:-1:-1;13817:2:53;13802:18;;13789:32;13830:31;13789:32;13830:31;:::i;:::-;13265:732;;;;-1:-1:-1;13265:732:53;;13934:3;13919:19;;13906:33;;13986:3;13971:19;;;13958:33;;-1:-1:-1;13265:732:53;-1:-1:-1;;13265:732:53:o;14002:572::-;14097:6;14105;14113;14166:2;14154:9;14145:7;14141:23;14137:32;14134:52;;;14182:1;14179;14172:12;14134:52;14209:23;;-1:-1:-1;;;;;14244:30:53;;14241:50;;;14287:1;14284;14277:12;14241:50;14326:70;14388:7;14379:6;14368:9;14364:22;14326:70;:::i;:::-;14415:8;;-1:-1:-1;14300:96:53;-1:-1:-1;;14500:2:53;14485:18;;14472:32;14513:31;14472:32;14513:31;:::i;14579:274::-;14672:6;14725:2;14713:9;14704:7;14700:23;14696:32;14693:52;;;14741:1;14738;14731:12;14693:52;14773:9;14767:16;14792:31;14817:5;14792:31;:::i;15114:213::-;15213:6;15266:2;15254:9;15245:7;15241:23;15237:32;15234:52;;;15282:1;15279;15272:12;15234:52;-1:-1:-1;15305:16:53;;15114:213;-1:-1:-1;15114:213:53:o;15521:247::-;15589:6;15642:2;15630:9;15621:7;15617:23;15613:32;15610:52;;;15658:1;15655;15648:12;15610:52;15690:9;15684:16;15709:29;15732:5;15709:29;:::i;15773:127::-;15834:10;15829:3;15825:20;15822:1;15815:31;15865:4;15862:1;15855:15;15889:4;15886:1;15879:15;15905:331;16010:9;16021;16063:8;16051:10;16048:24;16045:44;;;16085:1;16082;16075:12;16045:44;16114:6;16104:8;16101:20;16098:40;;;16134:1;16131;16124:12;16098:40;-1:-1:-1;;16160:23:53;;;16205:25;;;;;-1:-1:-1;15905:331:53:o;16241:323::-;-1:-1:-1;;;;;;16361:19:53;;16437:11;;;;16468:1;16460:10;;16457:101;;;16545:2;16539;16532:3;16529:1;16525:11;16522:1;16518:19;16514:28;16510:2;16506:37;16502:46;16493:55;;16457:101;;;16241:323;;;;:::o;16974:245::-;17041:6;17094:2;17082:9;17073:7;17069:23;17065:32;17062:52;;;17110:1;17107;17100:12;17062:52;17142:9;17136:16;17161:28;17183:5;17161:28;:::i;17224:1011::-;17319:6;17350:2;17393;17381:9;17372:7;17368:23;17364:32;17361:52;;;17409:1;17406;17399:12;17361:52;17436:16;;-1:-1:-1;;;;;17501:14:53;;;17498:34;;;17528:1;17525;17518:12;17498:34;17566:6;17555:9;17551:22;17541:32;;17611:7;17604:4;17600:2;17596:13;17592:27;17582:55;;17633:1;17630;17623:12;17582:55;17662:2;17656:9;17684:2;17680;17677:10;17674:36;;;17690:18;;:::i;:::-;17736:2;17733:1;17729:10;17719:20;;17759:28;17783:2;17779;17775:11;17759:28;:::i;:::-;17821:15;;;17891:11;;;17887:20;;;17852:12;;;;17919:19;;;17916:39;;;17951:1;17948;17941:12;17916:39;17975:11;;;;17995:210;18011:6;18006:3;18003:15;17995:210;;;18084:3;18078:10;18065:23;;18101:31;18126:5;18101:31;:::i;:::-;18145:18;;;18028:12;;;;18183;;;;17995:210;;;18224:5;17224:1011;-1:-1:-1;;;;;;;;17224:1011:53:o;18240:127::-;18301:10;18296:3;18292:20;18289:1;18282:31;18332:4;18329:1;18322:15;18356:4;18353:1;18346:15;18372:125;18437:9;;;18458:10;;;18455:36;;;18471:18;;:::i;18502:128::-;18569:9;;;18590:11;;;18587:37;;;18604:18;;:::i;19184:284::-;19278:6;19331:2;19319:9;19310:7;19306:23;19302:32;19299:52;;;19347:1;19344;19337:12;19299:52;19379:9;19373:16;19418:1;19411:5;19408:12;19398:40;;19434:1;19431;19424:12;19473:127;19534:10;19529:3;19525:20;19522:1;19515:31;19565:4;19562:1;19555:15;19589:4;19586:1;19579:15;19605:168;19678:9;;;19709;;19726:15;;;19720:22;;19706:37;19696:71;;19747:18;;:::i;19778:217::-;19818:1;19844;19834:132;;19888:10;19883:3;19879:20;19876:1;19869:31;19923:4;19920:1;19913:15;19951:4;19948:1;19941:15;19834:132;-1:-1:-1;19980:9:53;;19778:217::o;20000:360::-;20203:6;20192:9;20185:25;20246:6;20241:2;20230:9;20226:18;20219:34;20289:2;20284;20273:9;20269:18;20262:30;20166:4;20309:45;20350:2;20339:9;20335:18;20327:6;20309:45;:::i;:::-;20301:53;20000:360;-1:-1:-1;;;;;20000:360:53:o;20365:274::-;-1:-1:-1;;;;;20557:32:53;;;;20539:51;;20621:2;20606:18;;20599:34;20527:2;20512:18;;20365:274::o;20644:182::-;-1:-1:-1;;;;;20751:10:53;;;20763;;;20747:27;;20786:11;;;20783:37;;;20800:18;;:::i;20831:185::-;-1:-1:-1;;;;;20952:10:53;;;20940;;;20936:27;;20975:12;;;20972:38;;;20990:18;;:::i
Swarm Source
ipfs://ae817a6e576e78f77be7d1068f3caccb55e0d3d184566deda1586c9ebf0cfabc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
SONIC | 100.00% | $0.48785 | 102,154.7419 | $49,836.19 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.