[
  "function facets() pure returns (tuple(address facetAddress, bytes4[] functionSelectors)[])",
  "function facetFunctionSelectors(address facet) pure returns (bytes4[] functionSelectors)",
  "function facetAddresses() pure returns (address[] addresses)",
  "function facetAddress(bytes4 functionSelector) pure returns (address)",
  "function emitDiamondCutEvent() returns (bool)",
  "error FeatureUnavailable(bytes32 which)",
  "error InvalidAccountId(uint128 accountId)",
  "error InvalidPermission(bytes32 permission)",
  "error OnlyAccountTokenProxy(address origin)",
  "error PermissionDenied(uint128 accountId, bytes32 permission, address target)",
  "error PermissionNotGranted(uint128 accountId, bytes32 permission, address user)",
  "error PositionOutOfBounds()",
  "error ValueAlreadyInSet()",
  "error ValueNotInSet()",
  "error ZeroAddress()",
  "event AccountCreated(uint128 indexed accountId, address indexed owner)",
  "event PermissionGranted(uint128 indexed accountId, bytes32 indexed permission, address indexed user, address sender)",
  "event PermissionRevoked(uint128 indexed accountId, bytes32 indexed permission, address indexed user, address sender)",
  "function createAccount() returns (uint128 accountId)",
  "function createAccount(uint128 requestedAccountId)",
  "function getAccountLastInteraction(uint128 accountId) view returns (uint256)",
  "function getAccountOwner(uint128 accountId) view returns (address)",
  "function getAccountPermissions(uint128 accountId) view returns (tuple(address user, bytes32[] permissions)[] accountPerms)",
  "function getAccountTokenAddress() view returns (address)",
  "function grantPermission(uint128 accountId, bytes32 permission, address user)",
  "function hasPermission(uint128 accountId, bytes32 permission, address user) view returns (bool)",
  "function isAuthorized(uint128 accountId, bytes32 permission, address user) view returns (bool)",
  "function notifyAccountTransfer(address to, uint128 accountId)",
  "function renouncePermission(uint128 accountId, bytes32 permission)",
  "function revokePermission(uint128 accountId, bytes32 permission, address user)",
  "error MismatchAssociatedSystemKind(bytes32 expected, bytes32 actual)",
  "error MissingAssociatedSystem(bytes32 id)",
  "error Unauthorized(address addr)",
  "event AssociatedSystemSet(bytes32 indexed kind, bytes32 indexed id, address proxy, address impl)",
  "function getAssociatedSystem(bytes32 id) view returns (address addr, bytes32 kind)",
  "function initOrUpgradeNft(bytes32 id, string name, string symbol, string uri, address impl)",
  "function initOrUpgradeToken(bytes32 id, string name, string symbol, uint8 decimals, address impl)",
  "function registerUnmanagedSystem(bytes32 id, address endpoint)",
  "error ImplementationIsSterile(address implementation)",
  "error NoChange()",
  "error NotAContract(address contr)",
  "error NotNominated(address addr)",
  "error UpgradeSimulationFailed()",
  "event OwnerChanged(address oldOwner, address newOwner)",
  "event OwnerNominated(address newOwner)",
  "event Upgraded(address indexed self, address implementation)",
  "function acceptOwnership()",
  "function getImplementation() view returns (address)",
  "function nominateNewOwner(address newNominatedOwner)",
  "function nominatedOwner() view returns (address)",
  "function owner() view returns (address)",
  "function renounceNomination()",
  "function simulateUpgradeTo(address newImplementation)",
  "function upgradeTo(address newImplementation)",
  "event FeatureFlagAllowAllSet(bytes32 indexed feature, bool allowAll)",
  "event FeatureFlagAllowlistAdded(bytes32 indexed feature, address account)",
  "event FeatureFlagAllowlistRemoved(bytes32 indexed feature, address account)",
  "event FeatureFlagDeniersReset(bytes32 indexed feature, address[] deniers)",
  "event FeatureFlagDenyAllSet(bytes32 indexed feature, bool denyAll)",
  "event PerpMarketSuspended(bool suspended)",
  "function addToFeatureFlagAllowlist(bytes32 feature, address account)",
  "function enableAllFeatures()",
  "function getDeniers(bytes32 feature) view returns (address[])",
  "function getFeatureFlagAllowAll(bytes32 feature) view returns (bool)",
  "function getFeatureFlagAllowlist(bytes32 feature) view returns (address[])",
  "function getFeatureFlagDenyAll(bytes32 feature) view returns (bool)",
  "function isFeatureAllowed(bytes32 feature, address account) view returns (bool)",
  "function removeFromFeatureFlagAllowlist(bytes32 feature, address account)",
  "function setDeniers(bytes32 feature, address[] deniers)",
  "function setFeatureFlagAllowAll(bytes32 feature, bool allowAll)",
  "function setFeatureFlagDenyAll(bytes32 feature, bool denyAll)",
  "function suspendAllFeatures()",
  "constructor(address _synthetix)",
  "error InvalidCoreAddress(address synthetixCore)",
  "error MarketNotFound(uint128 marketId)",
  "error OverflowInt256ToInt128()",
  "error OverflowInt256ToUint256()",
  "error OverflowUint128ToInt128()",
  "error OverflowUint256ToInt256()",
  "error OverflowUint256ToUint128()",
  "error OverflowUint256ToUint64()",
  "event FundingRecomputed(uint128 indexed marketId, int128 skew, int128 fundingRate, int128 fundingVelocity)",
  "event MarketCreated(uint128 indexed id, bytes32 name)",
  "event MarketSizeUpdated(uint128 indexed marketId, uint128 size, int128 skew)",
  "event OrderCanceled(uint128 indexed accountId, uint128 indexed marketId, uint256 keeperFee, uint64 commitmentTime)",
  "event UtilizationRecomputed(uint128 indexed marketId, int128 skew, uint128 utilizationRate)",
  "function createMarket(tuple(bytes32 name, uint32 minDelegateTime) data) returns (uint128)",
  "function getActiveMarketIds() view returns (uint128[])",
  "function getMarketDigest(uint128 marketId) view returns (tuple(tuple(address collateralAddress, uint256 available)[] depositedCollaterals, bytes32 name, int128 skew, uint128 size, uint256 oraclePrice, int128 fundingVelocity, int128 fundingRate, uint128 utilizationRate, uint128 remainingLiquidatableSizeCapacity, uint128 lastLiquidationTime, uint128 totalTraderDebtUsd, uint256 totalCollateralValueUsd, int128 debtCorrection))",
  "function getUtilizationDigest(uint128 marketId) view returns (tuple(uint128 lastComputedUtilizationRate, uint64 lastComputedTimestamp, uint128 currentUtilizationRate, uint256 utilization))",
  "function minimumCredit(uint128 marketId) view returns (uint256)",
  "function name(uint128) pure returns (string)",
  "function recomputeFunding(uint128 marketId)",
  "function recomputeUtilization(uint128 marketId)",
  "function reportedDebt(uint128 marketId) view returns (uint256)",
  "function setEthOracleNodeId(bytes32 ethOracleNodeId)",
  "function setPyth(address pyth)",
  "function setRewardDistributorImplementation(address implementation)",
  "function supportsInterface(bytes4 interfaceId) view returns (bool)",
  "error InvalidParameter(string parameter, string reason)",
  "event GlobalMarketConfigured(address indexed from)",
  "event MarketConfigured(uint128 indexed marketId, address indexed from)",
  "function getMarketConfiguration() pure returns (tuple(address pyth, bytes32 ethOracleNodeId, address rewardDistributorImplementation, uint64 pythPublishTimeMin, uint64 pythPublishTimeMax, uint64 minOrderAge, uint64 maxOrderAge, uint256 minKeeperFeeUsd, uint256 maxKeeperFeeUsd, uint128 keeperProfitMarginUsd, uint128 keeperProfitMarginPercent, uint128 keeperSettlementGasUnits, uint128 keeperCancellationGasUnits, uint128 keeperLiquidationGasUnits, uint128 keeperFlagGasUnits, uint128 keeperLiquidateMarginGasUnits, address keeperLiquidationEndorsed, uint128 collateralDiscountScalar, uint128 minCollateralDiscount, uint128 maxCollateralDiscount, uint128 utilizationBreakpointPercent, uint128 lowUtilizationSlopePercent, uint128 highUtilizationSlopePercent))",
  "function getMarketConfigurationById(uint128 marketId) pure returns (tuple(bytes32 oracleNodeId, bytes32 pythPriceFeedId, uint128 makerFee, uint128 takerFee, uint128 maxMarketSize, uint128 maxFundingVelocity, uint128 skewScale, uint128 fundingVelocityClamp, uint128 minCreditPercent, uint256 minMarginUsd, uint256 minMarginRatio, uint256 incrementalMarginScalar, uint256 maintenanceMarginScalar, uint256 maxInitialMarginRatio, uint256 liquidationRewardPercent, uint128 liquidationLimitScalar, uint128 liquidationWindowDuration, uint128 liquidationMaxPd))",
  "function setMarketConfiguration(tuple(uint64 pythPublishTimeMin, uint64 pythPublishTimeMax, uint64 minOrderAge, uint64 maxOrderAge, uint256 minKeeperFeeUsd, uint256 maxKeeperFeeUsd, uint128 keeperProfitMarginPercent, uint128 keeperProfitMarginUsd, uint128 keeperSettlementGasUnits, uint128 keeperCancellationGasUnits, uint128 keeperLiquidationGasUnits, uint128 keeperFlagGasUnits, uint128 keeperLiquidateMarginGasUnits, address keeperLiquidationEndorsed, uint128 collateralDiscountScalar, uint128 minCollateralDiscount, uint128 maxCollateralDiscount, uint128 utilizationBreakpointPercent, uint128 lowUtilizationSlopePercent, uint128 highUtilizationSlopePercent) data)",
  "function setMarketConfigurationById(tuple(uint128 marketId, bytes32 oracleNodeId, bytes32 pythPriceFeedId, uint128 makerFee, uint128 takerFee, uint128 maxMarketSize, uint128 maxFundingVelocity, uint128 skewScale, uint128 fundingVelocityClamp, uint128 minCreditPercent, uint256 minMarginUsd, uint256 minMarginRatio, uint256 incrementalMarginScalar, uint256 maintenanceMarginScalar, uint256 maxInitialMarginRatio, uint256 liquidationRewardPercent, uint128 liquidationLimitScalar, uint128 liquidationWindowDuration, uint128 liquidationMaxPd) data)",
  "function setMinDelegationTime(uint128 marketId, uint32 minDelegationTime)",
  "error AccountNotFound(uint128 accountId)",
  "error AccountSplitProportionTooLarge()",
  "error AccountSplitProportionTooSmall()",
  "error CanLiquidatePosition()",
  "error CollateralFound()",
  "error DuplicateEntries()",
  "error InsufficientMargin()",
  "error InvalidHook(address hook)",
  "error InvalidPositionSide()",
  "error OrderFound()",
  "error OverflowInt128ToUint128()",
  "error PositionFlagged()",
  "error PositionFound(uint128 accountId, uint128 marketId)",
  "error PositionNotFound()",
  "error ZeroProportion()",
  "event AccountSplit(uint128 indexed fromId, uint128 indexed toId, uint128 indexed marketId)",
  "event AccountsMerged(uint128 indexed fromId, uint128 indexed toId, uint128 indexed marketId)",
  "function getAccountDigest(uint128 accountId, uint128 marketId) view returns (tuple(tuple(address collateralAddress, uint256 available, uint256 oraclePrice)[] depositedCollaterals, uint256 collateralUsd, uint128 debtUsd, tuple(uint128 accountId, uint128 marketId, uint256 remainingMarginUsd, uint256 healthFactor, uint256 notionalValueUsd, int256 pnl, int128 accruedFunding, uint128 accruedUtilization, uint256 entryPythPrice, uint256 entryPrice, uint256 oraclePrice, int128 size, uint256 im, uint256 mm) position))",
  "function getPositionDigest(uint128 accountId, uint128 marketId) view returns (tuple(uint128 accountId, uint128 marketId, uint256 remainingMarginUsd, uint256 healthFactor, uint256 notionalValueUsd, int256 pnl, int128 accruedFunding, uint128 accruedUtilization, uint256 entryPythPrice, uint256 entryPrice, uint256 oraclePrice, int128 size, uint256 im, uint256 mm))",
  "function mergeAccounts(uint128 fromId, uint128 toId, uint128 marketId)",
  "function splitAccount(uint128 fromId, uint128 toId, uint128 marketId, uint128 proportion)",
  "error ArrayLengthMismatch()",
  "error DebtFound(uint128 accountId, uint128 marketId)",
  "error InsufficientCollateral(address collateralAddress, uint256 available, uint256 value)",
  "error InvalidRewardDistributor(address distributor)",
  "error MaxCollateralExceeded(uint256 value, uint256 max)",
  "error MissingRequiredCollateral(address collateralAddress)",
  "error NilCollateral()",
  "error NoDebt()",
  "error UnsupportedCollateral(address collateralAddress)",
  "error ZeroAmount()",
  "event DebtPaid(uint128 indexed accountId, uint128 indexed marketId, uint128 oldDebt, uint128 newDebt, uint128 paidFromUsdCollateral)",
  "event MarginCollateralConfigured(address indexed from, uint256 collaterals)",
  "event MarginDeposit(address indexed from, address indexed to, uint256 value, address collateralAddress)",
  "event MarginWithdraw(address indexed from, address indexed to, uint256 value, address collateralAddress)",
  "function getDiscountedCollateralPrice(address collateralAddress, uint256 amount) view returns (uint256)",
  "function getMarginCollateralConfiguration() view returns (tuple(address collateralAddress, bytes32 oracleNodeId, uint128 maxAllowable, uint128 skewScale, address rewardDistributor)[])",
  "function getMarginDigest(uint128 accountId, uint128 marketId) view returns (tuple(uint256 discountedMarginUsd, uint256 marginUsd, uint256 discountedCollateralUsd, uint256 collateralUsd))",
  "function getMarginLiquidationOnlyReward(uint128 accountId, uint128 marketId) view returns (uint256)",
  "function getNetAssetValue(uint128 accountId, uint128 marketId, uint256 oraclePrice) view returns (uint256)",
  "function getWithdrawableMargin(uint128 accountId, uint128 marketId) view returns (uint256)",
  "function modifyCollateral(uint128 accountId, uint128 marketId, address collateralAddress, int256 amountDelta)",
  "function payDebt(uint128 accountId, uint128 marketId, uint128 amount)",
  "function setCollateralMaxAllowable(address collateralAddress, uint128 maxAllowable)",
  "function setMarginCollateralConfiguration(address[] collateralAddresses, bytes32[] oracleNodeIds, uint128[] maxAllowables, uint128[] skewScales, address[] rewardDistributors)",
  "function withdrawAllCollateral(uint128 accountId, uint128 marketId)",
  "error DuplicateHook(address hook)",
  "error InsufficientLiquidity()",
  "error InvalidPrice()",
  "error MaxHooksExceeded()",
  "error MaxMarketSizeExceeded()",
  "error NilOrder()",
  "error OrderNotFound()",
  "error OrderNotReady()",
  "error OrderNotStale()",
  "error OrderStale()",
  "error PriceToleranceExceeded(int128 sizeDelta, uint256 price, uint256 limitPrice)",
  "error PriceToleranceNotExceeded(int128 sizeDelta, uint256 price, uint256 limitPrice)",
  "event OrderCommitted(uint128 indexed accountId, uint128 indexed marketId, uint64 commitmentTime, int128 sizeDelta, uint256 estimatedOrderFee, uint256 estimatedKeeperFee, bytes32 trackingCode)",
  "event OrderSettled(uint128 indexed accountId, uint128 indexed marketId, uint64 settlementTime, int128 sizeDelta, uint256 orderFee, uint256 keeperFee, int128 accruedFunding, uint128 accruedUtilization, int256 pnl, uint256 fillPrice, uint128 accountDebt)",
  "event OrderSettlementHookExecuted(uint128 indexed accountId, uint128 indexed marketId, address hook)",
  "function cancelOrder(uint128 accountId, uint128 marketId, bytes priceUpdateData) payable",
  "function cancelStaleOrder(uint128 accountId, uint128 marketId)",
  "function commitOrder(uint128 accountId, uint128 marketId, int128 sizeDelta, uint256 limitPrice, uint128 keeperFeeBufferUsd, address[] hooks, bytes32 trackingCode)",
  "function getFillPrice(uint128 marketId, int128 size) view returns (uint256)",
  "function getOraclePrice(uint128 marketId) view returns (uint256)",
  "function getOrderDigest(uint128 accountId, uint128 marketId) view returns (tuple(int128 sizeDelta, uint64 commitmentTime, uint256 limitPrice, uint128 keeperFeeBufferUsd, address[] hooks, bool isStale, bool isReady))",
  "function getOrderFees(uint128 marketId, int128 sizeDelta, uint128 keeperFeeBufferUsd) view returns (uint256 orderFee, uint256 keeperFee)",
  "function settleOrder(uint128 accountId, uint128 marketId, bytes priceUpdateData) payable",
  "error CannotLiquidateMargin()",
  "error CannotLiquidatePosition()",
  "error LiquidationZeroCapacity()",
  "error PositionNotFlagged()",
  "event MarginLiquidated(uint128 indexed accountId, uint128 indexed marketId, uint256 keeperReward)",
  "event PositionFlaggedLiquidation(uint128 indexed accountId, uint128 indexed marketId, address flagger, uint256 flagKeeperReward, uint256 flaggedPrice)",
  "event PositionLiquidated(uint128 indexed accountId, uint128 indexed marketId, int128 sizeBeforeLiquidation, int128 remainingSize, address keeper, address flagger, uint256 liqKeeperFee, uint256 liquidationPrice)",
  "function flagPosition(uint128 accountId, uint128 marketId)",
  "function getHealthFactor(uint128 accountId, uint128 marketId) view returns (uint256)",
  "function getLiquidationFees(uint128 accountId, uint128 marketId) view returns (uint256 flagKeeperReward, uint256 liqKeeperFee)",
  "function getLiquidationMarginUsd(uint128 accountId, uint128 marketId, int128 sizeDelta) view returns (uint256 im, uint256 mm)",
  "function getRemainingLiquidatableSizeCapacity(uint128 marketId) view returns (uint128 maxLiquidatableCapacity, uint128 remainingCapacity, uint128 lastLiquidationTimestamp)",
  "function isMarginLiquidatable(uint128 accountId, uint128 marketId) view returns (bool)",
  "function isPositionLiquidatable(uint128 accountId, uint128 marketId) view returns (bool)",
  "function liquidateMarginOnly(uint128 accountId, uint128 marketId)",
  "function liquidatePosition(uint128 accountId, uint128 marketId)",
  "error ZeroLength()",
  "event RewardDistributorCreated(address indexed distributor)",
  "function createRewardDistributor(tuple(uint128 poolId, address[] collateralTypes, string name, address token) data) returns (address)",
  "event SettlementHookConfigured(address indexed from, uint256 hooks)",
  "function getSettlementHookConfiguration() view returns (tuple(address[] whitelistedHookAddresses, uint32 maxHooksPerOrder))",
  "function isSettlementHookWhitelisted(address hook) view returns (bool)",
  "function setSettlementHookConfiguration(tuple(address[] whitelistedHookAddresses, uint32 maxHooksPerOrder) data)",
  "event SplitAccountConfigured(address indexed from, uint256 hooks)",
  "function getEndorsedSplitAccounts() view returns (address[] addresses)",
  "function isEndorsedForSplitAccount(address addr) view returns (bool)",
  "function setEndorsedSplitAccounts(address[] addresses)"
]