ERC-20
Overview
Max Total Supply
10,656,477.925492397498533189 ERC20 ***
Holders
47
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000001 ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x82F2d4c5...4c7e5f6f3 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
StablePool
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 9999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";import { ISwapFeePercentageBounds } from "@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol";import {IUnbalancedLiquidityInvariantRatioBounds} from "@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol";import { IBasePool } from "@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol";import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol";import {IStablePool,StablePoolDynamicData,StablePoolImmutableData,AmplificationState} from "@balancer-labs/v3-interfaces/contracts/pool-stable/IStablePool.sol";import "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol";import { BasePoolAuthentication } from "@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol";import { BalancerPoolToken } from "@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol";import { FixedPoint } from "@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol";import { StableMath } from "@balancer-labs/v3-solidity-utils/contracts/math/StableMath.sol";import { Version } from "@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol";import { PoolInfo } from "@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { IBasePool } from "../vault/IBasePool.sol";/*** @notice Full state of any ongoing or scheduled amplification parameter update.* @dev If there is an ongoing or scheduled update, `startTime` and/or `endTime` will be in the future.* On initialization, startTime == endTime, and both startValue and endValue will reflect the initial amp setting.* Balancer timestamps are 32 bits.** @return startValue The amplification parameter at the start of the update* @return endValue The final value of the amplification parameter* @return startTime The timestamp when the update begins* @return endTime The timestamp when the update ends*/struct AmplificationState {uint64 startValue;uint64 endValue;uint32 startTime;uint32 endTime;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { TokenInfo } from "../vault/VaultTypes.sol";/*** @notice Convenience interface for pools, to get easy access to information stored in the Vault.* Intended mostly for off-chain requests; pools do not need to implement this to work properly.*/interface IPoolInfo {/*** @notice Gets the tokens registered in the pool.* @return tokens List of tokens in the pool, sorted in registration order*/function getTokens() external view returns (IERC20[] memory tokens);/*** @notice Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.* @return tokens Pool tokens, sorted in token registration order* @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order* @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order* @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order*/
12345678910111213141516// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/// @notice Simple interface for permissioned calling of external functions.interface IAuthentication {/// @notice The sender does not have permission to call a function.error SenderNotAllowed();/*** @notice Returns the action identifier associated with the external function described by `selector`.* @param selector The 4-byte selector of the permissioned function* @return actionId The computed actionId*/function getActionId(bytes4 selector) external view returns (bytes32 actionId);}
1234567891011121314151617// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/// @notice General interface for token exchange rates.interface IRateProvider {/*** @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.* @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token* rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface* does not take a rounding direction or return an error, so great care must be taken when interpreting and using* rates in downstream computations.** @return rate The current token rate*/function getRate() external view returns (uint256 rate);}
123456789101112131415// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/// @notice Simple interface to retrieve the version of a deployed contract.interface IVersion {/*** @notice Return arbitrary text representing the version of a contract.* @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,* version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.** @return version The version string corresponding to the current deployed contract*/function version() external view returns (string memory);}
123456789101112131415// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/// @notice Interface to the Vault's permission system.interface IAuthorizer {/*** @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.* @param actionId Identifier for the action to be performed* @param account Account trying to perform the action* @param where Target contract for the action* @return success True if the action is permitted*/function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IUnbalancedLiquidityInvariantRatioBounds } from "./IUnbalancedLiquidityInvariantRatioBounds.sol";import { ISwapFeePercentageBounds } from "./ISwapFeePercentageBounds.sol";import { PoolSwapParams, Rounding, SwapKind } from "./VaultTypes.sol";/*** @notice Base interface for a Balancer Pool.* @dev All pool types should implement this interface. Note that it also requires implementation of:* - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.* - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced* liquidity operation.*/interface IBasePool is ISwapFeePercentageBounds, IUnbalancedLiquidityInvariantRatioBounds {/***************************************************************************Invariant***************************************************************************//*** @notice Computes the pool's invariant.* @dev This function computes the invariant based on current balances (and potentially other pool state).* The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.* If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be* returned for both rounding directions.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.import {TokenConfig,LiquidityManagement,PoolSwapParams,AfterSwapParams,HookFlags,AddLiquidityKind,RemoveLiquidityKind,SwapKind} from "./VaultTypes.sol";/*** @notice Interface for pool hooks.* @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that* they are called in the correct order, and with the correct arguments. To maintain this security, these functions* should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,* then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)*/interface IHooks {/***************************************************************************
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { IVault } from "./IVault.sol";/// @notice Contract that handles protocol and pool creator fees for the Vault.interface IProtocolFeeController {/*** @notice Emitted when the protocol swap fee percentage is updated.* @param swapFeePercentage The updated protocol swap fee percentage*/event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);/*** @notice Emitted when the protocol yield fee percentage is updated.* @param yieldFeePercentage The updated protocol yield fee percentage*/event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);/*** @notice Emitted when the protocol swap fee percentage is updated for a specific pool.* @param pool The pool whose protocol swap fee will be changed* @param swapFeePercentage The updated protocol swap fee percentage
12345678910111213141516171819202122232425// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/*** @notice Return the minimum/maximum swap fee percentages for a pool.* @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure* that new pool developers think about and set these bounds according to their specific pool type.** A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power* function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,* a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as* LVR/MEV strategies, where a very high fee makes sense.** Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate* more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is* the highest value below 100% that satisfies the precision requirements.*/interface ISwapFeePercentageBounds {/// @return minimumSwapFeePercentage The minimum swap fee percentage for a poolfunction getMinimumSwapFeePercentage() external view returns (uint256 minimumSwapFeePercentage);/// @return maximumSwapFeePercentage The maximum swap fee percentage for a poolfunction getMaximumSwapFeePercentage() external view returns (uint256 maximumSwapFeePercentage);}
12345678910111213141516171819202122// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;/*** @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.* @dev The Vault does not enforce any "baseline" bounds on invariant ratios, since such bounds are highly specific* and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.* `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according* to their pool type's math.** For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural* logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers* used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.*/interface IUnbalancedLiquidityInvariantRatioBounds {/// @return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidityfunction getMinimumInvariantRatio() external view returns (uint256 minimumInvariantRatio);/// @return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidityfunction getMaximumInvariantRatio() external view returns (uint256 maximumInvariantRatio);}
12345678910111213141516// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IAuthentication } from "../solidity-utils/helpers/IAuthentication.sol";import { IVaultExtension } from "./IVaultExtension.sol";import { IVaultErrors } from "./IVaultErrors.sol";import { IVaultEvents } from "./IVaultEvents.sol";import { IVaultAdmin } from "./IVaultAdmin.sol";import { IVaultMain } from "./IVaultMain.sol";/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.interface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {/// @return vault The main Vault address.function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";import { IProtocolFeeController } from "./IProtocolFeeController.sol";import { IAuthorizer } from "./IAuthorizer.sol";import { IVault } from "./IVault.sol";/*** @notice Interface for functions defined on the `VaultAdmin` contract.* @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,* as two delegate calls add gas to each call. Most of the permissioned calls are here.*/interface IVaultAdmin {/*******************************************************************************Constants and immutables*******************************************************************************//*** @notice Returns the main Vault address.* @dev The main Vault contains the entrypoint and main liquidity operation implementations.* @return vault The address of the main Vault*/function vault() external view returns (IVault);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.interface IVaultErrors {/*******************************************************************************Registration and Initialization*******************************************************************************//*** @notice A pool has already been registered. `registerPool` may only be called once.* @param pool The already registered pool*/error PoolAlreadyRegistered(address pool);/*** @notice A pool has already been initialized. `initialize` may only be called once.* @param pool The already initialized pool*/error PoolAlreadyInitialized(address pool);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { IProtocolFeeController } from "./IProtocolFeeController.sol";import { IAuthorizer } from "./IAuthorizer.sol";import { IHooks } from "./IHooks.sol";import "./VaultTypes.sol";/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.interface IVaultEvents {/*** @notice A Pool was registered by calling `registerPool`.* @param pool The pool being registered* @param factory The factory creating the pool* @param tokenConfig An array of descriptors for the tokens the pool will manage* @param swapFeePercentage The static swap fee of the pool* @param pauseWindowEndTime The pool's pause window end time* @param roleAccounts Addresses the Vault will allow to change certain pool settings* @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract* @param liquidityManagement Supported liquidity management hook flags*/event PoolRegistered(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { IAuthorizer } from "./IAuthorizer.sol";import { IProtocolFeeController } from "./IProtocolFeeController.sol";import { IVault } from "./IVault.sol";import { IHooks } from "./IHooks.sol";import "./VaultTypes.sol";/*** @notice Interface for functions defined on the `VaultExtension` contract.* @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through* the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and* liquidity operations.*/interface IVaultExtension {/*******************************************************************************Constants and immutables*******************************************************************************//*** @notice Returns the main Vault address.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import "./VaultTypes.sol";/*** @notice Interface for functions defined on the main Vault contract.* @dev These are generally "critical path" functions (swap, add/remove liquidity) that are in the main contract* for technical or performance reasons.*/interface IVaultMain {/*******************************************************************************Transient Accounting*******************************************************************************//*** @notice Creates a context for a sequence of operations (i.e., "unlocks" the Vault).* @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,* meaning all balances for the caller have to be settled at the end.** @param data Contains function signature and args to be passed to the msg.sender* @return result Resulting data from the call*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";import { IRateProvider } from "../solidity-utils/helpers/IRateProvider.sol";/*** @notice Represents a pool's liquidity management configuration.* @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally* @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`* @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`* @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION*/struct LiquidityManagement {bool disableUnbalancedLiquidity;bool enableAddLiquidityCustom;bool enableRemoveLiquidityCustom;bool enableDonation;}// @notice Custom type to store the entire configuration of the pool.type PoolConfigBits is bytes32;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol";import { Authentication } from "@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol";/// @dev Base contract for performing access control on external functions within pools.abstract contract BasePoolAuthentication is Authentication {IVault private immutable _vault;/*** @dev Pools should use the pool factory as the disambiguator passed into the base Authentication contract.* Otherwise, permissions would conflict if different pools reused function names.*/constructor(IVault vault, address factory) Authentication(bytes32(uint256(uint160(factory)))) {_vault = vault;}// Access control is delegated to the Authorizer in the `_canPerform` functions.function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {return _vault.getAuthorizer().canPerform(actionId, user, address(this));}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { TokenInfo, PoolConfig } from "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol";import { IPoolInfo } from "@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol";import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol";/*** @notice Standard implementation of the `IPoolInfo` interface.* @dev Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for* commonly requested data.*/contract PoolInfo is IPoolInfo {IVault private immutable _vault;constructor(IVault vault) {_vault = vault;}/// @inheritdoc IPoolInfofunction getTokens() external view returns (IERC20[] memory tokens) {return _vault.getPoolTokens(address(this));}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IAuthentication } from "@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol";/*** @notice Building block for performing access control on external functions.* @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be* applied to external functions to make them only callable by authorized accounts.** Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.*/abstract contract Authentication is IAuthentication {bytes32 private immutable _actionIdDisambiguator;/*** @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in* multi-contract systems.** There are two main uses for it:* - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers* unique. The contract's own address is a good option.* - if the contract belongs to a family that shares action identifiers for the same functions, an identifier* shared by the entire family (and no other contract) should be used instead.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IVersion } from "@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol";/*** @notice Retrieves a contract's version from storage.* @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings* are not yet supported.** Contracts like factories and pools should have versions. These typically take the form of JSON strings containing* detailed information about the deployment. For instance:** `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`*/contract Version is IVersion {string private _version;constructor(string memory version_) {_setVersion(version_);}/*** @notice Getter for the version.* @return version The stored contract version
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { LogExpMath } from "./LogExpMath.sol";/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.library FixedPoint {/// @notice Attempted division by zero.error ZeroDivision();// solhint-disable no-inline-assembly// solhint-disable private-vars-leading-underscoreuint256 internal constant ONE = 1e18; // 18 decimal placesuint256 internal constant TWO = 2 * ONE;uint256 internal constant FOUR = 4 * ONE;uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {// Multiplication overflow protection is provided by Solidity 0.8.x.uint256 product = a * b;return product / ONE;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.24;// solhint-disable/*** @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).** Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural* exponentiation and logarithm (where the base is Euler's number).** All math operations are unchecked in order to save gas.** @author Fernando Martinelli - @fernandomartinelli* @author Sergio Yuhjtman - @sergioyuhjtman* @author Daniel Fernandez - @dmf7z*/library LogExpMath {/// @notice This error is thrown when a base is not within an acceptable range.error BaseOutOfBounds();/// @notice This error is thrown when a exponent is not within an acceptable range.error ExponentOutOfBounds();/// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { FixedPoint } from "./FixedPoint.sol";/*** @notice Stable Pool math library based on Curve's `StableSwap`.* @dev See https://docs.curve.fi/references/whitepapers/stableswap/** For security reasons, to help ensure that for all possible "round trip" paths the caller always receives the same* or fewer tokens than supplied, we have used precise math (i.e., '*', '/' vs. FixedPoint) whenever possible, and* chosen the rounding direction to favor the protocol elsewhere.** `computeInvariant` does not use the rounding direction from `IBasePool`, effectively always rounding down to match* the Curve implementation.*/library StableMath {using FixedPoint for uint256;// Some variables have non mixed case names (e.g. P_D) that relate to the mathematical derivations.// solhint-disable private-vars-leading-underscore, var-name-mixedcase/// @notice The iterations to calculate the invariant didn't converge.error StableInvariantDidNotConverge();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";import { IERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol";import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { Nonces } from "@openzeppelin/contracts/utils/Nonces.sol";import { IRateProvider } from "@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol";import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol";import { VaultGuard } from "./VaultGuard.sol";/*** @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,* with all the data and implementation delegated to the ERC20Multitoken contract.* @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].*/contract BalancerPoolToken is IERC20, IERC20Metadata, IERC20Permit, IRateProvider, EIP712, Nonces, ERC165, VaultGuard {bytes32 public constant PERMIT_TYPEHASH =
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.24;import { IVaultErrors } from "@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol";import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol";/// @notice Contract that shares the modifier `onlyVault`.contract VaultGuard {IVault internal immutable _vault;constructor(IVault vault) {_vault = vault;}modifier onlyVault() {_ensureOnlyVault();_;}function _ensureOnlyVault() private view {if (msg.sender != address(_vault)) {revert IVaultErrors.SenderIsNotVault(msg.sender);}}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)pragma solidity ^0.8.20;import {IERC20} from "../token/ERC20/IERC20.sol";import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";/*** @dev Interface of the ERC4626 "Tokenized Vault Standard", as defined in* https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].*/interface IERC4626 is IERC20, IERC20Metadata {event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);event Withdraw(address indexed sender,address indexed receiver,address indexed owner,uint256 assets,uint256 shares);/*** @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)pragma solidity ^0.8.20;interface IERC5267 {/*** @dev MAY be emitted to signal that the domain could have changed.*/event EIP712DomainChanged();/*** @dev returns the fields and values that describe the domain separator used by this contract for EIP-712* signature.*/function eip712Domain()externalviewreturns (bytes1 fields,string memory name,string memory version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] memory extensions
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC20 standard.*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/function decimals() external view returns (uint8);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** ==== Security Considerations** There are two important considerations concerning the use of `permit`. The first is that a valid permit signature* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be* considered as an intention to spend the allowance in any specific way. The second is that because permits have* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be* generally recommended is:** ```solidity* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}* doThing(..., value);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)pragma solidity ^0.8.20;/*** @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.** These functions can be used to verify that a message was signed by the holder* of the private keys of a given address.*/library ECDSA {enum RecoverError {NoError,InvalidSignature,InvalidSignatureLength,InvalidSignatureS}/*** @dev The signature derives the `address(0)`.*/error ECDSAInvalidSignature();/*** @dev The signature has an invalid length.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)pragma solidity ^0.8.20;import {MessageHashUtils} from "./MessageHashUtils.sol";import {ShortStrings, ShortString} from "../ShortStrings.sol";import {IERC5267} from "../../interfaces/IERC5267.sol";/*** @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.** The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose* encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract* does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to* produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.** This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA* ({_hashTypedDataV4}).** The implementation of the domain separator was designed to be as efficient as possible while still properly updating* the chain id to protect against replay attacks on an eventual fork of the chain.** NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)pragma solidity ^0.8.20;import {Strings} from "../Strings.sol";/*** @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.** The library provides methods for generating a hash of a message that conforms to the* https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]* specifications.*/library MessageHashUtils {/*** @dev Returns the keccak256 digest of an EIP-191 signed data with version* `0x45` (`personal_sign` messages).** The digest is calculated by prefixing a bytes32 `messageHash` with* `"\x19Ethereum Signed Message:\n32"` and hashing the result. It corresponds with the* hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.** NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with* keccak256, although any bytes32 value can be safely used because the final digest will* be re-hashed.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {return interfaceId == type(IERC165).interfaceId;}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)pragma solidity ^0.8.20;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {/*** @dev Muldiv operation overflow.*/error MathOverflowedMulDiv();enum Rounding {Floor, // Toward negative infinityCeil, // Toward positive infinityTrunc, // Toward zeroExpand // Away from zero}/*** @dev Returns the addition of two unsigned integers, with an overflow flag.*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such an operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.*/library SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)pragma solidity ^0.8.20;/*** @dev Standard signed math utilities missing in the Solidity language.*/library SignedMath {/*** @dev Returns the largest of two signed numbers.*/function max(int256 a, int256 b) internal pure returns (int256) {return a > b ? a : b;}/*** @dev Returns the smallest of two signed numbers.*/function min(int256 a, int256 b) internal pure returns (int256) {return a < b ? a : b;}/*** @dev Returns the average of two signed numbers without overflow.* The result is rounded towards zero.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)pragma solidity ^0.8.20;/*** @dev Provides tracking nonces for addresses. Nonces will only increment.*/abstract contract Nonces {/*** @dev The nonce used for an `account` is not the expected current nonce.*/error InvalidAccountNonce(address account, uint256 currentNonce);mapping(address account => uint256) private _nonces;/*** @dev Returns the next unused nonce for an address.*/function nonces(address owner) public view virtual returns (uint256) {return _nonces[owner];}/*** @dev Consumes a nonce.** Returns the current value and increments nonce.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)pragma solidity ^0.8.20;import {StorageSlot} from "./StorageSlot.sol";// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |// | length | 0x BB |type ShortString is bytes32;/*** @dev This library provides functions to convert short memory strings* into a `ShortString` type that can be used as an immutable variable.** Strings of arbitrary length can be optimized using this library if* they are short enough (up to 31 bytes) by packing them with their* length (1 byte) in a single EVM word (32 bytes). Additionally, a* fallback mechanism can be used for every other case.** Usage example:** ```solidity* contract Named {* using ShortStrings for *;*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.pragma solidity ^0.8.20;/*** @dev Library for reading and writing primitive types to specific storage slots.** Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.* This library helps with reading and writing to such slots without the need for inline assembly.** The functions in this library return Slot structs that contain a `value` member that can be used to read or write.** Example usage to set ERC1967 implementation slot:* ```solidity* contract ERC1967 {* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;** function _getImplementation() internal view returns (address) {* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;* }** function _setImplementation(address newImplementation) internal {* require(newImplementation.code.length > 0);* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)pragma solidity ^0.8.20;import {Math} from "./math/Math.sol";import {SignedMath} from "./math/SignedMath.sol";/*** @dev String operations.*/library Strings {bytes16 private constant HEX_DIGITS = "0123456789abcdef";uint8 private constant ADDRESS_LENGTH = 20;/*** @dev The `value` string doesn't fit in the specified `length`.*/error StringsInsufficientHexLength(uint256 value, uint256 length);/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;
12345678910111213141516171819202122232425{"viaIR": true,"evmVersion": "cancun","optimizer": {"enabled": true,"runs": 9999,"details": {"yulDetails": {"optimizerSteps": "dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ]jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"libraries": {}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"amplificationParameter","type":"uint256"},{"internalType":"string","name":"version","type":"string"}],"internalType":"struct StablePool.NewPoolParams","name":"params","type":"tuple"},{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmpUpdateAlreadyStarted","type":"error"},{"inputs":[],"name":"AmpUpdateDurationTooShort","type":"error"},{"inputs":[],"name":"AmpUpdateNotStarted","type":"error"},{"inputs":[],"name":"AmpUpdateRateTooFast","type":"error"},{"inputs":[],"name":"AmplificationFactorTooHigh","type":"error"},{"inputs":[],"name":"AmplificationFactorTooLow","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StableComputeBalanceDidNotConverge","type":"error"},{"inputs":[],"name":"StableInvariantDidNotConverge","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AmpUpdateStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentValue","type":"uint256"}],"name":"AmpUpdateStopped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","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":"","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmplificationParameter","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"isUpdating","type":"bool"},{"internalType":"uint256","name":"precision","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmplificationState","outputs":[{"components":[{"internalType":"uint64","name":"startValue","type":"uint64"},{"internalType":"uint64","name":"endValue","type":"uint64"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"}],"internalType":"struct AmplificationState","name":"amplificationState","type":"tuple"},{"internalType":"uint256","name":"precision","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStablePoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"bptRate","type":"uint256"},{"internalType":"uint256","name":"amplificationParameter","type":"uint256"},{"internalType":"uint256","name":"startValue","type":"uint256"},{"internalType":"uint256","name":"endValue","type":"uint256"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"bool","name":"isAmpUpdating","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct StablePoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStablePoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256","name":"amplificationParameterPrecision","type":"uint256"}],"internalType":"struct StablePoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"request","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rawEndValue","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"startAmplificationParameterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopAmplificationParameterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101e0806040523461082a576143e3803803809161001d828561082e565b8339810160408282031261082a5781516001600160401b03811161082a57820190608092838383031261082a57604051918483016001600160401b038111848210176106035760405283516001600160401b03811161082a5781610082918601610851565b835260208401516001600160401b03811161082a57816100a3918601610851565b60208401908152604080860151908501526060850151909490916001600160401b03831161082a576020926100d89201610851565b60608401819052910151916001600160a01b038316830361082a578051935160408051959086016001600160401b03811187821017610603576040526001865260208601603160f81b815261012c826108a6565b6101205261013987610a29565b6101405281516020830120968760e05251902095610100968088524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84526040830152606082015246898201523060a082015260a0815260c0810181811060018060401b038211176106035760405251902087523060c0526101608590528051906001600160401b0382116106035760035490600182811c92168015610820575b60208310146105e55781601f8493116107b2575b50602090601f831160011461072a575f9261071f575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116106035760045490600182811c92168015610715575b60208310146105e55781601f8493116106aa575b50602090601f8311600114610622575f92610617575b50508160011b915f199060031b1c1916176004555b610180903382526101a0928484526101c0948552805160018060401b03811161060357600591825490600182811c921680156105f9575b60208310146105e55781601f849311610597575b50602090601f8311600114610533575f92610528575b50508160011b915f199060031b1c19161790555b60016040820151106105195761138860408201511161050a57604001516103e8908181029181830414901517156104f6576001600160401b0381116104df57600654906001600160401b03811663ffffffff42116104c7574280891b63ffffffff60801b16604093841b6fffffffffffffffff0000000000000000166001600160c01b03199095168317949094179390931760a09390931b63ffffffff60a01b1692909217600655519081527fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a023390602090a1604051936138839586610b60873951856132b8015260a05185613384015260c05185613289015260e051856133070152518461332d0152610120518461146d015261014051846114960152610160518481816102d90152818161045b0152818161068f015281816109090152818161098401528181610a0301528181610afc01528181611187015281816113e1015281816117fb0152818161194601528181611ddc015281816120c40152818161231401528181612766015281816129c20152612fa301525183612c6b015251826130690152518181816107e001528181610d5b01528181610e1f0152818161108201526115ab0152f35b6306dfcc6560e41b5f5260206004524260245260445ffd5b6306dfcc6560e41b5f52604060045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b6309b80d3960e41b5f5260045ffd5b63ab92332360e01b5f5260045ffd5b015190505f806102e9565b5f858152602081209350601f198516905b81811061057f5750908460019594939210610567575b505050811b0190556102fd565b01515f1960f88460031b161c191690555f808061055a565b92936020600181928786015181550195019301610544565b909150835f5260205f20601f8401851c810191602085106105db575b90601f8594939201861c01905b8181106105cd57506102d3565b5f81558493506001016105c0565b90915081906105b3565b634e487b7160e01b5f52602260045260245ffd5b91607f16916102bf565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610273565b60045f90815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f198416851061068f576001945083601f19811610610677575b505050811b01600455610288565b01515f1960f88460031b161c191690555f8080610669565b8181015183556020948501946001909301929091019061064e565b60045f529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c81016020851061070e575b90849392915b601f830160051c8201811061070057505061025d565b5f81558594506001016106ea565b50806106e4565b91607f1691610249565b015190505f80610211565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91905b601f1984168510610797576001945083601f1981161061077f575b505050811b01600355610226565b01515f1960f88460031b161c191690555f8080610771565b81810151835560209485019460019093019290910190610756565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610816575b90601f859493920160051c01905b81811061080857506101fb565b5f81558493506001016107fb565b90915081906107ed565b91607f16916101e7565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761060357604052565b81601f8201121561082a578051906001600160401b0382116106035760405192610885601f8401601f19166020018561082e565b8284526020838301011161082a57815f9260208093018386015e8301015290565b80516020908181101561091c5750601f8251116108de57808251920151908083106108d057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610603575f54926001938481811c91168015610a1f575b838210146105e557601f81116109ec575b5081601f841160011461098a57509282939183925f9461097f575b50501b915f199060031b1c1916175f5560ff90565b015192505f8061096a565b919083601f1981165f8052845f20945f905b888383106109d257505050106109ba575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f80806109ad565b85870151885590960195948501948793509081019061099c565b5f805284601f845f20920160051c820191601f860160051c015b828110610a1457505061094f565b5f8155018590610a06565b90607f169061093e565b805160209081811015610a535750601f8251116108de57808251920151908083106108d057501790565b9192916001600160401b0381116106035760019182548381811c91168015610b55575b828210146105e557601f8111610b22575b5080601f8311600114610ac25750819293945f92610ab7575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610aa0565b90601f19831695845f52825f20925f905b888210610b0b5750508385969710610af3575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610ae6565b808785968294968601518155019501930190610ad3565b835f5283601f835f20920160051c820191601f850160051c015b828110610b4a575050610a87565b5f8155018490610b3c565b90607f1690610a7656fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123f45750806306fdde031461234b578063095ea7b31461227d57806316a0b3e0146121cb57806318160ddd146121b157806321da5e191461213257806323b872dd1461205357806323de665114611ff2578063273c1adf14611fd05780632f1a0bc914611c2d57806330adf81f14611bf2578063313ce56714611bd65780633644e51514611bbb57806354fd4d5014611b115780635687f2b814611aae5780635c1e6259146118f9578063627cdcb9146118d0578063654cf15d146118ad578063679aefce146118925780636daccffa1461186057806370a082311461178c57806372c98186146116565780637ecebe001461161157806381fa807c1461154e57806384b0196e14611457578063851c1bb3146114055780638d928af8146113b457806395d89b41146112b7578063984de9e8146111f8578063a9059cbb146110ef578063aa6ca80814611029578063abb1dc4414610dc4578063b156aa0a14610d02578063b677fa5614610cdf578063cbd4e28014610839578063ce20ece714610819578063d335b0cf14610785578063d505accf146104d8578063dd62ed3e146103dc5763eb0f24d6146101d6575f80fd5b346103a257806003193601126103a2576101ee612ff7565b6101f6612d0f565b156103b457807fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233602061022985946131ec565b60065467ffffffffffffffff82169173ffffffff0000000000000000000000000000000061025642613231565b916fffffffffffffffff0000000000000000857fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff00000000000000000000000000000000000000008660a01b169616179160401b16179160801b161717600655604051908152a173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040519160208301526020825261030f82612513565b803b156103b05761038183929183926040519485809481937fc80882470000000000000000000000000000000000000000000000000000000083527f416d7055706461746553746f7070656400000000000000000000000000000000600484015260406024840152604483019061245c565b03925af180156103a5576103925750f35b61039b906124e3565b6103a25780f35b80fd5b6040513d84823e3d90fd5b5050fd5b6004827f4673a675000000000000000000000000000000000000000000000000000000008152fd5b50346103a25760406003193601126103a2576103f6612481565b9060206104016124a4565b92606473ffffffffffffffffffffffffffffffffffffffff91828060405197889586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc5790610495575b602090604051908152f35b506020813d6020116104c4575b816104af6020938361252f565b810103126104c0576020905161048a565b5f80fd5b3d91506104a2565b604051903d90823e3d90fd5b50346103a25760e06003193601126103a2576104f2612481565b6104fa6124a4565b90604435916064359160843560ff8116810361078157834211610755576105488273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff83111761072857879361062b93610622936040525190206105e0613272565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613713565b909291926137a2565b168181036106fa576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790528790602081606481857f00000000000000000000000000000000000000000000000000000000000000008c165af180156103a5576106c0575080f35b6020813d6020116106f2575b816106d96020938361252f565b810103126106ee576106ea90612710565b5080f35b5080fd5b3d91506106cc565b7f4b800e46000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b602486857f62791302000000000000000000000000000000000000000000000000000000008252600452fd5b8580fd5b50346103a257806003193601126103a257604051907fb45090f900000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc579061049557602090604051908152f35b50346103a257806003193601126103a257602060405164e8d4a510008152f35b50346103a257806003193601126103a2576040516101c0810181811067ffffffffffffffff8211176107285760405260608152606060208201528160408201528160608201528160808201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528161016082015281610180820152816101a08201526040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610cbd575b5081526040517f7e361bde000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c99575b5060208201526040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c67575b506040820152610a4161271d565b6060820152610a4e612979565b6080820152610a5b612d0f565b151561014083015260a082015263ffffffff6060610a776127c8565b67ffffffffffffffff81511660c085015267ffffffffffffffff60208201511660e0850152826040820151166101008501520151166101208201526040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a08160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c57610120929391610c2b575b5060e081015115156101608401526101008101511515610180840152015115156101a08201526040518091602082526101a0610b93610b7d83516101c060208701526101e086019061260c565b6020840151601f1986830301604087015261260c565b916040810151606085015260608101516080850152608081015160a085015260a081015160c085015260c081015160e085015260e081015161010085015263ffffffff6101008201511661012085015263ffffffff6101208201511661014085015261014081015115156101608501526101608101511515610180850152610180810151151582850152015115156101c08301520390f35b610c4f91506101a03d6101a011610c55575b610c47818361252f565b810190612b25565b5f610b30565b503d610c3d565b6040513d85823e3d90fd5b90506020813d602011610c91575b81610c826020938361252f565b810103126104c057515f610a33565b3d9150610c75565b610cb591503d8085833e610cad818361252f565b810190612935565b90505f6109b4565b610cd991503d8085833e610cd1818361252f565b810190612cb2565b5f610939565b50346103a257806003193601126103a2576020604051670853a0d2313c00008152f35b50346103a257806003193601126103a2576040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da59392610da9575b505060405191829160208352602083019061260c565b0390f35b610dbd92503d8091833e610cd1818361252f565b5f80610d8f565b50346103a257806003193601126103a25773ffffffffffffffffffffffffffffffffffffffff906040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201528181602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782809481928294610eec575b50610e6a6040519560808752608087019061263f565b9060209086830382880152818089519485815201980193905b838210610eb0578780610da589610ea28d8b858203604087015261260c565b90838203606085015261260c565b909192939783606060019260408c518051610eca81612688565b8352808501518716858401520151151560408201520199019493920190610e83565b955092509250503d8083853e610f02818561252f565b83016080848203126110255783519267ffffffffffffffff938481116106ee5782610f2e91870161282d565b9160209485870151818111610fc657870182601f82011215610fc657805190610f5682612552565b97610f64604051998a61252f565b82895280890181606080950284010192868411611021578201905b838210610fca5750505050506040870151818111610fc65782610fa39189016128d4565b966060810151918211610fc657610fbb9291016128d4565b91939491925f610e54565b8380fd5b848288031261102157604051610fdf816124f7565b8251600281101561101d578152838301518b8116810361101d57848201528591849161100d60408601612710565b6040820152815201910190610f7f565b8980fd5b8780fd5b8280fd5b50346103a257806003193601126103a2576040517fca4f2803000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da593926110cc575b505060405191829160208352602083019061263f565b6110e892503d8091833e6110e0818361252f565b8101906128ab565b5f806110b6565b50346103a25760406003193601126103a25761116d602061110e612481565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03818573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156103a5576111bf575b602060405160018152f35b6020813d6020116111f0575b816111d86020938361252f565b810103126106ee576111ea9150612710565b5f6111b4565b3d91506111cb565b50346103a25760406003193601126103a25760043567ffffffffffffffff81116106ee5761122a90369060040161256a565b6024359160028310156103a2575061124a90611244612d0f565b506133aa565b908161125c575b602082604051908152f35b80611268600192612688565b03611277576020905b90611251565b6001810180911161128a57602090611271565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346103a257806003193601126103a2576040516004545f826112d9836126bf565b91828252602093600190856001821691825f1461137657505060011461131b575b506113079250038361252f565b610da560405192828493845283019061245c565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b85831061135e5750506113079350820101856112fa565b80548389018501528794508693909201918101611347565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130795151560051b85010192508791506112fa9050565b50346103a257806003193601126103a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103a25760206003193601126103a257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103a257602061144f83612c40565b604051908152f35b50346103a257806003193601126103a2576114917f0000000000000000000000000000000000000000000000000000000000000000613523565b6114ba7f0000000000000000000000000000000000000000000000000000000000000000613655565b60405192602084019380851067ffffffffffffffff8611176107285761152f610da593611521966040528383526040519687967f0f00000000000000000000000000000000000000000000000000000000000000885260e0602089015260e088019061245c565b90868203604088015261245c565b9146606086015230608086015260a085015283820360c085015261260c565b50346103a257806003193601126103a2576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c5c57604093926115f4575b505060608282015191015182519182526020820152f35b61160a9250803d10610c5557610c47818361252f565b5f806115dd565b50346103a25760206003193601126103a257604060209173ffffffffffffffffffffffffffffffffffffffff611645612481565b168152600283522054604051908152f35b50346103a25760206003198181360112611025576004359067ffffffffffffffff908183116117885760e0908336030112610fc6576040519160e083018381108382111761072857604052806004013560028110156107815783526024810135848401526044810135828111610781576116d6906004369184010161256a565b6040840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036104c05760a084015260c48101359082821161078157019036602383011215611788576004820135908111610728576040519161175385601f19601f850116018461252f565b8183523660248383010111610781579381819692602461144f9701838601378301015260c0820152611783612f8c565b6129f5565b8480fd5b50346103a257602090816003193601126103a2576044826117ab612481565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa9182156104cc5791611833575b50604051908152f35b90508181813d8311611859575b61184a818361252f565b810103126104c057515f61182a565b503d611840565b50346103a257806003193601126103a257606061187b612d0f565b604051918252151560208201526103e86040820152f35b50346103a257806003193601126103a257602061144f612979565b50346103a257806003193601126103a257602060405167016345785d8a00008152f35b50346103a257806003193601126103a257335f9081526002602052604090208054600101905580f35b50346103a257806003193601126103a25760405190611917826124f7565b6060825260209182810160608152604082019183835273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201528681602481855afa908115611aa3579187916024938391611a89575b508552604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa908115611a7e578691611a65575b508395929195526103e88452604051948086526080860191519660608288015287518093528160a08801980193905b838210611a4c57878088611a418c8a51601f1985830301604086015261260c565b905160608301520390f35b8451811689529782019793820193600190910190611a20565b611a7991503d8088833e610cad818361252f565b6119f1565b6040513d88823e3d90fd5b611a9d91503d8085833e6110e0818361252f565b5f6119ae565b6040513d89823e3d90fd5b50346103a25760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ae0366125ca565b92919390611aec612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a380f35b50346103a257806003193601126103a2576040516005545f82611b33836126bf565b91828252602093600190856001821691825f14611376575050600114611b6057506113079250038361252f565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611ba35750506113079350820101856112fa565b80548389018501528794508693909201918101611b8c565b50346103a257806003193601126103a257602061144f613272565b50346103a257806003193601126103a257602060405160128152f35b50346103a257806003193601126103a25760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346104c05760406003193601126104c057600435602435611c4d612ff7565b60018210611fa8576113888211611f8057611c68428261280d565b62015180808210611f5857611c7b612d0f565b929092611f30576103e89485810295818704148115171561128a5783861115611f0a576305265c000291858304148515171561128a57600291611cc1611cc7928561281a565b9061318f565b11611ee257611cd8611cde916131ec565b926131ec565b611cf0611cea42613231565b92613231565b67ffffffffffffffff809416916006548582169473ffffffff0000000000000000000000000000000063ffffffff936fffffffffffffffff0000000000000000877fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff0000000000000000000000000000000000000000888716988a169960a01b169616179160401b16179160801b1617176006557f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf26080604051858152866020820152836040820152846060820152a173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016936040519360208501526040840152606083015260808201526080815260a0810192818410908411176107285782604052813b156104c0575f9183837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082947fc80882470000000000000000000000000000000000000000000000000000000084527f416d70557064617465537461727465640000000000000000000000000000000060a4820152604060c4820152611eb860e482018261245c565b0301925af18015611ed757611ecb575080f35b611ed591506124e3565b005b6040513d5f823e3d90fd5b7f1c708b92000000000000000000000000000000000000000000000000000000005f5260045ffd5b5081830291838304148315171561128a57600291611cc1611f2b928761281a565b611cc7565b7f2f301e7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd6b022a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b80d390000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fab923323000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104c0575f6003193601126104c0576020604051674563918244f400008152f35b346104c05760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612023366125ca565b9291939061202f612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346104c05760846020612065366125ca565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015611ed7576120fb57602060405160018152f35b6020813d60201161212a575b816121146020938361252f565b810103126104c05761212590612710565b6111b4565b3d9150612107565b346104c0575f6003193601126104c0575f6060604051612151816124c7565b828152826020820152826040820152015260a061216c6127c8565b6040519067ffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff809316604085015201511660608201526103e86080820152f35b346104c0575f6003193601126104c057602061144f61271d565b346104c05760606003193601126104c05760043567ffffffffffffffff81116104c0576121fc90369060040161256a565b612204612d0f565b509061221281611244612d0f565b8061226b575b9060209261222c61144f936044359061281a565b91602435926001670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150291612dd7565b906001820180921161128a5790612218565b346104c05760406003193601126104c0576122fa602061229b612481565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015611ed7576120fb57602060405160018152f35b346104c0575f6003193601126104c0576040516003545f8261236c836126bf565b91828252602093600190856001821691825f1461137657505060011461239957506113079250038361252f565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106123dc5750506113079350820101856112fa565b805483890185015287945086939092019181016123c5565b346104c05760206003193601126104c057600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036104c0577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6080810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff811161072857604052565b6060810190811067ffffffffffffffff82111761072857604052565b6040810190811067ffffffffffffffff82111761072857604052565b90601f601f19910116810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff81116107285760051b60200190565b9080601f830112156104c057602090823561258481612552565b93612592604051958661252f565b81855260208086019260051b8201019283116104c057602001905b8282106125bb575050505090565b813581529083019083016125ad565b60031960609101126104c05773ffffffffffffffffffffffffffffffffffffffff9060043582811681036104c0579160243590811681036104c0579060443590565b9081518082526020808093019301915f5b82811061262b575050505090565b83518552938101939281019260010161261d565b9081518082526020808093019301915f5b82811061265e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612650565b6002111561269257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c92168015612706575b60208310146126d957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126ce565b519081151582036104c057565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed7575f91612799575090565b90506020813d6020116127c0575b816127b46020938361252f565b810103126104c0575190565b3d91506127a7565b604051906127d5826124c7565b81606060065467ffffffffffffffff80821684528160401c16602084015263ffffffff90818160801c16604085015260a01c16910152565b9190820391821161128a57565b8181029291811591840414171561128a57565b9080601f830112156104c05781519060209161284881612552565b93612856604051958661252f565b81855260208086019260051b8201019283116104c057602001905b82821061287f575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036104c0578152908301908301612871565b906020828203126104c057815167ffffffffffffffff81116104c0576128d1920161282d565b90565b9080601f830112156104c0578151906020916128ef81612552565b936128fd604051958661252f565b81855260208086019260051b8201019283116104c057602001905b828210612926575050505090565b81518152908301908301612918565b9190916040818403126104c05780519267ffffffffffffffff938481116104c057816129629184016128d4565b9360208301519081116104c0576128d192016128d4565b6040517f4f037ee700000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed7575f91612799575090565b6040810190612a078251611244612d0f565b9081612b20575b612a16612d0f565b50918151612a2381612688565b612a2c81612688565b612ac657612a9391602091612a8d612a79612a99975193606081015193856080830151978893015199612a698b612a638985612dc3565b51612ca5565b612a738884612dc3565b52612dd7565b95612a848385612dc3565b51039183612dc3565b52612dc3565b5161280d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161128a5790565b612b0b91612b12945190612a8d612af760608301518095856020608087015196015199612a698b612a938985612dc3565b95612b028385612dc3565b51019183612dc3565b519061280d565b6001810180911161128a5790565b612a0e565b6101a0918190038281126104c05760405192610140928385019285841067ffffffffffffffff8511176107285760809084604052126104c057612b67836124c7565b612b7081612710565b8352612b7e60208201612710565b926101609384870152612b9360408301612710565b926101809384880152612ba860608401612710565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036104c05760808601526101008082015163ffffffff811681036104c057612c3994612c2f9160a0890152612c2361012097612c17898701612710565b60c08b01528501612710565b60e08901528301612710565b9086015201612710565b9082015290565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152612c9f816124f7565b51902090565b9190820180921161128a57565b906020828203126104c057815167ffffffffffffffff81116104c0576128d192016128d4565b8115612ce2570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b612d176127c8565b67ffffffffffffffff80825116906020830151169163ffffffff60608160408401511692015116908142105f14612d81576001938380821115612d695782612d659403924203910302612cd8565b0191565b5081612d7c930391420390840302612cd8565b900391565b5050505f9091565b805115612d965760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612d965760209160051b010190565b92919092612de78451809261281a565b90612df185612d89565b51612e0582612dff88612d89565b5161281a565b916001905b8588828410612f4a57612e26949350612b0b9250889150612dc3565b90612e31848061281a565b956103e8958688029088820488148915171561128a57612e5b612e6192611cc1612e68968961281a565b92612dc3565b519061281a565b9380840290848204148415171561128a57612e94612e9a92612e8e612ea4958894612cd8565b90612ca5565b95612ca5565b611cc18584612ca5565b5f5b60ff8110612ed6577fdcbda05c000000000000000000000000000000000000000000000000000000005f5260045ffd5b81612eea85612ee5838061281a565b612ca5565b908060011b908082046002149015171561128a57600191611cc186612f128a612f1795612ca5565b61280d565b928381811115612f3a57031115612f32576001905b01612ea6565b509250505090565b90031115612f3257600190612f2c565b612f8491612f6d84612f68879899612e6160019899612f7297612dc3565b61281a565b612cd8565b94612f7d858b612dc3565b5190612ca5565b920190612e0a565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303612fcb57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6130237fffffffff000000000000000000000000000000000000000000000000000000005f3516612c40565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ed75784925f92613153575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215611ed7575f9261311d575b5050156130f557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161314c575b613134818361252f565b810103126104c05761314590612710565b5f806130ec565b503d61312a565b8092508391933d8311613188575b61316b818361252f565b810103126104c057519082821682036104c057839190606461309b565b503d613161565b9080156131c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201046001019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff90818111613201571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b63ffffffff90818111613242571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480613381575b156132da577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176107285760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146132b1565b90915f9183515f5b81811061350b575083156135025792906133cd84839261281a565b915f907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18840196848811916001986001890194858a11965b60ff8210613435577f010ca320000000000000000000000000000000000000000000000000000000005f5260045ffd5b805f5b8d8d82106134d45750509081878661346c8f95612f688f9897612e8e839a6134646103e897889261281a565b04918961281a565b9161128a5761347c8c938861281a565b049161128a576134958f9392612e8e61349b948d61281a565b90612cd8565b9283818111156134c5570311156134b6578b905b0190613405565b50985050505050505050915090565b900311156134b6578b906134af565b909691939c926134e7856134f59261281a565b61349585612dff8b87612dc3565b96019b929095919b613438565b50509150505f90565b9361351c600191612f7d8789612dc3565b94016133b2565b60ff81146135775760ff811690601f821161354f576040519161354583612513565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613589836126bf565b8083529260209060019081811690811561361257506001146135b4575b50506128d19250038261252f565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b8284106135fa57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926135df565b9050602093506128d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f806135a6565b60ff81146136775760ff811690601f821161354f576040519161354583612513565b506040515f8160019160015461368c816126bf565b808452936020916001811690811561361257506001146136b45750506128d19250038261252f565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106136fb57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926136e0565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613797579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611ed7575f5173ffffffffffffffffffffffffffffffffffffffff81161561378d57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561269257806137b4575050565b600181036137e4577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361381857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146138225750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea26469706673582212205f0545cd780f72372cb3a41777cfaea685cd547404869d46a606879390daf1da64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001d444f204e4f5420555345202d204d6f636b20537461626c6520506f6f6c0000000000000000000000000000000000000000000000000000000000000000000004544553540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000487b226e616d65223a22537461626c65506f6f6c222c2276657273696f6e223a312c226465706c6f796d656e74223a2232303234313230352d76332d737461626c652d706f6f6c227d000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123f45750806306fdde031461234b578063095ea7b31461227d57806316a0b3e0146121cb57806318160ddd146121b157806321da5e191461213257806323b872dd1461205357806323de665114611ff2578063273c1adf14611fd05780632f1a0bc914611c2d57806330adf81f14611bf2578063313ce56714611bd65780633644e51514611bbb57806354fd4d5014611b115780635687f2b814611aae5780635c1e6259146118f9578063627cdcb9146118d0578063654cf15d146118ad578063679aefce146118925780636daccffa1461186057806370a082311461178c57806372c98186146116565780637ecebe001461161157806381fa807c1461154e57806384b0196e14611457578063851c1bb3146114055780638d928af8146113b457806395d89b41146112b7578063984de9e8146111f8578063a9059cbb146110ef578063aa6ca80814611029578063abb1dc4414610dc4578063b156aa0a14610d02578063b677fa5614610cdf578063cbd4e28014610839578063ce20ece714610819578063d335b0cf14610785578063d505accf146104d8578063dd62ed3e146103dc5763eb0f24d6146101d6575f80fd5b346103a257806003193601126103a2576101ee612ff7565b6101f6612d0f565b156103b457807fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233602061022985946131ec565b60065467ffffffffffffffff82169173ffffffff0000000000000000000000000000000061025642613231565b916fffffffffffffffff0000000000000000857fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff00000000000000000000000000000000000000008660a01b169616179160401b16179160801b161717600655604051908152a173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9166040519160208301526020825261030f82612513565b803b156103b05761038183929183926040519485809481937fc80882470000000000000000000000000000000000000000000000000000000083527f416d7055706461746553746f7070656400000000000000000000000000000000600484015260406024840152604483019061245c565b03925af180156103a5576103925750f35b61039b906124e3565b6103a25780f35b80fd5b6040513d84823e3d90fd5b5050fd5b6004827f4673a675000000000000000000000000000000000000000000000000000000008152fd5b50346103a25760406003193601126103a2576103f6612481565b9060206104016124a4565b92606473ffffffffffffffffffffffffffffffffffffffff91828060405197889586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9081156104cc5790610495575b602090604051908152f35b506020813d6020116104c4575b816104af6020938361252f565b810103126104c0576020905161048a565b5f80fd5b3d91506104a2565b604051903d90823e3d90fd5b50346103a25760e06003193601126103a2576104f2612481565b6104fa6124a4565b90604435916064359160843560ff8116810361078157834211610755576105488273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff83111761072857879361062b93610622936040525190206105e0613272565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613713565b909291926137a2565b168181036106fa576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790528790602081606481857f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba98c165af180156103a5576106c0575080f35b6020813d6020116106f2575b816106d96020938361252f565b810103126106ee576106ea90612710565b5080f35b5080fd5b3d91506106cc565b7f4b800e46000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b602486857f62791302000000000000000000000000000000000000000000000000000000008252600452fd5b8580fd5b50346103a257806003193601126103a257604051907fb45090f900000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9081156104cc579061049557602090604051908152f35b50346103a257806003193601126103a257602060405164e8d4a510008152f35b50346103a257806003193601126103a2576040516101c0810181811067ffffffffffffffff8211176107285760405260608152606060208201528160408201528160608201528160808201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528161016082015281610180820152816101a08201526040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115610c5c578391610cbd575b5081526040517f7e361bde000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115610c5c578391610c99575b5060208201526040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115610c5c578391610c67575b506040820152610a4161271d565b6060820152610a4e612979565b6080820152610a5b612d0f565b151561014083015260a082015263ffffffff6060610a776127c8565b67ffffffffffffffff81511660c085015267ffffffffffffffff60208201511660e0850152826040820151166101008501520151166101208201526040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a08160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115610c5c57610120929391610c2b575b5060e081015115156101608401526101008101511515610180840152015115156101a08201526040518091602082526101a0610b93610b7d83516101c060208701526101e086019061260c565b6020840151601f1986830301604087015261260c565b916040810151606085015260608101516080850152608081015160a085015260a081015160c085015260c081015160e085015260e081015161010085015263ffffffff6101008201511661012085015263ffffffff6101208201511661014085015261014081015115156101608501526101608101511515610180850152610180810151151582850152015115156101c08301520390f35b610c4f91506101a03d6101a011610c55575b610c47818361252f565b810190612b25565b5f610b30565b503d610c3d565b6040513d85823e3d90fd5b90506020813d602011610c91575b81610c826020938361252f565b810103126104c057515f610a33565b3d9150610c75565b610cb591503d8085833e610cad818361252f565b810190612935565b90505f6109b4565b610cd991503d8085833e610cd1818361252f565b810190612cb2565b5f610939565b50346103a257806003193601126103a2576020604051670853a0d2313c00008152f35b50346103a257806003193601126103a2576040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9081156103a55782610da59392610da9575b505060405191829160208352602083019061260c565b0390f35b610dbd92503d8091833e610cd1818361252f565b5f80610d8f565b50346103a257806003193601126103a25773ffffffffffffffffffffffffffffffffffffffff906040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201528181602481867f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9081156103a55782809481928294610eec575b50610e6a6040519560808752608087019061263f565b9060209086830382880152818089519485815201980193905b838210610eb0578780610da589610ea28d8b858203604087015261260c565b90838203606085015261260c565b909192939783606060019260408c518051610eca81612688565b8352808501518716858401520151151560408201520199019493920190610e83565b955092509250503d8083853e610f02818561252f565b83016080848203126110255783519267ffffffffffffffff938481116106ee5782610f2e91870161282d565b9160209485870151818111610fc657870182601f82011215610fc657805190610f5682612552565b97610f64604051998a61252f565b82895280890181606080950284010192868411611021578201905b838210610fca5750505050506040870151818111610fc65782610fa39189016128d4565b966060810151918211610fc657610fbb9291016128d4565b91939491925f610e54565b8380fd5b848288031261102157604051610fdf816124f7565b8251600281101561101d578152838301518b8116810361101d57848201528591849161100d60408601612710565b6040820152815201910190610f7f565b8980fd5b8780fd5b8280fd5b50346103a257806003193601126103a2576040517fca4f2803000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9081156103a55782610da593926110cc575b505060405191829160208352602083019061263f565b6110e892503d8091833e6110e0818361252f565b8101906128ab565b5f806110b6565b50346103a25760406003193601126103a25761116d602061110e612481565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03818573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165af180156103a5576111bf575b602060405160018152f35b6020813d6020116111f0575b816111d86020938361252f565b810103126106ee576111ea9150612710565b5f6111b4565b3d91506111cb565b50346103a25760406003193601126103a25760043567ffffffffffffffff81116106ee5761122a90369060040161256a565b6024359160028310156103a2575061124a90611244612d0f565b506133aa565b908161125c575b602082604051908152f35b80611268600192612688565b03611277576020905b90611251565b6001810180911161128a57602090611271565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346103a257806003193601126103a2576040516004545f826112d9836126bf565b91828252602093600190856001821691825f1461137657505060011461131b575b506113079250038361252f565b610da560405192828493845283019061245c565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b85831061135e5750506113079350820101856112fa565b80548389018501528794508693909201918101611347565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130795151560051b85010192508791506112fa9050565b50346103a257806003193601126103a257602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9168152f35b50346103a25760206003193601126103a257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103a257602061144f83612c40565b604051908152f35b50346103a257806003193601126103a2576114917f444f204e4f5420555345202d204d6f636b20537461626c6520506f6f6c00001d613523565b6114ba7f3100000000000000000000000000000000000000000000000000000000000001613655565b60405192602084019380851067ffffffffffffffff8611176107285761152f610da593611521966040528383526040519687967f0f00000000000000000000000000000000000000000000000000000000000000885260e0602089015260e088019061245c565b90868203604088015261245c565b9146606086015230608086015260a085015283820360c085015261260c565b50346103a257806003193601126103a2576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa918215610c5c57604093926115f4575b505060608282015191015182519182526020820152f35b61160a9250803d10610c5557610c47818361252f565b5f806115dd565b50346103a25760206003193601126103a257604060209173ffffffffffffffffffffffffffffffffffffffff611645612481565b168152600283522054604051908152f35b50346103a25760206003198181360112611025576004359067ffffffffffffffff908183116117885760e0908336030112610fc6576040519160e083018381108382111761072857604052806004013560028110156107815783526024810135848401526044810135828111610781576116d6906004369184010161256a565b6040840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036104c05760a084015260c48101359082821161078157019036602383011215611788576004820135908111610728576040519161175385601f19601f850116018461252f565b8183523660248383010111610781579381819692602461144f9701838601378301015260c0820152611783612f8c565b6129f5565b8480fd5b50346103a257602090816003193601126103a2576044826117ab612481565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa9182156104cc5791611833575b50604051908152f35b90508181813d8311611859575b61184a818361252f565b810103126104c057515f61182a565b503d611840565b50346103a257806003193601126103a257606061187b612d0f565b604051918252151560208201526103e86040820152f35b50346103a257806003193601126103a257602061144f612979565b50346103a257806003193601126103a257602060405167016345785d8a00008152f35b50346103a257806003193601126103a257335f9081526002602052604090208054600101905580f35b50346103a257806003193601126103a25760405190611917826124f7565b6060825260209182810160608152604082019183835273ffffffffffffffffffffffffffffffffffffffff94857f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201528681602481855afa908115611aa3579187916024938391611a89575b508552604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa908115611a7e578691611a65575b508395929195526103e88452604051948086526080860191519660608288015287518093528160a08801980193905b838210611a4c57878088611a418c8a51601f1985830301604086015261260c565b905160608301520390f35b8451811689529782019793820193600190910190611a20565b611a7991503d8088833e610cad818361252f565b6119f1565b6040513d88823e3d90fd5b611a9d91503d8085833e6110e0818361252f565b5f6119ae565b6040513d89823e3d90fd5b50346103a25760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ae0366125ca565b92919390611aec612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a380f35b50346103a257806003193601126103a2576040516005545f82611b33836126bf565b91828252602093600190856001821691825f14611376575050600114611b6057506113079250038361252f565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611ba35750506113079350820101856112fa565b80548389018501528794508693909201918101611b8c565b50346103a257806003193601126103a257602061144f613272565b50346103a257806003193601126103a257602060405160128152f35b50346103a257806003193601126103a25760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346104c05760406003193601126104c057600435602435611c4d612ff7565b60018210611fa8576113888211611f8057611c68428261280d565b62015180808210611f5857611c7b612d0f565b929092611f30576103e89485810295818704148115171561128a5783861115611f0a576305265c000291858304148515171561128a57600291611cc1611cc7928561281a565b9061318f565b11611ee257611cd8611cde916131ec565b926131ec565b611cf0611cea42613231565b92613231565b67ffffffffffffffff809416916006548582169473ffffffff0000000000000000000000000000000063ffffffff936fffffffffffffffff0000000000000000877fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff0000000000000000000000000000000000000000888716988a169960a01b169616179160401b16179160801b1617176006557f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf26080604051858152866020820152836040820152846060820152a173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba916936040519360208501526040840152606083015260808201526080815260a0810192818410908411176107285782604052813b156104c0575f9183837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082947fc80882470000000000000000000000000000000000000000000000000000000084527f416d70557064617465537461727465640000000000000000000000000000000060a4820152604060c4820152611eb860e482018261245c565b0301925af18015611ed757611ecb575080f35b611ed591506124e3565b005b6040513d5f823e3d90fd5b7f1c708b92000000000000000000000000000000000000000000000000000000005f5260045ffd5b5081830291838304148315171561128a57600291611cc1611f2b928761281a565b611cc7565b7f2f301e7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd6b022a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b80d390000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fab923323000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104c0575f6003193601126104c0576020604051674563918244f400008152f35b346104c05760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612023366125ca565b9291939061202f612f8c565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346104c05760846020612065366125ca565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165af18015611ed7576120fb57602060405160018152f35b6020813d60201161212a575b816121146020938361252f565b810103126104c05761212590612710565b6111b4565b3d9150612107565b346104c0575f6003193601126104c0575f6060604051612151816124c7565b828152826020820152826040820152015260a061216c6127c8565b6040519067ffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff809316604085015201511660608201526103e86080820152f35b346104c0575f6003193601126104c057602061144f61271d565b346104c05760606003193601126104c05760043567ffffffffffffffff81116104c0576121fc90369060040161256a565b612204612d0f565b509061221281611244612d0f565b8061226b575b9060209261222c61144f936044359061281a565b91602435926001670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150291612dd7565b906001820180921161128a5790612218565b346104c05760406003193601126104c0576122fa602061229b612481565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165af18015611ed7576120fb57602060405160018152f35b346104c0575f6003193601126104c0576040516003545f8261236c836126bf565b91828252602093600190856001821691825f1461137657505060011461239957506113079250038361252f565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106123dc5750506113079350820101856112fa565b805483890185015287945086939092019181016123c5565b346104c05760206003193601126104c057600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036104c0577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6080810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff811161072857604052565b6060810190811067ffffffffffffffff82111761072857604052565b6040810190811067ffffffffffffffff82111761072857604052565b90601f601f19910116810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff81116107285760051b60200190565b9080601f830112156104c057602090823561258481612552565b93612592604051958661252f565b81855260208086019260051b8201019283116104c057602001905b8282106125bb575050505090565b813581529083019083016125ad565b60031960609101126104c05773ffffffffffffffffffffffffffffffffffffffff9060043582811681036104c0579160243590811681036104c0579060443590565b9081518082526020808093019301915f5b82811061262b575050505090565b83518552938101939281019260010161261d565b9081518082526020808093019301915f5b82811061265e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612650565b6002111561269257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c92168015612706575b60208310146126d957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126ce565b519081151582036104c057565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115611ed7575f91612799575090565b90506020813d6020116127c0575b816127b46020938361252f565b810103126104c0575190565b3d91506127a7565b604051906127d5826124c7565b81606060065467ffffffffffffffff80821684528160401c16602084015263ffffffff90818160801c16604085015260a01c16910152565b9190820391821161128a57565b8181029291811591840414171561128a57565b9080601f830112156104c05781519060209161284881612552565b93612856604051958661252f565b81855260208086019260051b8201019283116104c057602001905b82821061287f575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036104c0578152908301908301612871565b906020828203126104c057815167ffffffffffffffff81116104c0576128d1920161282d565b90565b9080601f830112156104c0578151906020916128ef81612552565b936128fd604051958661252f565b81855260208086019260051b8201019283116104c057602001905b828210612926575050505090565b81518152908301908301612918565b9190916040818403126104c05780519267ffffffffffffffff938481116104c057816129629184016128d4565b9360208301519081116104c0576128d192016128d4565b6040517f4f037ee700000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115611ed7575f91612799575090565b6040810190612a078251611244612d0f565b9081612b20575b612a16612d0f565b50918151612a2381612688565b612a2c81612688565b612ac657612a9391602091612a8d612a79612a99975193606081015193856080830151978893015199612a698b612a638985612dc3565b51612ca5565b612a738884612dc3565b52612dd7565b95612a848385612dc3565b51039183612dc3565b52612dc3565b5161280d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161128a5790565b612b0b91612b12945190612a8d612af760608301518095856020608087015196015199612a698b612a938985612dc3565b95612b028385612dc3565b51019183612dc3565b519061280d565b6001810180911161128a5790565b612a0e565b6101a0918190038281126104c05760405192610140928385019285841067ffffffffffffffff8511176107285760809084604052126104c057612b67836124c7565b612b7081612710565b8352612b7e60208201612710565b926101609384870152612b9360408301612710565b926101809384880152612ba860608401612710565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036104c05760808601526101008082015163ffffffff811681036104c057612c3994612c2f9160a0890152612c2361012097612c17898701612710565b60c08b01528501612710565b60e08901528301612710565b9086015201612710565b9082015290565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000815ab57a5a2e4976cec0b43c2d50cf26ef6f31fd845216604082015260248152612c9f816124f7565b51902090565b9190820180921161128a57565b906020828203126104c057815167ffffffffffffffff81116104c0576128d192016128d4565b8115612ce2570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b612d176127c8565b67ffffffffffffffff80825116906020830151169163ffffffff60608160408401511692015116908142105f14612d81576001938380821115612d695782612d659403924203910302612cd8565b0191565b5081612d7c930391420390840302612cd8565b900391565b5050505f9091565b805115612d965760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612d965760209160051b010190565b92919092612de78451809261281a565b90612df185612d89565b51612e0582612dff88612d89565b5161281a565b916001905b8588828410612f4a57612e26949350612b0b9250889150612dc3565b90612e31848061281a565b956103e8958688029088820488148915171561128a57612e5b612e6192611cc1612e68968961281a565b92612dc3565b519061281a565b9380840290848204148415171561128a57612e94612e9a92612e8e612ea4958894612cd8565b90612ca5565b95612ca5565b611cc18584612ca5565b5f5b60ff8110612ed6577fdcbda05c000000000000000000000000000000000000000000000000000000005f5260045ffd5b81612eea85612ee5838061281a565b612ca5565b908060011b908082046002149015171561128a57600191611cc186612f128a612f1795612ca5565b61280d565b928381811115612f3a57031115612f32576001905b01612ea6565b509250505090565b90031115612f3257600190612f2c565b612f8491612f6d84612f68879899612e6160019899612f7297612dc3565b61281a565b612cd8565b94612f7d858b612dc3565b5190612ca5565b920190612e0a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9163303612fcb57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6130237fffffffff000000000000000000000000000000000000000000000000000000005f3516612c40565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f000000000000000000000000ba1333333333a1ba1108e8412f11850a5c319ba9165afa908115611ed75784925f92613153575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215611ed7575f9261311d575b5050156130f557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161314c575b613134818361252f565b810103126104c05761314590612710565b5f806130ec565b503d61312a565b8092508391933d8311613188575b61316b818361252f565b810103126104c057519082821682036104c057839190606461309b565b503d613161565b9080156131c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201046001019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff90818111613201571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b63ffffffff90818111613242571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000082f2d4c5beac74a1684c1792cab67b04c7e5f6f316301480613381575b156132da577febf8077253690e706b9c40d50ad78b52a27d59b485f8671116687f25ca4e8abf90565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f258d18349b90bc8a209d5a888af0909ca318a23144a6ddf1681c9b4d99f36ec860408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176107285760405251902090565b507f000000000000000000000000000000000000000000000000000000000000009246146132b1565b90915f9183515f5b81811061350b575083156135025792906133cd84839261281a565b915f907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18840196848811916001986001890194858a11965b60ff8210613435577f010ca320000000000000000000000000000000000000000000000000000000005f5260045ffd5b805f5b8d8d82106134d45750509081878661346c8f95612f688f9897612e8e839a6134646103e897889261281a565b04918961281a565b9161128a5761347c8c938861281a565b049161128a576134958f9392612e8e61349b948d61281a565b90612cd8565b9283818111156134c5570311156134b6578b905b0190613405565b50985050505050505050915090565b900311156134b6578b906134af565b909691939c926134e7856134f59261281a565b61349585612dff8b87612dc3565b96019b929095919b613438565b50509150505f90565b9361351c600191612f7d8789612dc3565b94016133b2565b60ff81146135775760ff811690601f821161354f576040519161354583612513565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613589836126bf565b8083529260209060019081811690811561361257506001146135b4575b50506128d19250038261252f565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b8284106135fa57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926135df565b9050602093506128d19592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f806135a6565b60ff81146136775760ff811690601f821161354f576040519161354583612513565b506040515f8160019160015461368c816126bf565b808452936020916001811690811561361257506001146136b45750506128d19250038261252f565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106136fb57506128d19450505081016020015f806135a6565b855487850183015294850194869450928101926136e0565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613797579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611ed7575f5173ffffffffffffffffffffffffffffffffffffffff81161561378d57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561269257806137b4575050565b600181036137e4577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361381857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146138225750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea26469706673582212205f0545cd780f72372cb3a41777cfaea685cd547404869d46a606879390daf1da64736f6c634300081a0033
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.