/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumberish,
  BytesLike,
  FunctionFragment,
  Result,
  Interface,
  EventFragment,
  AddressLike,
  ContractRunner,
  ContractMethod,
  Listener,
} from "ethers";
import type {
  TypedContractEvent,
  TypedDeferredTopicFilter,
  TypedEventLog,
  TypedLogDescription,
  TypedListener,
  TypedContractMethod,
} from "../../../../common";

export declare namespace IHorizonStakingExtension {
  export type AllocationStruct = {
    indexer: AddressLike;
    subgraphDeploymentID: BytesLike;
    tokens: BigNumberish;
    createdAtEpoch: BigNumberish;
    closedAtEpoch: BigNumberish;
    collectedFees: BigNumberish;
    __DEPRECATED_effectiveAllocation: BigNumberish;
    accRewardsPerAllocatedToken: BigNumberish;
    distributedRebates: BigNumberish;
  };

  export type AllocationStructOutput = [
    indexer: string,
    subgraphDeploymentID: string,
    tokens: bigint,
    createdAtEpoch: bigint,
    closedAtEpoch: bigint,
    collectedFees: bigint,
    __DEPRECATED_effectiveAllocation: bigint,
    accRewardsPerAllocatedToken: bigint,
    distributedRebates: bigint
  ] & {
    indexer: string;
    subgraphDeploymentID: string;
    tokens: bigint;
    createdAtEpoch: bigint;
    closedAtEpoch: bigint;
    collectedFees: bigint;
    __DEPRECATED_effectiveAllocation: bigint;
    accRewardsPerAllocatedToken: bigint;
    distributedRebates: bigint;
  };
}

export declare namespace IHorizonStakingTypes {
  export type DelegationStruct = { shares: BigNumberish };

  export type DelegationStructOutput = [shares: bigint] & { shares: bigint };

  export type DelegationPoolStruct = {
    tokens: BigNumberish;
    shares: BigNumberish;
    tokensThawing: BigNumberish;
    sharesThawing: BigNumberish;
    thawingNonce: BigNumberish;
  };

  export type DelegationPoolStructOutput = [
    tokens: bigint,
    shares: bigint,
    tokensThawing: bigint,
    sharesThawing: bigint,
    thawingNonce: bigint
  ] & {
    tokens: bigint;
    shares: bigint;
    tokensThawing: bigint;
    sharesThawing: bigint;
    thawingNonce: bigint;
  };

  export type ProvisionStruct = {
    tokens: BigNumberish;
    tokensThawing: BigNumberish;
    sharesThawing: BigNumberish;
    maxVerifierCut: BigNumberish;
    thawingPeriod: BigNumberish;
    createdAt: BigNumberish;
    maxVerifierCutPending: BigNumberish;
    thawingPeriodPending: BigNumberish;
    lastParametersStagedAt: BigNumberish;
    thawingNonce: BigNumberish;
  };

  export type ProvisionStructOutput = [
    tokens: bigint,
    tokensThawing: bigint,
    sharesThawing: bigint,
    maxVerifierCut: bigint,
    thawingPeriod: bigint,
    createdAt: bigint,
    maxVerifierCutPending: bigint,
    thawingPeriodPending: bigint,
    lastParametersStagedAt: bigint,
    thawingNonce: bigint
  ] & {
    tokens: bigint;
    tokensThawing: bigint;
    sharesThawing: bigint;
    maxVerifierCut: bigint;
    thawingPeriod: bigint;
    createdAt: bigint;
    maxVerifierCutPending: bigint;
    thawingPeriodPending: bigint;
    lastParametersStagedAt: bigint;
    thawingNonce: bigint;
  };

  export type ServiceProviderStruct = {
    tokensStaked: BigNumberish;
    tokensProvisioned: BigNumberish;
  };

  export type ServiceProviderStructOutput = [
    tokensStaked: bigint,
    tokensProvisioned: bigint
  ] & { tokensStaked: bigint; tokensProvisioned: bigint };

  export type ThawRequestStruct = {
    shares: BigNumberish;
    thawingUntil: BigNumberish;
    nextRequest: BytesLike;
    thawingNonce: BigNumberish;
  };

  export type ThawRequestStructOutput = [
    shares: bigint,
    thawingUntil: bigint,
    nextRequest: string,
    thawingNonce: bigint
  ] & {
    shares: bigint;
    thawingUntil: bigint;
    nextRequest: string;
    thawingNonce: bigint;
  };
}

export declare namespace LinkedList {
  export type ListStruct = {
    head: BytesLike;
    tail: BytesLike;
    nonce: BigNumberish;
    count: BigNumberish;
  };

  export type ListStructOutput = [
    head: string,
    tail: string,
    nonce: bigint,
    count: bigint
  ] & { head: string; tail: string; nonce: bigint; count: bigint };
}

export interface IHorizonStakingInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "__DEPRECATED_getThawingPeriod"
      | "acceptProvisionParameters"
      | "addToDelegationPool"
      | "addToProvision"
      | "clearThawingPeriod"
      | "closeAllocation"
      | "collect"
      | "delegate(address,uint256)"
      | "delegate(address,address,uint256,uint256)"
      | "deprovision"
      | "getAllocation"
      | "getAllocationData"
      | "getAllocationState"
      | "getDelegatedTokensAvailable"
      | "getDelegation"
      | "getDelegationFeeCut"
      | "getDelegationPool"
      | "getIdleStake"
      | "getIndexerStakedTokens"
      | "getMaxThawingPeriod"
      | "getProviderTokensAvailable"
      | "getProvision"
      | "getServiceProvider"
      | "getStake"
      | "getStakingExtension"
      | "getSubgraphAllocatedTokens"
      | "getSubgraphService"
      | "getThawRequest"
      | "getThawRequestList"
      | "getThawedTokens"
      | "getTokensAvailable"
      | "hasStake"
      | "isAllocation"
      | "isAllowedLockedVerifier"
      | "isAuthorized"
      | "isDelegationSlashingEnabled"
      | "isOperator"
      | "legacySlash"
      | "provision"
      | "provisionLocked"
      | "redelegate"
      | "reprovision"
      | "setAllowedLockedVerifier"
      | "setDelegationFeeCut"
      | "setDelegationSlashingEnabled"
      | "setMaxThawingPeriod"
      | "setOperator"
      | "setOperatorLocked"
      | "setProvisionParameters"
      | "slash"
      | "stake"
      | "stakeTo"
      | "stakeToProvision"
      | "thaw"
      | "undelegate(address,uint256)"
      | "undelegate(address,address,uint256)"
      | "unstake"
      | "withdraw"
      | "withdrawDelegated(address,address,uint256)"
      | "withdrawDelegated(address,address)"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "AllocationClosed"
      | "AllowedLockedVerifierSet"
      | "DelegatedTokensWithdrawn"
      | "DelegationFeeCutSet"
      | "DelegationSlashed"
      | "DelegationSlashingEnabled"
      | "DelegationSlashingSkipped"
      | "HorizonStakeDeposited"
      | "HorizonStakeLocked"
      | "HorizonStakeWithdrawn"
      | "MaxThawingPeriodSet"
      | "OperatorSet"
      | "ProvisionCreated"
      | "ProvisionIncreased"
      | "ProvisionParametersSet"
      | "ProvisionParametersStaged"
      | "ProvisionSlashed"
      | "ProvisionThawed"
      | "RebateCollected"
      | "StakeDelegatedWithdrawn"
      | "StakeSlashed"
      | "ThawRequestCreated"
      | "ThawRequestFulfilled"
      | "ThawRequestsFulfilled"
      | "ThawingPeriodCleared"
      | "TokensDelegated"
      | "TokensDeprovisioned"
      | "TokensToDelegationPoolAdded"
      | "TokensUndelegated"
      | "VerifierTokensSent"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "__DEPRECATED_getThawingPeriod",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "acceptProvisionParameters",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "addToDelegationPool",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "addToProvision",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "clearThawingPeriod",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "closeAllocation",
    values: [AddressLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "collect",
    values: [BigNumberish, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "delegate(address,uint256)",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "delegate(address,address,uint256,uint256)",
    values: [AddressLike, AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "deprovision",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getAllocation",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getAllocationData",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getAllocationState",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegatedTokensAvailable",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegation",
    values: [AddressLike, AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegationFeeCut",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegationPool",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getIdleStake",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getIndexerStakedTokens",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getMaxThawingPeriod",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getProviderTokensAvailable",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getProvision",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getServiceProvider",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getStake",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getStakingExtension",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getSubgraphAllocatedTokens",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getSubgraphService",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getThawRequest",
    values: [BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getThawRequestList",
    values: [BigNumberish, AddressLike, AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getThawedTokens",
    values: [BigNumberish, AddressLike, AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getTokensAvailable",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "hasStake",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isAllocation",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isAllowedLockedVerifier",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isAuthorized",
    values: [AddressLike, AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "isDelegationSlashingEnabled",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "isOperator",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "legacySlash",
    values: [AddressLike, BigNumberish, BigNumberish, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "provision",
    values: [AddressLike, AddressLike, BigNumberish, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "provisionLocked",
    values: [AddressLike, AddressLike, BigNumberish, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "redelegate",
    values: [
      AddressLike,
      AddressLike,
      AddressLike,
      AddressLike,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "reprovision",
    values: [AddressLike, AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setAllowedLockedVerifier",
    values: [AddressLike, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationFeeCut",
    values: [AddressLike, AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationSlashingEnabled",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "setMaxThawingPeriod",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setOperator",
    values: [AddressLike, AddressLike, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "setOperatorLocked",
    values: [AddressLike, AddressLike, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "setProvisionParameters",
    values: [AddressLike, AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "slash",
    values: [AddressLike, BigNumberish, BigNumberish, AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "stake", values: [BigNumberish]): string;
  encodeFunctionData(
    functionFragment: "stakeTo",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "stakeToProvision",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "thaw",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "undelegate(address,uint256)",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "undelegate(address,address,uint256)",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "unstake",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "withdraw", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "withdrawDelegated(address,address,uint256)",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawDelegated(address,address)",
    values: [AddressLike, AddressLike]
  ): string;

  decodeFunctionResult(
    functionFragment: "__DEPRECATED_getThawingPeriod",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "acceptProvisionParameters",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addToDelegationPool",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addToProvision",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "clearThawingPeriod",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "closeAllocation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "collect", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "delegate(address,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "delegate(address,address,uint256,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "deprovision",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getAllocation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getAllocationData",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getAllocationState",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegatedTokensAvailable",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegationFeeCut",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegationPool",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getIdleStake",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getIndexerStakedTokens",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getMaxThawingPeriod",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getProviderTokensAvailable",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getProvision",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getServiceProvider",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getStake", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getStakingExtension",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getSubgraphAllocatedTokens",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getSubgraphService",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getThawRequest",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getThawRequestList",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getThawedTokens",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getTokensAvailable",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "hasStake", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isAllocation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isAllowedLockedVerifier",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isAuthorized",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isDelegationSlashingEnabled",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "isOperator", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "legacySlash",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "provision", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "provisionLocked",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "redelegate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "reprovision",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setAllowedLockedVerifier",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationFeeCut",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationSlashingEnabled",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMaxThawingPeriod",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setOperator",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setOperatorLocked",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setProvisionParameters",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "slash", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "stakeTo", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "stakeToProvision",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "thaw", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "undelegate(address,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "undelegate(address,address,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "unstake", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "withdrawDelegated(address,address,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawDelegated(address,address)",
    data: BytesLike
  ): Result;
}

export namespace AllocationClosedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    subgraphDeploymentID: BytesLike,
    epoch: BigNumberish,
    tokens: BigNumberish,
    allocationID: AddressLike,
    sender: AddressLike,
    poi: BytesLike,
    isPublic: boolean
  ];
  export type OutputTuple = [
    indexer: string,
    subgraphDeploymentID: string,
    epoch: bigint,
    tokens: bigint,
    allocationID: string,
    sender: string,
    poi: string,
    isPublic: boolean
  ];
  export interface OutputObject {
    indexer: string;
    subgraphDeploymentID: string;
    epoch: bigint;
    tokens: bigint;
    allocationID: string;
    sender: string;
    poi: string;
    isPublic: boolean;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace AllowedLockedVerifierSetEvent {
  export type InputTuple = [verifier: AddressLike, allowed: boolean];
  export type OutputTuple = [verifier: string, allowed: boolean];
  export interface OutputObject {
    verifier: string;
    allowed: boolean;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace DelegatedTokensWithdrawnEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    delegator: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    delegator: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace DelegationFeeCutSetEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    paymentType: BigNumberish,
    feeCut: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    paymentType: bigint,
    feeCut: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    paymentType: bigint;
    feeCut: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace DelegationSlashedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace DelegationSlashingEnabledEvent {
  export type InputTuple = [];
  export type OutputTuple = [];
  export interface OutputObject {}
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace DelegationSlashingSkippedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace HorizonStakeDepositedEvent {
  export type InputTuple = [serviceProvider: AddressLike, tokens: BigNumberish];
  export type OutputTuple = [serviceProvider: string, tokens: bigint];
  export interface OutputObject {
    serviceProvider: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace HorizonStakeLockedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    tokens: BigNumberish,
    until: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    tokens: bigint,
    until: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    tokens: bigint;
    until: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace HorizonStakeWithdrawnEvent {
  export type InputTuple = [serviceProvider: AddressLike, tokens: BigNumberish];
  export type OutputTuple = [serviceProvider: string, tokens: bigint];
  export interface OutputObject {
    serviceProvider: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace MaxThawingPeriodSetEvent {
  export type InputTuple = [maxThawingPeriod: BigNumberish];
  export type OutputTuple = [maxThawingPeriod: bigint];
  export interface OutputObject {
    maxThawingPeriod: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace OperatorSetEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    operator: AddressLike,
    allowed: boolean
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    operator: string,
    allowed: boolean
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    operator: string;
    allowed: boolean;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionCreatedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish,
    maxVerifierCut: BigNumberish,
    thawingPeriod: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint,
    maxVerifierCut: bigint,
    thawingPeriod: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
    maxVerifierCut: bigint;
    thawingPeriod: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionIncreasedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionParametersSetEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    maxVerifierCut: BigNumberish,
    thawingPeriod: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    maxVerifierCut: bigint,
    thawingPeriod: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    maxVerifierCut: bigint;
    thawingPeriod: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionParametersStagedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    maxVerifierCut: BigNumberish,
    thawingPeriod: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    maxVerifierCut: bigint,
    thawingPeriod: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    maxVerifierCut: bigint;
    thawingPeriod: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionSlashedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ProvisionThawedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace RebateCollectedEvent {
  export type InputTuple = [
    assetHolder: AddressLike,
    indexer: AddressLike,
    subgraphDeploymentID: BytesLike,
    allocationID: AddressLike,
    epoch: BigNumberish,
    tokens: BigNumberish,
    protocolTax: BigNumberish,
    curationFees: BigNumberish,
    queryFees: BigNumberish,
    queryRebates: BigNumberish,
    delegationRewards: BigNumberish
  ];
  export type OutputTuple = [
    assetHolder: string,
    indexer: string,
    subgraphDeploymentID: string,
    allocationID: string,
    epoch: bigint,
    tokens: bigint,
    protocolTax: bigint,
    curationFees: bigint,
    queryFees: bigint,
    queryRebates: bigint,
    delegationRewards: bigint
  ];
  export interface OutputObject {
    assetHolder: string;
    indexer: string;
    subgraphDeploymentID: string;
    allocationID: string;
    epoch: bigint;
    tokens: bigint;
    protocolTax: bigint;
    curationFees: bigint;
    queryFees: bigint;
    queryRebates: bigint;
    delegationRewards: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace StakeDelegatedWithdrawnEvent {
  export type InputTuple = [
    indexer: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    indexer: string,
    delegator: string,
    tokens: bigint
  ];
  export interface OutputObject {
    indexer: string;
    delegator: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace StakeSlashedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    tokens: BigNumberish,
    reward: BigNumberish,
    beneficiary: AddressLike
  ];
  export type OutputTuple = [
    indexer: string,
    tokens: bigint,
    reward: bigint,
    beneficiary: string
  ];
  export interface OutputObject {
    indexer: string;
    tokens: bigint;
    reward: bigint;
    beneficiary: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ThawRequestCreatedEvent {
  export type InputTuple = [
    requestType: BigNumberish,
    serviceProvider: AddressLike,
    verifier: AddressLike,
    owner: AddressLike,
    shares: BigNumberish,
    thawingUntil: BigNumberish,
    thawRequestId: BytesLike,
    nonce: BigNumberish
  ];
  export type OutputTuple = [
    requestType: bigint,
    serviceProvider: string,
    verifier: string,
    owner: string,
    shares: bigint,
    thawingUntil: bigint,
    thawRequestId: string,
    nonce: bigint
  ];
  export interface OutputObject {
    requestType: bigint;
    serviceProvider: string;
    verifier: string;
    owner: string;
    shares: bigint;
    thawingUntil: bigint;
    thawRequestId: string;
    nonce: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ThawRequestFulfilledEvent {
  export type InputTuple = [
    requestType: BigNumberish,
    thawRequestId: BytesLike,
    tokens: BigNumberish,
    shares: BigNumberish,
    thawingUntil: BigNumberish,
    valid: boolean
  ];
  export type OutputTuple = [
    requestType: bigint,
    thawRequestId: string,
    tokens: bigint,
    shares: bigint,
    thawingUntil: bigint,
    valid: boolean
  ];
  export interface OutputObject {
    requestType: bigint;
    thawRequestId: string;
    tokens: bigint;
    shares: bigint;
    thawingUntil: bigint;
    valid: boolean;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ThawRequestsFulfilledEvent {
  export type InputTuple = [
    requestType: BigNumberish,
    serviceProvider: AddressLike,
    verifier: AddressLike,
    owner: AddressLike,
    thawRequestsFulfilled: BigNumberish,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    requestType: bigint,
    serviceProvider: string,
    verifier: string,
    owner: string,
    thawRequestsFulfilled: bigint,
    tokens: bigint
  ];
  export interface OutputObject {
    requestType: bigint;
    serviceProvider: string;
    verifier: string;
    owner: string;
    thawRequestsFulfilled: bigint;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace ThawingPeriodClearedEvent {
  export type InputTuple = [];
  export type OutputTuple = [];
  export interface OutputObject {}
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace TokensDelegatedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish,
    shares: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    delegator: string,
    tokens: bigint,
    shares: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    delegator: string;
    tokens: bigint;
    shares: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace TokensDeprovisionedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace TokensToDelegationPoolAddedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace TokensUndelegatedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish,
    shares: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    delegator: string,
    tokens: bigint,
    shares: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    delegator: string;
    tokens: bigint;
    shares: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace VerifierTokensSentEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    verifier: AddressLike,
    destination: AddressLike,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    verifier: string,
    destination: string,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    verifier: string;
    destination: string;
    tokens: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export interface IHorizonStaking extends BaseContract {
  connect(runner?: ContractRunner | null): IHorizonStaking;
  waitForDeployment(): Promise<this>;

  interface: IHorizonStakingInterface;

  queryFilter<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEventLog<TCEvent>>>;
  queryFilter<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEventLog<TCEvent>>>;

  on<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    listener: TypedListener<TCEvent>
  ): Promise<this>;
  on<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>
  ): Promise<this>;

  once<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    listener: TypedListener<TCEvent>
  ): Promise<this>;
  once<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>
  ): Promise<this>;

  listeners<TCEvent extends TypedContractEvent>(
    event: TCEvent
  ): Promise<Array<TypedListener<TCEvent>>>;
  listeners(eventName?: string): Promise<Array<Listener>>;
  removeAllListeners<TCEvent extends TypedContractEvent>(
    event?: TCEvent
  ): Promise<this>;

  __DEPRECATED_getThawingPeriod: TypedContractMethod<[], [bigint], "view">;

  acceptProvisionParameters: TypedContractMethod<
    [serviceProvider: AddressLike],
    [void],
    "nonpayable"
  >;

  addToDelegationPool: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  addToProvision: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  clearThawingPeriod: TypedContractMethod<[], [void], "nonpayable">;

  closeAllocation: TypedContractMethod<
    [allocationID: AddressLike, poi: BytesLike],
    [void],
    "nonpayable"
  >;

  collect: TypedContractMethod<
    [tokens: BigNumberish, allocationID: AddressLike],
    [void],
    "nonpayable"
  >;

  "delegate(address,uint256)": TypedContractMethod<
    [serviceProvider: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  "delegate(address,address,uint256,uint256)": TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      minSharesOut: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  deprovision: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  getAllocation: TypedContractMethod<
    [allocationID: AddressLike],
    [IHorizonStakingExtension.AllocationStructOutput],
    "view"
  >;

  getAllocationData: TypedContractMethod<
    [allocationId: AddressLike],
    [
      [boolean, string, string, bigint, bigint, bigint] & {
        isActive: boolean;
        indexer: string;
        subgraphDeploymentId: string;
        tokens: bigint;
        accRewardsPerAllocatedToken: bigint;
        accRewardsPending: bigint;
      }
    ],
    "view"
  >;

  getAllocationState: TypedContractMethod<
    [allocationID: AddressLike],
    [bigint],
    "view"
  >;

  getDelegatedTokensAvailable: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    "view"
  >;

  getDelegation: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      delegator: AddressLike
    ],
    [IHorizonStakingTypes.DelegationStructOutput],
    "view"
  >;

  getDelegationFeeCut: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      paymentType: BigNumberish
    ],
    [bigint],
    "view"
  >;

  getDelegationPool: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.DelegationPoolStructOutput],
    "view"
  >;

  getIdleStake: TypedContractMethod<
    [serviceProvider: AddressLike],
    [bigint],
    "view"
  >;

  getIndexerStakedTokens: TypedContractMethod<
    [indexer: AddressLike],
    [bigint],
    "view"
  >;

  getMaxThawingPeriod: TypedContractMethod<[], [bigint], "view">;

  getProviderTokensAvailable: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    "view"
  >;

  getProvision: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.ProvisionStructOutput],
    "view"
  >;

  getServiceProvider: TypedContractMethod<
    [serviceProvider: AddressLike],
    [IHorizonStakingTypes.ServiceProviderStructOutput],
    "view"
  >;

  getStake: TypedContractMethod<
    [serviceProvider: AddressLike],
    [bigint],
    "view"
  >;

  getStakingExtension: TypedContractMethod<[], [string], "view">;

  getSubgraphAllocatedTokens: TypedContractMethod<
    [_subgraphDeploymentId: BytesLike],
    [bigint],
    "view"
  >;

  getSubgraphService: TypedContractMethod<[], [string], "view">;

  getThawRequest: TypedContractMethod<
    [thawRequestType: BigNumberish, thawRequestId: BytesLike],
    [IHorizonStakingTypes.ThawRequestStructOutput],
    "view"
  >;

  getThawRequestList: TypedContractMethod<
    [
      thawRequestType: BigNumberish,
      serviceProvider: AddressLike,
      verifier: AddressLike,
      owner: AddressLike
    ],
    [LinkedList.ListStructOutput],
    "view"
  >;

  getThawedTokens: TypedContractMethod<
    [
      thawRequestType: BigNumberish,
      serviceProvider: AddressLike,
      verifier: AddressLike,
      owner: AddressLike
    ],
    [bigint],
    "view"
  >;

  getTokensAvailable: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      delegationRatio: BigNumberish
    ],
    [bigint],
    "view"
  >;

  hasStake: TypedContractMethod<[indexer: AddressLike], [boolean], "view">;

  isAllocation: TypedContractMethod<
    [allocationID: AddressLike],
    [boolean],
    "view"
  >;

  isAllowedLockedVerifier: TypedContractMethod<
    [verifier: AddressLike],
    [boolean],
    "view"
  >;

  isAuthorized: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      operator: AddressLike
    ],
    [boolean],
    "view"
  >;

  isDelegationSlashingEnabled: TypedContractMethod<[], [boolean], "view">;

  isOperator: TypedContractMethod<
    [operator: AddressLike, indexer: AddressLike],
    [boolean],
    "view"
  >;

  legacySlash: TypedContractMethod<
    [
      indexer: AddressLike,
      tokens: BigNumberish,
      reward: BigNumberish,
      beneficiary: AddressLike
    ],
    [void],
    "nonpayable"
  >;

  provision: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  provisionLocked: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  redelegate: TypedContractMethod<
    [
      oldServiceProvider: AddressLike,
      oldVerifier: AddressLike,
      newServiceProvider: AddressLike,
      newVerifier: AddressLike,
      minSharesForNewProvider: BigNumberish,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  reprovision: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      oldVerifier: AddressLike,
      newVerifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  setAllowedLockedVerifier: TypedContractMethod<
    [verifier: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;

  setDelegationFeeCut: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      paymentType: BigNumberish,
      feeCut: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  setDelegationSlashingEnabled: TypedContractMethod<[], [void], "nonpayable">;

  setMaxThawingPeriod: TypedContractMethod<
    [maxThawingPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;

  setOperator: TypedContractMethod<
    [verifier: AddressLike, operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;

  setOperatorLocked: TypedContractMethod<
    [verifier: AddressLike, operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;

  setProvisionParameters: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  slash: TypedContractMethod<
    [
      serviceProvider: AddressLike,
      tokens: BigNumberish,
      tokensVerifier: BigNumberish,
      verifierDestination: AddressLike
    ],
    [void],
    "nonpayable"
  >;

  stake: TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;

  stakeTo: TypedContractMethod<
    [serviceProvider: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  stakeToProvision: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  thaw: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [string],
    "nonpayable"
  >;

  "undelegate(address,uint256)": TypedContractMethod<
    [serviceProvider: AddressLike, shares: BigNumberish],
    [void],
    "nonpayable"
  >;

  "undelegate(address,address,uint256)": TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, shares: BigNumberish],
    [string],
    "nonpayable"
  >;

  unstake: TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;

  withdraw: TypedContractMethod<[], [void], "nonpayable">;

  "withdrawDelegated(address,address,uint256)": TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  "withdrawDelegated(address,address)": TypedContractMethod<
    [serviceProvider: AddressLike, deprecated: AddressLike],
    [bigint],
    "nonpayable"
  >;

  getFunction<T extends ContractMethod = ContractMethod>(
    key: string | FunctionFragment
  ): T;

  getFunction(
    nameOrSignature: "__DEPRECATED_getThawingPeriod"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "acceptProvisionParameters"
  ): TypedContractMethod<[serviceProvider: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "addToDelegationPool"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "addToProvision"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "clearThawingPeriod"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "closeAllocation"
  ): TypedContractMethod<
    [allocationID: AddressLike, poi: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "collect"
  ): TypedContractMethod<
    [tokens: BigNumberish, allocationID: AddressLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "delegate(address,uint256)"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "delegate(address,address,uint256,uint256)"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      minSharesOut: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "deprovision"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "getAllocation"
  ): TypedContractMethod<
    [allocationID: AddressLike],
    [IHorizonStakingExtension.AllocationStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getAllocationData"
  ): TypedContractMethod<
    [allocationId: AddressLike],
    [
      [boolean, string, string, bigint, bigint, bigint] & {
        isActive: boolean;
        indexer: string;
        subgraphDeploymentId: string;
        tokens: bigint;
        accRewardsPerAllocatedToken: bigint;
        accRewardsPending: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "getAllocationState"
  ): TypedContractMethod<[allocationID: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getDelegatedTokensAvailable"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "getDelegation"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      delegator: AddressLike
    ],
    [IHorizonStakingTypes.DelegationStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getDelegationFeeCut"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      paymentType: BigNumberish
    ],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "getDelegationPool"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.DelegationPoolStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getIdleStake"
  ): TypedContractMethod<[serviceProvider: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getIndexerStakedTokens"
  ): TypedContractMethod<[indexer: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getMaxThawingPeriod"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "getProviderTokensAvailable"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "getProvision"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.ProvisionStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getServiceProvider"
  ): TypedContractMethod<
    [serviceProvider: AddressLike],
    [IHorizonStakingTypes.ServiceProviderStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getStake"
  ): TypedContractMethod<[serviceProvider: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getStakingExtension"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "getSubgraphAllocatedTokens"
  ): TypedContractMethod<[_subgraphDeploymentId: BytesLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getSubgraphService"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "getThawRequest"
  ): TypedContractMethod<
    [thawRequestType: BigNumberish, thawRequestId: BytesLike],
    [IHorizonStakingTypes.ThawRequestStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getThawRequestList"
  ): TypedContractMethod<
    [
      thawRequestType: BigNumberish,
      serviceProvider: AddressLike,
      verifier: AddressLike,
      owner: AddressLike
    ],
    [LinkedList.ListStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getThawedTokens"
  ): TypedContractMethod<
    [
      thawRequestType: BigNumberish,
      serviceProvider: AddressLike,
      verifier: AddressLike,
      owner: AddressLike
    ],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "getTokensAvailable"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      delegationRatio: BigNumberish
    ],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "hasStake"
  ): TypedContractMethod<[indexer: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isAllocation"
  ): TypedContractMethod<[allocationID: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isAllowedLockedVerifier"
  ): TypedContractMethod<[verifier: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isAuthorized"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      operator: AddressLike
    ],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "isDelegationSlashingEnabled"
  ): TypedContractMethod<[], [boolean], "view">;
  getFunction(
    nameOrSignature: "isOperator"
  ): TypedContractMethod<
    [operator: AddressLike, indexer: AddressLike],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "legacySlash"
  ): TypedContractMethod<
    [
      indexer: AddressLike,
      tokens: BigNumberish,
      reward: BigNumberish,
      beneficiary: AddressLike
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "provision"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "provisionLocked"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      tokens: BigNumberish,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "redelegate"
  ): TypedContractMethod<
    [
      oldServiceProvider: AddressLike,
      oldVerifier: AddressLike,
      newServiceProvider: AddressLike,
      newVerifier: AddressLike,
      minSharesForNewProvider: BigNumberish,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "reprovision"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      oldVerifier: AddressLike,
      newVerifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setAllowedLockedVerifier"
  ): TypedContractMethod<
    [verifier: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setDelegationFeeCut"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      paymentType: BigNumberish,
      feeCut: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setDelegationSlashingEnabled"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setMaxThawingPeriod"
  ): TypedContractMethod<
    [maxThawingPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setOperator"
  ): TypedContractMethod<
    [verifier: AddressLike, operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setOperatorLocked"
  ): TypedContractMethod<
    [verifier: AddressLike, operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setProvisionParameters"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      maxVerifierCut: BigNumberish,
      thawingPeriod: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "slash"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      tokens: BigNumberish,
      tokensVerifier: BigNumberish,
      verifierDestination: AddressLike
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "stake"
  ): TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "stakeTo"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "stakeToProvision"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "thaw"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, tokens: BigNumberish],
    [string],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "undelegate(address,uint256)"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, shares: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "undelegate(address,address,uint256)"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, shares: BigNumberish],
    [string],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "unstake"
  ): TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "withdraw"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "withdrawDelegated(address,address,uint256)"
  ): TypedContractMethod<
    [
      serviceProvider: AddressLike,
      verifier: AddressLike,
      nThawRequests: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "withdrawDelegated(address,address)"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, deprecated: AddressLike],
    [bigint],
    "nonpayable"
  >;

  getEvent(
    key: "AllocationClosed"
  ): TypedContractEvent<
    AllocationClosedEvent.InputTuple,
    AllocationClosedEvent.OutputTuple,
    AllocationClosedEvent.OutputObject
  >;
  getEvent(
    key: "AllowedLockedVerifierSet"
  ): TypedContractEvent<
    AllowedLockedVerifierSetEvent.InputTuple,
    AllowedLockedVerifierSetEvent.OutputTuple,
    AllowedLockedVerifierSetEvent.OutputObject
  >;
  getEvent(
    key: "DelegatedTokensWithdrawn"
  ): TypedContractEvent<
    DelegatedTokensWithdrawnEvent.InputTuple,
    DelegatedTokensWithdrawnEvent.OutputTuple,
    DelegatedTokensWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "DelegationFeeCutSet"
  ): TypedContractEvent<
    DelegationFeeCutSetEvent.InputTuple,
    DelegationFeeCutSetEvent.OutputTuple,
    DelegationFeeCutSetEvent.OutputObject
  >;
  getEvent(
    key: "DelegationSlashed"
  ): TypedContractEvent<
    DelegationSlashedEvent.InputTuple,
    DelegationSlashedEvent.OutputTuple,
    DelegationSlashedEvent.OutputObject
  >;
  getEvent(
    key: "DelegationSlashingEnabled"
  ): TypedContractEvent<
    DelegationSlashingEnabledEvent.InputTuple,
    DelegationSlashingEnabledEvent.OutputTuple,
    DelegationSlashingEnabledEvent.OutputObject
  >;
  getEvent(
    key: "DelegationSlashingSkipped"
  ): TypedContractEvent<
    DelegationSlashingSkippedEvent.InputTuple,
    DelegationSlashingSkippedEvent.OutputTuple,
    DelegationSlashingSkippedEvent.OutputObject
  >;
  getEvent(
    key: "HorizonStakeDeposited"
  ): TypedContractEvent<
    HorizonStakeDepositedEvent.InputTuple,
    HorizonStakeDepositedEvent.OutputTuple,
    HorizonStakeDepositedEvent.OutputObject
  >;
  getEvent(
    key: "HorizonStakeLocked"
  ): TypedContractEvent<
    HorizonStakeLockedEvent.InputTuple,
    HorizonStakeLockedEvent.OutputTuple,
    HorizonStakeLockedEvent.OutputObject
  >;
  getEvent(
    key: "HorizonStakeWithdrawn"
  ): TypedContractEvent<
    HorizonStakeWithdrawnEvent.InputTuple,
    HorizonStakeWithdrawnEvent.OutputTuple,
    HorizonStakeWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "MaxThawingPeriodSet"
  ): TypedContractEvent<
    MaxThawingPeriodSetEvent.InputTuple,
    MaxThawingPeriodSetEvent.OutputTuple,
    MaxThawingPeriodSetEvent.OutputObject
  >;
  getEvent(
    key: "OperatorSet"
  ): TypedContractEvent<
    OperatorSetEvent.InputTuple,
    OperatorSetEvent.OutputTuple,
    OperatorSetEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionCreated"
  ): TypedContractEvent<
    ProvisionCreatedEvent.InputTuple,
    ProvisionCreatedEvent.OutputTuple,
    ProvisionCreatedEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionIncreased"
  ): TypedContractEvent<
    ProvisionIncreasedEvent.InputTuple,
    ProvisionIncreasedEvent.OutputTuple,
    ProvisionIncreasedEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionParametersSet"
  ): TypedContractEvent<
    ProvisionParametersSetEvent.InputTuple,
    ProvisionParametersSetEvent.OutputTuple,
    ProvisionParametersSetEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionParametersStaged"
  ): TypedContractEvent<
    ProvisionParametersStagedEvent.InputTuple,
    ProvisionParametersStagedEvent.OutputTuple,
    ProvisionParametersStagedEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionSlashed"
  ): TypedContractEvent<
    ProvisionSlashedEvent.InputTuple,
    ProvisionSlashedEvent.OutputTuple,
    ProvisionSlashedEvent.OutputObject
  >;
  getEvent(
    key: "ProvisionThawed"
  ): TypedContractEvent<
    ProvisionThawedEvent.InputTuple,
    ProvisionThawedEvent.OutputTuple,
    ProvisionThawedEvent.OutputObject
  >;
  getEvent(
    key: "RebateCollected"
  ): TypedContractEvent<
    RebateCollectedEvent.InputTuple,
    RebateCollectedEvent.OutputTuple,
    RebateCollectedEvent.OutputObject
  >;
  getEvent(
    key: "StakeDelegatedWithdrawn"
  ): TypedContractEvent<
    StakeDelegatedWithdrawnEvent.InputTuple,
    StakeDelegatedWithdrawnEvent.OutputTuple,
    StakeDelegatedWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "StakeSlashed"
  ): TypedContractEvent<
    StakeSlashedEvent.InputTuple,
    StakeSlashedEvent.OutputTuple,
    StakeSlashedEvent.OutputObject
  >;
  getEvent(
    key: "ThawRequestCreated"
  ): TypedContractEvent<
    ThawRequestCreatedEvent.InputTuple,
    ThawRequestCreatedEvent.OutputTuple,
    ThawRequestCreatedEvent.OutputObject
  >;
  getEvent(
    key: "ThawRequestFulfilled"
  ): TypedContractEvent<
    ThawRequestFulfilledEvent.InputTuple,
    ThawRequestFulfilledEvent.OutputTuple,
    ThawRequestFulfilledEvent.OutputObject
  >;
  getEvent(
    key: "ThawRequestsFulfilled"
  ): TypedContractEvent<
    ThawRequestsFulfilledEvent.InputTuple,
    ThawRequestsFulfilledEvent.OutputTuple,
    ThawRequestsFulfilledEvent.OutputObject
  >;
  getEvent(
    key: "ThawingPeriodCleared"
  ): TypedContractEvent<
    ThawingPeriodClearedEvent.InputTuple,
    ThawingPeriodClearedEvent.OutputTuple,
    ThawingPeriodClearedEvent.OutputObject
  >;
  getEvent(
    key: "TokensDelegated"
  ): TypedContractEvent<
    TokensDelegatedEvent.InputTuple,
    TokensDelegatedEvent.OutputTuple,
    TokensDelegatedEvent.OutputObject
  >;
  getEvent(
    key: "TokensDeprovisioned"
  ): TypedContractEvent<
    TokensDeprovisionedEvent.InputTuple,
    TokensDeprovisionedEvent.OutputTuple,
    TokensDeprovisionedEvent.OutputObject
  >;
  getEvent(
    key: "TokensToDelegationPoolAdded"
  ): TypedContractEvent<
    TokensToDelegationPoolAddedEvent.InputTuple,
    TokensToDelegationPoolAddedEvent.OutputTuple,
    TokensToDelegationPoolAddedEvent.OutputObject
  >;
  getEvent(
    key: "TokensUndelegated"
  ): TypedContractEvent<
    TokensUndelegatedEvent.InputTuple,
    TokensUndelegatedEvent.OutputTuple,
    TokensUndelegatedEvent.OutputObject
  >;
  getEvent(
    key: "VerifierTokensSent"
  ): TypedContractEvent<
    VerifierTokensSentEvent.InputTuple,
    VerifierTokensSentEvent.OutputTuple,
    VerifierTokensSentEvent.OutputObject
  >;

  filters: {
    "AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)": TypedContractEvent<
      AllocationClosedEvent.InputTuple,
      AllocationClosedEvent.OutputTuple,
      AllocationClosedEvent.OutputObject
    >;
    AllocationClosed: TypedContractEvent<
      AllocationClosedEvent.InputTuple,
      AllocationClosedEvent.OutputTuple,
      AllocationClosedEvent.OutputObject
    >;

    "AllowedLockedVerifierSet(address,bool)": TypedContractEvent<
      AllowedLockedVerifierSetEvent.InputTuple,
      AllowedLockedVerifierSetEvent.OutputTuple,
      AllowedLockedVerifierSetEvent.OutputObject
    >;
    AllowedLockedVerifierSet: TypedContractEvent<
      AllowedLockedVerifierSetEvent.InputTuple,
      AllowedLockedVerifierSetEvent.OutputTuple,
      AllowedLockedVerifierSetEvent.OutputObject
    >;

    "DelegatedTokensWithdrawn(address,address,address,uint256)": TypedContractEvent<
      DelegatedTokensWithdrawnEvent.InputTuple,
      DelegatedTokensWithdrawnEvent.OutputTuple,
      DelegatedTokensWithdrawnEvent.OutputObject
    >;
    DelegatedTokensWithdrawn: TypedContractEvent<
      DelegatedTokensWithdrawnEvent.InputTuple,
      DelegatedTokensWithdrawnEvent.OutputTuple,
      DelegatedTokensWithdrawnEvent.OutputObject
    >;

    "DelegationFeeCutSet(address,address,uint8,uint256)": TypedContractEvent<
      DelegationFeeCutSetEvent.InputTuple,
      DelegationFeeCutSetEvent.OutputTuple,
      DelegationFeeCutSetEvent.OutputObject
    >;
    DelegationFeeCutSet: TypedContractEvent<
      DelegationFeeCutSetEvent.InputTuple,
      DelegationFeeCutSetEvent.OutputTuple,
      DelegationFeeCutSetEvent.OutputObject
    >;

    "DelegationSlashed(address,address,uint256)": TypedContractEvent<
      DelegationSlashedEvent.InputTuple,
      DelegationSlashedEvent.OutputTuple,
      DelegationSlashedEvent.OutputObject
    >;
    DelegationSlashed: TypedContractEvent<
      DelegationSlashedEvent.InputTuple,
      DelegationSlashedEvent.OutputTuple,
      DelegationSlashedEvent.OutputObject
    >;

    "DelegationSlashingEnabled()": TypedContractEvent<
      DelegationSlashingEnabledEvent.InputTuple,
      DelegationSlashingEnabledEvent.OutputTuple,
      DelegationSlashingEnabledEvent.OutputObject
    >;
    DelegationSlashingEnabled: TypedContractEvent<
      DelegationSlashingEnabledEvent.InputTuple,
      DelegationSlashingEnabledEvent.OutputTuple,
      DelegationSlashingEnabledEvent.OutputObject
    >;

    "DelegationSlashingSkipped(address,address,uint256)": TypedContractEvent<
      DelegationSlashingSkippedEvent.InputTuple,
      DelegationSlashingSkippedEvent.OutputTuple,
      DelegationSlashingSkippedEvent.OutputObject
    >;
    DelegationSlashingSkipped: TypedContractEvent<
      DelegationSlashingSkippedEvent.InputTuple,
      DelegationSlashingSkippedEvent.OutputTuple,
      DelegationSlashingSkippedEvent.OutputObject
    >;

    "HorizonStakeDeposited(address,uint256)": TypedContractEvent<
      HorizonStakeDepositedEvent.InputTuple,
      HorizonStakeDepositedEvent.OutputTuple,
      HorizonStakeDepositedEvent.OutputObject
    >;
    HorizonStakeDeposited: TypedContractEvent<
      HorizonStakeDepositedEvent.InputTuple,
      HorizonStakeDepositedEvent.OutputTuple,
      HorizonStakeDepositedEvent.OutputObject
    >;

    "HorizonStakeLocked(address,uint256,uint256)": TypedContractEvent<
      HorizonStakeLockedEvent.InputTuple,
      HorizonStakeLockedEvent.OutputTuple,
      HorizonStakeLockedEvent.OutputObject
    >;
    HorizonStakeLocked: TypedContractEvent<
      HorizonStakeLockedEvent.InputTuple,
      HorizonStakeLockedEvent.OutputTuple,
      HorizonStakeLockedEvent.OutputObject
    >;

    "HorizonStakeWithdrawn(address,uint256)": TypedContractEvent<
      HorizonStakeWithdrawnEvent.InputTuple,
      HorizonStakeWithdrawnEvent.OutputTuple,
      HorizonStakeWithdrawnEvent.OutputObject
    >;
    HorizonStakeWithdrawn: TypedContractEvent<
      HorizonStakeWithdrawnEvent.InputTuple,
      HorizonStakeWithdrawnEvent.OutputTuple,
      HorizonStakeWithdrawnEvent.OutputObject
    >;

    "MaxThawingPeriodSet(uint64)": TypedContractEvent<
      MaxThawingPeriodSetEvent.InputTuple,
      MaxThawingPeriodSetEvent.OutputTuple,
      MaxThawingPeriodSetEvent.OutputObject
    >;
    MaxThawingPeriodSet: TypedContractEvent<
      MaxThawingPeriodSetEvent.InputTuple,
      MaxThawingPeriodSetEvent.OutputTuple,
      MaxThawingPeriodSetEvent.OutputObject
    >;

    "OperatorSet(address,address,address,bool)": TypedContractEvent<
      OperatorSetEvent.InputTuple,
      OperatorSetEvent.OutputTuple,
      OperatorSetEvent.OutputObject
    >;
    OperatorSet: TypedContractEvent<
      OperatorSetEvent.InputTuple,
      OperatorSetEvent.OutputTuple,
      OperatorSetEvent.OutputObject
    >;

    "ProvisionCreated(address,address,uint256,uint32,uint64)": TypedContractEvent<
      ProvisionCreatedEvent.InputTuple,
      ProvisionCreatedEvent.OutputTuple,
      ProvisionCreatedEvent.OutputObject
    >;
    ProvisionCreated: TypedContractEvent<
      ProvisionCreatedEvent.InputTuple,
      ProvisionCreatedEvent.OutputTuple,
      ProvisionCreatedEvent.OutputObject
    >;

    "ProvisionIncreased(address,address,uint256)": TypedContractEvent<
      ProvisionIncreasedEvent.InputTuple,
      ProvisionIncreasedEvent.OutputTuple,
      ProvisionIncreasedEvent.OutputObject
    >;
    ProvisionIncreased: TypedContractEvent<
      ProvisionIncreasedEvent.InputTuple,
      ProvisionIncreasedEvent.OutputTuple,
      ProvisionIncreasedEvent.OutputObject
    >;

    "ProvisionParametersSet(address,address,uint32,uint64)": TypedContractEvent<
      ProvisionParametersSetEvent.InputTuple,
      ProvisionParametersSetEvent.OutputTuple,
      ProvisionParametersSetEvent.OutputObject
    >;
    ProvisionParametersSet: TypedContractEvent<
      ProvisionParametersSetEvent.InputTuple,
      ProvisionParametersSetEvent.OutputTuple,
      ProvisionParametersSetEvent.OutputObject
    >;

    "ProvisionParametersStaged(address,address,uint32,uint64)": TypedContractEvent<
      ProvisionParametersStagedEvent.InputTuple,
      ProvisionParametersStagedEvent.OutputTuple,
      ProvisionParametersStagedEvent.OutputObject
    >;
    ProvisionParametersStaged: TypedContractEvent<
      ProvisionParametersStagedEvent.InputTuple,
      ProvisionParametersStagedEvent.OutputTuple,
      ProvisionParametersStagedEvent.OutputObject
    >;

    "ProvisionSlashed(address,address,uint256)": TypedContractEvent<
      ProvisionSlashedEvent.InputTuple,
      ProvisionSlashedEvent.OutputTuple,
      ProvisionSlashedEvent.OutputObject
    >;
    ProvisionSlashed: TypedContractEvent<
      ProvisionSlashedEvent.InputTuple,
      ProvisionSlashedEvent.OutputTuple,
      ProvisionSlashedEvent.OutputObject
    >;

    "ProvisionThawed(address,address,uint256)": TypedContractEvent<
      ProvisionThawedEvent.InputTuple,
      ProvisionThawedEvent.OutputTuple,
      ProvisionThawedEvent.OutputObject
    >;
    ProvisionThawed: TypedContractEvent<
      ProvisionThawedEvent.InputTuple,
      ProvisionThawedEvent.OutputTuple,
      ProvisionThawedEvent.OutputObject
    >;

    "RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)": TypedContractEvent<
      RebateCollectedEvent.InputTuple,
      RebateCollectedEvent.OutputTuple,
      RebateCollectedEvent.OutputObject
    >;
    RebateCollected: TypedContractEvent<
      RebateCollectedEvent.InputTuple,
      RebateCollectedEvent.OutputTuple,
      RebateCollectedEvent.OutputObject
    >;

    "StakeDelegatedWithdrawn(address,address,uint256)": TypedContractEvent<
      StakeDelegatedWithdrawnEvent.InputTuple,
      StakeDelegatedWithdrawnEvent.OutputTuple,
      StakeDelegatedWithdrawnEvent.OutputObject
    >;
    StakeDelegatedWithdrawn: TypedContractEvent<
      StakeDelegatedWithdrawnEvent.InputTuple,
      StakeDelegatedWithdrawnEvent.OutputTuple,
      StakeDelegatedWithdrawnEvent.OutputObject
    >;

    "StakeSlashed(address,uint256,uint256,address)": TypedContractEvent<
      StakeSlashedEvent.InputTuple,
      StakeSlashedEvent.OutputTuple,
      StakeSlashedEvent.OutputObject
    >;
    StakeSlashed: TypedContractEvent<
      StakeSlashedEvent.InputTuple,
      StakeSlashedEvent.OutputTuple,
      StakeSlashedEvent.OutputObject
    >;

    "ThawRequestCreated(uint8,address,address,address,uint256,uint64,bytes32,uint256)": TypedContractEvent<
      ThawRequestCreatedEvent.InputTuple,
      ThawRequestCreatedEvent.OutputTuple,
      ThawRequestCreatedEvent.OutputObject
    >;
    ThawRequestCreated: TypedContractEvent<
      ThawRequestCreatedEvent.InputTuple,
      ThawRequestCreatedEvent.OutputTuple,
      ThawRequestCreatedEvent.OutputObject
    >;

    "ThawRequestFulfilled(uint8,bytes32,uint256,uint256,uint64,bool)": TypedContractEvent<
      ThawRequestFulfilledEvent.InputTuple,
      ThawRequestFulfilledEvent.OutputTuple,
      ThawRequestFulfilledEvent.OutputObject
    >;
    ThawRequestFulfilled: TypedContractEvent<
      ThawRequestFulfilledEvent.InputTuple,
      ThawRequestFulfilledEvent.OutputTuple,
      ThawRequestFulfilledEvent.OutputObject
    >;

    "ThawRequestsFulfilled(uint8,address,address,address,uint256,uint256)": TypedContractEvent<
      ThawRequestsFulfilledEvent.InputTuple,
      ThawRequestsFulfilledEvent.OutputTuple,
      ThawRequestsFulfilledEvent.OutputObject
    >;
    ThawRequestsFulfilled: TypedContractEvent<
      ThawRequestsFulfilledEvent.InputTuple,
      ThawRequestsFulfilledEvent.OutputTuple,
      ThawRequestsFulfilledEvent.OutputObject
    >;

    "ThawingPeriodCleared()": TypedContractEvent<
      ThawingPeriodClearedEvent.InputTuple,
      ThawingPeriodClearedEvent.OutputTuple,
      ThawingPeriodClearedEvent.OutputObject
    >;
    ThawingPeriodCleared: TypedContractEvent<
      ThawingPeriodClearedEvent.InputTuple,
      ThawingPeriodClearedEvent.OutputTuple,
      ThawingPeriodClearedEvent.OutputObject
    >;

    "TokensDelegated(address,address,address,uint256,uint256)": TypedContractEvent<
      TokensDelegatedEvent.InputTuple,
      TokensDelegatedEvent.OutputTuple,
      TokensDelegatedEvent.OutputObject
    >;
    TokensDelegated: TypedContractEvent<
      TokensDelegatedEvent.InputTuple,
      TokensDelegatedEvent.OutputTuple,
      TokensDelegatedEvent.OutputObject
    >;

    "TokensDeprovisioned(address,address,uint256)": TypedContractEvent<
      TokensDeprovisionedEvent.InputTuple,
      TokensDeprovisionedEvent.OutputTuple,
      TokensDeprovisionedEvent.OutputObject
    >;
    TokensDeprovisioned: TypedContractEvent<
      TokensDeprovisionedEvent.InputTuple,
      TokensDeprovisionedEvent.OutputTuple,
      TokensDeprovisionedEvent.OutputObject
    >;

    "TokensToDelegationPoolAdded(address,address,uint256)": TypedContractEvent<
      TokensToDelegationPoolAddedEvent.InputTuple,
      TokensToDelegationPoolAddedEvent.OutputTuple,
      TokensToDelegationPoolAddedEvent.OutputObject
    >;
    TokensToDelegationPoolAdded: TypedContractEvent<
      TokensToDelegationPoolAddedEvent.InputTuple,
      TokensToDelegationPoolAddedEvent.OutputTuple,
      TokensToDelegationPoolAddedEvent.OutputObject
    >;

    "TokensUndelegated(address,address,address,uint256,uint256)": TypedContractEvent<
      TokensUndelegatedEvent.InputTuple,
      TokensUndelegatedEvent.OutputTuple,
      TokensUndelegatedEvent.OutputObject
    >;
    TokensUndelegated: TypedContractEvent<
      TokensUndelegatedEvent.InputTuple,
      TokensUndelegatedEvent.OutputTuple,
      TokensUndelegatedEvent.OutputObject
    >;

    "VerifierTokensSent(address,address,address,uint256)": TypedContractEvent<
      VerifierTokensSentEvent.InputTuple,
      VerifierTokensSentEvent.OutputTuple,
      VerifierTokensSentEvent.OutputObject
    >;
    VerifierTokensSent: TypedContractEvent<
      VerifierTokensSentEvent.InputTuple,
      VerifierTokensSentEvent.OutputTuple,
      VerifierTokensSentEvent.OutputObject
    >;
  };
}
