/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumber,
  BigNumberish,
  BytesLike,
  CallOverrides,
  ContractTransaction,
  Overrides,
  PayableOverrides,
  PopulatedTransaction,
  Signer,
  utils,
} from "ethers";
import type {
  FunctionFragment,
  Result,
  EventFragment,
} from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
  TypedEventFilter,
  TypedEvent,
  TypedListener,
  OnEvent,
  PromiseOrValue,
} from "../common";

export declare namespace ITownsBase {
  export type InflationConfigStruct = {
    initialMintTime: PromiseOrValue<BigNumberish>;
    initialInflationRate: PromiseOrValue<BigNumberish>;
    finalInflationRate: PromiseOrValue<BigNumberish>;
    finalInflationYears: PromiseOrValue<BigNumberish>;
    inflationDecayRate: PromiseOrValue<BigNumberish>;
    inflationReceiver: PromiseOrValue<string>;
  };

  export type InflationConfigStructOutput = [
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber,
    string
  ] & {
    initialMintTime: BigNumber;
    initialInflationRate: BigNumber;
    finalInflationRate: BigNumber;
    finalInflationYears: BigNumber;
    inflationDecayRate: BigNumber;
    inflationReceiver: string;
  };
}

export interface TownsInterface extends utils.Interface {
  functions: {
    "CLOCK_MODE()": FunctionFragment;
    "DOMAIN_SEPARATOR()": FunctionFragment;
    "ROLE_INFLATION_MANAGER()": FunctionFragment;
    "ROLE_INFLATION_RATE_MANAGER()": FunctionFragment;
    "allowance(address,address)": FunctionFragment;
    "approve(address,uint256)": FunctionFragment;
    "balanceOf(address)": FunctionFragment;
    "cancelOwnershipHandover()": FunctionFragment;
    "checkpointAt(address,uint256)": FunctionFragment;
    "checkpointCount(address)": FunctionFragment;
    "clock()": FunctionFragment;
    "completeOwnershipHandover(address)": FunctionFragment;
    "createInflation()": FunctionFragment;
    "currentInflationRate()": FunctionFragment;
    "decimals()": FunctionFragment;
    "delegate(address)": FunctionFragment;
    "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
    "delegates(address)": FunctionFragment;
    "finalInflationRate()": FunctionFragment;
    "getDelegationTimeForDelegator(address)": FunctionFragment;
    "getDelegators()": FunctionFragment;
    "getDelegatorsByDelegatee(address)": FunctionFragment;
    "getDelegatorsCount()": FunctionFragment;
    "getPaginatedDelegators(uint256,uint256)": FunctionFragment;
    "getPastVotes(address,uint256)": FunctionFragment;
    "getPastVotesTotalSupply(uint256)": FunctionFragment;
    "getVotes(address)": FunctionFragment;
    "getVotesTotalSupply()": FunctionFragment;
    "grantRoles(address,uint256)": FunctionFragment;
    "hasAllRoles(address,uint256)": FunctionFragment;
    "hasAnyRole(address,uint256)": FunctionFragment;
    "inflationReceiver()": FunctionFragment;
    "initialMintTime()": FunctionFragment;
    "lastMintTime()": FunctionFragment;
    "mintInitialSupply(address)": FunctionFragment;
    "name()": FunctionFragment;
    "nonces(address)": FunctionFragment;
    "owner()": FunctionFragment;
    "ownershipHandoverExpiresAt(address)": FunctionFragment;
    "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
    "renounceOwnership()": FunctionFragment;
    "renounceRoles(uint256)": FunctionFragment;
    "requestOwnershipHandover()": FunctionFragment;
    "revokeRoles(address,uint256)": FunctionFragment;
    "rolesOf(address)": FunctionFragment;
    "setInflationReceiver(address)": FunctionFragment;
    "setOverrideInflation(bool,uint256)": FunctionFragment;
    "supportsInterface(bytes4)": FunctionFragment;
    "symbol()": FunctionFragment;
    "totalSupply()": FunctionFragment;
    "transfer(address,uint256)": FunctionFragment;
    "transferFrom(address,address,uint256)": FunctionFragment;
    "transferOwnership(address)": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "CLOCK_MODE"
      | "DOMAIN_SEPARATOR"
      | "ROLE_INFLATION_MANAGER"
      | "ROLE_INFLATION_RATE_MANAGER"
      | "allowance"
      | "approve"
      | "balanceOf"
      | "cancelOwnershipHandover"
      | "checkpointAt"
      | "checkpointCount"
      | "clock"
      | "completeOwnershipHandover"
      | "createInflation"
      | "currentInflationRate"
      | "decimals"
      | "delegate"
      | "delegateBySig"
      | "delegates"
      | "finalInflationRate"
      | "getDelegationTimeForDelegator"
      | "getDelegators"
      | "getDelegatorsByDelegatee"
      | "getDelegatorsCount"
      | "getPaginatedDelegators"
      | "getPastVotes"
      | "getPastVotesTotalSupply"
      | "getVotes"
      | "getVotesTotalSupply"
      | "grantRoles"
      | "hasAllRoles"
      | "hasAnyRole"
      | "inflationReceiver"
      | "initialMintTime"
      | "lastMintTime"
      | "mintInitialSupply"
      | "name"
      | "nonces"
      | "owner"
      | "ownershipHandoverExpiresAt"
      | "permit"
      | "renounceOwnership"
      | "renounceRoles"
      | "requestOwnershipHandover"
      | "revokeRoles"
      | "rolesOf"
      | "setInflationReceiver"
      | "setOverrideInflation"
      | "supportsInterface"
      | "symbol"
      | "totalSupply"
      | "transfer"
      | "transferFrom"
      | "transferOwnership"
  ): FunctionFragment;

  encodeFunctionData(
    functionFragment: "CLOCK_MODE",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "DOMAIN_SEPARATOR",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "ROLE_INFLATION_MANAGER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "ROLE_INFLATION_RATE_MANAGER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "allowance",
    values: [PromiseOrValue<string>, PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "approve",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "balanceOf",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "cancelOwnershipHandover",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "checkpointAt",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "checkpointCount",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(functionFragment: "clock", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "completeOwnershipHandover",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "createInflation",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "currentInflationRate",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "delegate",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "delegateBySig",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BytesLike>,
      PromiseOrValue<BytesLike>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "delegates",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "finalInflationRate",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegationTimeForDelegator",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegators",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegatorsByDelegatee",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegatorsCount",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getPaginatedDelegators",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "getPastVotes",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "getPastVotesTotalSupply",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "getVotes",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "getVotesTotalSupply",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "grantRoles",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "hasAllRoles",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "hasAnyRole",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "inflationReceiver",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "initialMintTime",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "lastMintTime",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "mintInitialSupply",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(functionFragment: "name", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "nonces",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "ownershipHandoverExpiresAt",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "permit",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BytesLike>,
      PromiseOrValue<BytesLike>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "renounceOwnership",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "renounceRoles",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "requestOwnershipHandover",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "revokeRoles",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "rolesOf",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setInflationReceiver",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setOverrideInflation",
    values: [PromiseOrValue<boolean>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "supportsInterface",
    values: [PromiseOrValue<BytesLike>]
  ): string;
  encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "totalSupply",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "transfer",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "transferFrom",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "transferOwnership",
    values: [PromiseOrValue<string>]
  ): string;

  decodeFunctionResult(functionFragment: "CLOCK_MODE", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "DOMAIN_SEPARATOR",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "ROLE_INFLATION_MANAGER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "ROLE_INFLATION_RATE_MANAGER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "cancelOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "checkpointAt",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "checkpointCount",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "clock", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "completeOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "createInflation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "currentInflationRate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "delegateBySig",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "finalInflationRate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegationTimeForDelegator",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegators",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegatorsByDelegatee",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegatorsCount",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getPaginatedDelegators",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getPastVotes",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getPastVotesTotalSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getVotesTotalSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "grantRoles", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "hasAllRoles",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "hasAnyRole", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "inflationReceiver",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "initialMintTime",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lastMintTime",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "mintInitialSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "ownershipHandoverExpiresAt",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "renounceOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "renounceRoles",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "requestOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "revokeRoles",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "rolesOf", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setInflationReceiver",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setOverrideInflation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "supportsInterface",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "totalSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "transferFrom",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "transferOwnership",
    data: BytesLike
  ): Result;

  events: {
    "Approval(address,address,uint256)": EventFragment;
    "DelegateChanged(address,address,address)": EventFragment;
    "DelegateVotesChanged(address,uint256,uint256)": EventFragment;
    "InterfaceAdded(bytes4)": EventFragment;
    "InterfaceRemoved(bytes4)": EventFragment;
    "OwnershipHandoverCanceled(address)": EventFragment;
    "OwnershipHandoverRequested(address)": EventFragment;
    "OwnershipTransferred(address,address)": EventFragment;
    "RolesUpdated(address,uint256)": EventFragment;
    "Transfer(address,address,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "InterfaceAdded"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "InterfaceRemoved"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OwnershipHandoverCanceled"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OwnershipHandoverRequested"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RolesUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}

export interface ApprovalEventObject {
  owner: string;
  spender: string;
  amount: BigNumber;
}
export type ApprovalEvent = TypedEvent<
  [string, string, BigNumber],
  ApprovalEventObject
>;

export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;

export interface DelegateChangedEventObject {
  delegator: string;
  from: string;
  to: string;
}
export type DelegateChangedEvent = TypedEvent<
  [string, string, string],
  DelegateChangedEventObject
>;

export type DelegateChangedEventFilter = TypedEventFilter<DelegateChangedEvent>;

export interface DelegateVotesChangedEventObject {
  delegate: string;
  oldValue: BigNumber;
  newValue: BigNumber;
}
export type DelegateVotesChangedEvent = TypedEvent<
  [string, BigNumber, BigNumber],
  DelegateVotesChangedEventObject
>;

export type DelegateVotesChangedEventFilter =
  TypedEventFilter<DelegateVotesChangedEvent>;

export interface InterfaceAddedEventObject {
  interfaceId: string;
}
export type InterfaceAddedEvent = TypedEvent<
  [string],
  InterfaceAddedEventObject
>;

export type InterfaceAddedEventFilter = TypedEventFilter<InterfaceAddedEvent>;

export interface InterfaceRemovedEventObject {
  interfaceId: string;
}
export type InterfaceRemovedEvent = TypedEvent<
  [string],
  InterfaceRemovedEventObject
>;

export type InterfaceRemovedEventFilter =
  TypedEventFilter<InterfaceRemovedEvent>;

export interface OwnershipHandoverCanceledEventObject {
  pendingOwner: string;
}
export type OwnershipHandoverCanceledEvent = TypedEvent<
  [string],
  OwnershipHandoverCanceledEventObject
>;

export type OwnershipHandoverCanceledEventFilter =
  TypedEventFilter<OwnershipHandoverCanceledEvent>;

export interface OwnershipHandoverRequestedEventObject {
  pendingOwner: string;
}
export type OwnershipHandoverRequestedEvent = TypedEvent<
  [string],
  OwnershipHandoverRequestedEventObject
>;

export type OwnershipHandoverRequestedEventFilter =
  TypedEventFilter<OwnershipHandoverRequestedEvent>;

export interface OwnershipTransferredEventObject {
  oldOwner: string;
  newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<
  [string, string],
  OwnershipTransferredEventObject
>;

export type OwnershipTransferredEventFilter =
  TypedEventFilter<OwnershipTransferredEvent>;

export interface RolesUpdatedEventObject {
  user: string;
  roles: BigNumber;
}
export type RolesUpdatedEvent = TypedEvent<
  [string, BigNumber],
  RolesUpdatedEventObject
>;

export type RolesUpdatedEventFilter = TypedEventFilter<RolesUpdatedEvent>;

export interface TransferEventObject {
  from: string;
  to: string;
  amount: BigNumber;
}
export type TransferEvent = TypedEvent<
  [string, string, BigNumber],
  TransferEventObject
>;

export type TransferEventFilter = TypedEventFilter<TransferEvent>;

export interface Towns extends BaseContract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  interface: TownsInterface;

  queryFilter<TEvent extends TypedEvent>(
    event: TypedEventFilter<TEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TEvent>>;

  listeners<TEvent extends TypedEvent>(
    eventFilter?: TypedEventFilter<TEvent>
  ): Array<TypedListener<TEvent>>;
  listeners(eventName?: string): Array<Listener>;
  removeAllListeners<TEvent extends TypedEvent>(
    eventFilter: TypedEventFilter<TEvent>
  ): this;
  removeAllListeners(eventName?: string): this;
  off: OnEvent<this>;
  on: OnEvent<this>;
  once: OnEvent<this>;
  removeListener: OnEvent<this>;

  functions: {
    CLOCK_MODE(overrides?: CallOverrides): Promise<[string]>;

    DOMAIN_SEPARATOR(
      overrides?: CallOverrides
    ): Promise<[string] & { result: string }>;

    ROLE_INFLATION_MANAGER(overrides?: CallOverrides): Promise<[BigNumber]>;

    ROLE_INFLATION_RATE_MANAGER(
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    allowance(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    approve(
      spender: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    balanceOf(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    cancelOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    checkpointAt(
      account: PromiseOrValue<string>,
      i: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<
      [number, BigNumber] & {
        checkpointClock: number;
        checkpointValue: BigNumber;
      }
    >;

    checkpointCount(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    clock(overrides?: CallOverrides): Promise<[number]>;

    completeOwnershipHandover(
      pendingOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    createInflation(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    currentInflationRate(overrides?: CallOverrides): Promise<[BigNumber]>;

    decimals(overrides?: CallOverrides): Promise<[number]>;

    delegate(
      delegatee: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    delegateBySig(
      delegatee: PromiseOrValue<string>,
      nonce: PromiseOrValue<BigNumberish>,
      expiry: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    delegates(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[string] & { result: string }>;

    finalInflationRate(overrides?: CallOverrides): Promise<[BigNumber]>;

    getDelegationTimeForDelegator(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getDelegators(overrides?: CallOverrides): Promise<[string[]]>;

    getDelegatorsByDelegatee(
      delegatee: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[string[]]>;

    getDelegatorsCount(overrides?: CallOverrides): Promise<[BigNumber]>;

    getPaginatedDelegators(
      cursor: PromiseOrValue<BigNumberish>,
      size: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<
      [string[], BigNumber] & { delegators: string[]; next: BigNumber }
    >;

    getPastVotes(
      account: PromiseOrValue<string>,
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getPastVotesTotalSupply(
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getVotes(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getVotesTotalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;

    grantRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    hasAllRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    hasAnyRole(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    inflationReceiver(overrides?: CallOverrides): Promise<[string]>;

    initialMintTime(overrides?: CallOverrides): Promise<[BigNumber]>;

    lastMintTime(overrides?: CallOverrides): Promise<[BigNumber]>;

    mintInitialSupply(
      to: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    name(overrides?: CallOverrides): Promise<[string]>;

    nonces(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    owner(overrides?: CallOverrides): Promise<[string] & { result: string }>;

    ownershipHandoverExpiresAt(
      pendingOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    permit(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      value: PromiseOrValue<BigNumberish>,
      deadline: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    renounceOwnership(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    renounceRoles(
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    requestOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    revokeRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    rolesOf(
      user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { roles: BigNumber }>;

    setInflationReceiver(
      receiver: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setOverrideInflation(
      overrideInflation: PromiseOrValue<boolean>,
      overrideInflationRate: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    supportsInterface(
      interfaceId: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    symbol(overrides?: CallOverrides): Promise<[string]>;

    totalSupply(
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { result: BigNumber }>;

    transfer(
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    transferFrom(
      from: PromiseOrValue<string>,
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    transferOwnership(
      newOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;
  };

  CLOCK_MODE(overrides?: CallOverrides): Promise<string>;

  DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;

  ROLE_INFLATION_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

  ROLE_INFLATION_RATE_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

  allowance(
    owner: PromiseOrValue<string>,
    spender: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  approve(
    spender: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  balanceOf(
    owner: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  cancelOwnershipHandover(
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  checkpointAt(
    account: PromiseOrValue<string>,
    i: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<
    [number, BigNumber] & {
      checkpointClock: number;
      checkpointValue: BigNumber;
    }
  >;

  checkpointCount(
    account: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  clock(overrides?: CallOverrides): Promise<number>;

  completeOwnershipHandover(
    pendingOwner: PromiseOrValue<string>,
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  createInflation(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  currentInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

  decimals(overrides?: CallOverrides): Promise<number>;

  delegate(
    delegatee: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  delegateBySig(
    delegatee: PromiseOrValue<string>,
    nonce: PromiseOrValue<BigNumberish>,
    expiry: PromiseOrValue<BigNumberish>,
    v: PromiseOrValue<BigNumberish>,
    r: PromiseOrValue<BytesLike>,
    s: PromiseOrValue<BytesLike>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  delegates(
    delegator: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<string>;

  finalInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

  getDelegationTimeForDelegator(
    delegator: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getDelegators(overrides?: CallOverrides): Promise<string[]>;

  getDelegatorsByDelegatee(
    delegatee: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<string[]>;

  getDelegatorsCount(overrides?: CallOverrides): Promise<BigNumber>;

  getPaginatedDelegators(
    cursor: PromiseOrValue<BigNumberish>,
    size: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<[string[], BigNumber] & { delegators: string[]; next: BigNumber }>;

  getPastVotes(
    account: PromiseOrValue<string>,
    timepoint: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getPastVotesTotalSupply(
    timepoint: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getVotes(
    account: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getVotesTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

  grantRoles(
    user: PromiseOrValue<string>,
    roles: PromiseOrValue<BigNumberish>,
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  hasAllRoles(
    user: PromiseOrValue<string>,
    roles: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  hasAnyRole(
    user: PromiseOrValue<string>,
    roles: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  inflationReceiver(overrides?: CallOverrides): Promise<string>;

  initialMintTime(overrides?: CallOverrides): Promise<BigNumber>;

  lastMintTime(overrides?: CallOverrides): Promise<BigNumber>;

  mintInitialSupply(
    to: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  name(overrides?: CallOverrides): Promise<string>;

  nonces(
    owner: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  owner(overrides?: CallOverrides): Promise<string>;

  ownershipHandoverExpiresAt(
    pendingOwner: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  permit(
    owner: PromiseOrValue<string>,
    spender: PromiseOrValue<string>,
    value: PromiseOrValue<BigNumberish>,
    deadline: PromiseOrValue<BigNumberish>,
    v: PromiseOrValue<BigNumberish>,
    r: PromiseOrValue<BytesLike>,
    s: PromiseOrValue<BytesLike>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  renounceOwnership(
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  renounceRoles(
    roles: PromiseOrValue<BigNumberish>,
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  requestOwnershipHandover(
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  revokeRoles(
    user: PromiseOrValue<string>,
    roles: PromiseOrValue<BigNumberish>,
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  rolesOf(
    user: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  setInflationReceiver(
    receiver: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setOverrideInflation(
    overrideInflation: PromiseOrValue<boolean>,
    overrideInflationRate: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  supportsInterface(
    interfaceId: PromiseOrValue<BytesLike>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  symbol(overrides?: CallOverrides): Promise<string>;

  totalSupply(overrides?: CallOverrides): Promise<BigNumber>;

  transfer(
    to: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  transferFrom(
    from: PromiseOrValue<string>,
    to: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  transferOwnership(
    newOwner: PromiseOrValue<string>,
    overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  callStatic: {
    CLOCK_MODE(overrides?: CallOverrides): Promise<string>;

    DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<string>;

    ROLE_INFLATION_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

    ROLE_INFLATION_RATE_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

    allowance(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    approve(
      spender: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    balanceOf(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    cancelOwnershipHandover(overrides?: CallOverrides): Promise<void>;

    checkpointAt(
      account: PromiseOrValue<string>,
      i: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<
      [number, BigNumber] & {
        checkpointClock: number;
        checkpointValue: BigNumber;
      }
    >;

    checkpointCount(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    clock(overrides?: CallOverrides): Promise<number>;

    completeOwnershipHandover(
      pendingOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    createInflation(overrides?: CallOverrides): Promise<void>;

    currentInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

    decimals(overrides?: CallOverrides): Promise<number>;

    delegate(
      delegatee: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    delegateBySig(
      delegatee: PromiseOrValue<string>,
      nonce: PromiseOrValue<BigNumberish>,
      expiry: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<void>;

    delegates(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<string>;

    finalInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

    getDelegationTimeForDelegator(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getDelegators(overrides?: CallOverrides): Promise<string[]>;

    getDelegatorsByDelegatee(
      delegatee: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<string[]>;

    getDelegatorsCount(overrides?: CallOverrides): Promise<BigNumber>;

    getPaginatedDelegators(
      cursor: PromiseOrValue<BigNumberish>,
      size: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<
      [string[], BigNumber] & { delegators: string[]; next: BigNumber }
    >;

    getPastVotes(
      account: PromiseOrValue<string>,
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getPastVotesTotalSupply(
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVotes(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVotesTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    grantRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    hasAllRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    hasAnyRole(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    inflationReceiver(overrides?: CallOverrides): Promise<string>;

    initialMintTime(overrides?: CallOverrides): Promise<BigNumber>;

    lastMintTime(overrides?: CallOverrides): Promise<BigNumber>;

    mintInitialSupply(
      to: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    name(overrides?: CallOverrides): Promise<string>;

    nonces(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    owner(overrides?: CallOverrides): Promise<string>;

    ownershipHandoverExpiresAt(
      pendingOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    permit(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      value: PromiseOrValue<BigNumberish>,
      deadline: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<void>;

    renounceOwnership(overrides?: CallOverrides): Promise<void>;

    renounceRoles(
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    requestOwnershipHandover(overrides?: CallOverrides): Promise<void>;

    revokeRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    rolesOf(
      user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    setInflationReceiver(
      receiver: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setOverrideInflation(
      overrideInflation: PromiseOrValue<boolean>,
      overrideInflationRate: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    supportsInterface(
      interfaceId: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    symbol(overrides?: CallOverrides): Promise<string>;

    totalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    transfer(
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    transferFrom(
      from: PromiseOrValue<string>,
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    transferOwnership(
      newOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;
  };

  filters: {
    "Approval(address,address,uint256)"(
      owner?: PromiseOrValue<string> | null,
      spender?: PromiseOrValue<string> | null,
      amount?: null
    ): ApprovalEventFilter;
    Approval(
      owner?: PromiseOrValue<string> | null,
      spender?: PromiseOrValue<string> | null,
      amount?: null
    ): ApprovalEventFilter;

    "DelegateChanged(address,address,address)"(
      delegator?: PromiseOrValue<string> | null,
      from?: PromiseOrValue<string> | null,
      to?: PromiseOrValue<string> | null
    ): DelegateChangedEventFilter;
    DelegateChanged(
      delegator?: PromiseOrValue<string> | null,
      from?: PromiseOrValue<string> | null,
      to?: PromiseOrValue<string> | null
    ): DelegateChangedEventFilter;

    "DelegateVotesChanged(address,uint256,uint256)"(
      delegate?: PromiseOrValue<string> | null,
      oldValue?: null,
      newValue?: null
    ): DelegateVotesChangedEventFilter;
    DelegateVotesChanged(
      delegate?: PromiseOrValue<string> | null,
      oldValue?: null,
      newValue?: null
    ): DelegateVotesChangedEventFilter;

    "InterfaceAdded(bytes4)"(
      interfaceId?: PromiseOrValue<BytesLike> | null
    ): InterfaceAddedEventFilter;
    InterfaceAdded(
      interfaceId?: PromiseOrValue<BytesLike> | null
    ): InterfaceAddedEventFilter;

    "InterfaceRemoved(bytes4)"(
      interfaceId?: PromiseOrValue<BytesLike> | null
    ): InterfaceRemovedEventFilter;
    InterfaceRemoved(
      interfaceId?: PromiseOrValue<BytesLike> | null
    ): InterfaceRemovedEventFilter;

    "OwnershipHandoverCanceled(address)"(
      pendingOwner?: PromiseOrValue<string> | null
    ): OwnershipHandoverCanceledEventFilter;
    OwnershipHandoverCanceled(
      pendingOwner?: PromiseOrValue<string> | null
    ): OwnershipHandoverCanceledEventFilter;

    "OwnershipHandoverRequested(address)"(
      pendingOwner?: PromiseOrValue<string> | null
    ): OwnershipHandoverRequestedEventFilter;
    OwnershipHandoverRequested(
      pendingOwner?: PromiseOrValue<string> | null
    ): OwnershipHandoverRequestedEventFilter;

    "OwnershipTransferred(address,address)"(
      oldOwner?: PromiseOrValue<string> | null,
      newOwner?: PromiseOrValue<string> | null
    ): OwnershipTransferredEventFilter;
    OwnershipTransferred(
      oldOwner?: PromiseOrValue<string> | null,
      newOwner?: PromiseOrValue<string> | null
    ): OwnershipTransferredEventFilter;

    "RolesUpdated(address,uint256)"(
      user?: PromiseOrValue<string> | null,
      roles?: PromiseOrValue<BigNumberish> | null
    ): RolesUpdatedEventFilter;
    RolesUpdated(
      user?: PromiseOrValue<string> | null,
      roles?: PromiseOrValue<BigNumberish> | null
    ): RolesUpdatedEventFilter;

    "Transfer(address,address,uint256)"(
      from?: PromiseOrValue<string> | null,
      to?: PromiseOrValue<string> | null,
      amount?: null
    ): TransferEventFilter;
    Transfer(
      from?: PromiseOrValue<string> | null,
      to?: PromiseOrValue<string> | null,
      amount?: null
    ): TransferEventFilter;
  };

  estimateGas: {
    CLOCK_MODE(overrides?: CallOverrides): Promise<BigNumber>;

    DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<BigNumber>;

    ROLE_INFLATION_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

    ROLE_INFLATION_RATE_MANAGER(overrides?: CallOverrides): Promise<BigNumber>;

    allowance(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    approve(
      spender: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    balanceOf(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    cancelOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    checkpointAt(
      account: PromiseOrValue<string>,
      i: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    checkpointCount(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    clock(overrides?: CallOverrides): Promise<BigNumber>;

    completeOwnershipHandover(
      pendingOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    createInflation(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    currentInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

    decimals(overrides?: CallOverrides): Promise<BigNumber>;

    delegate(
      delegatee: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    delegateBySig(
      delegatee: PromiseOrValue<string>,
      nonce: PromiseOrValue<BigNumberish>,
      expiry: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    delegates(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    finalInflationRate(overrides?: CallOverrides): Promise<BigNumber>;

    getDelegationTimeForDelegator(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getDelegators(overrides?: CallOverrides): Promise<BigNumber>;

    getDelegatorsByDelegatee(
      delegatee: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getDelegatorsCount(overrides?: CallOverrides): Promise<BigNumber>;

    getPaginatedDelegators(
      cursor: PromiseOrValue<BigNumberish>,
      size: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getPastVotes(
      account: PromiseOrValue<string>,
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getPastVotesTotalSupply(
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVotes(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVotesTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    grantRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    hasAllRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    hasAnyRole(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    inflationReceiver(overrides?: CallOverrides): Promise<BigNumber>;

    initialMintTime(overrides?: CallOverrides): Promise<BigNumber>;

    lastMintTime(overrides?: CallOverrides): Promise<BigNumber>;

    mintInitialSupply(
      to: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    name(overrides?: CallOverrides): Promise<BigNumber>;

    nonces(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    owner(overrides?: CallOverrides): Promise<BigNumber>;

    ownershipHandoverExpiresAt(
      pendingOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    permit(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      value: PromiseOrValue<BigNumberish>,
      deadline: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    renounceOwnership(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    renounceRoles(
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    requestOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    revokeRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    rolesOf(
      user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    setInflationReceiver(
      receiver: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setOverrideInflation(
      overrideInflation: PromiseOrValue<boolean>,
      overrideInflationRate: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    supportsInterface(
      interfaceId: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    symbol(overrides?: CallOverrides): Promise<BigNumber>;

    totalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    transfer(
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    transferFrom(
      from: PromiseOrValue<string>,
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    transferOwnership(
      newOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    CLOCK_MODE(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    ROLE_INFLATION_MANAGER(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    ROLE_INFLATION_RATE_MANAGER(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    allowance(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    approve(
      spender: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    balanceOf(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    cancelOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    checkpointAt(
      account: PromiseOrValue<string>,
      i: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    checkpointCount(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    clock(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    completeOwnershipHandover(
      pendingOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    createInflation(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    currentInflationRate(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    delegate(
      delegatee: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    delegateBySig(
      delegatee: PromiseOrValue<string>,
      nonce: PromiseOrValue<BigNumberish>,
      expiry: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    delegates(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    finalInflationRate(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getDelegationTimeForDelegator(
      delegator: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getDelegators(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getDelegatorsByDelegatee(
      delegatee: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getDelegatorsCount(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getPaginatedDelegators(
      cursor: PromiseOrValue<BigNumberish>,
      size: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getPastVotes(
      account: PromiseOrValue<string>,
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getPastVotesTotalSupply(
      timepoint: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getVotes(
      account: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getVotesTotalSupply(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    grantRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    hasAllRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    hasAnyRole(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    inflationReceiver(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    initialMintTime(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    lastMintTime(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    mintInitialSupply(
      to: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    name(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    nonces(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    ownershipHandoverExpiresAt(
      pendingOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    permit(
      owner: PromiseOrValue<string>,
      spender: PromiseOrValue<string>,
      value: PromiseOrValue<BigNumberish>,
      deadline: PromiseOrValue<BigNumberish>,
      v: PromiseOrValue<BigNumberish>,
      r: PromiseOrValue<BytesLike>,
      s: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    renounceOwnership(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    renounceRoles(
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    requestOwnershipHandover(
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    revokeRoles(
      user: PromiseOrValue<string>,
      roles: PromiseOrValue<BigNumberish>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    rolesOf(
      user: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    setInflationReceiver(
      receiver: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setOverrideInflation(
      overrideInflation: PromiseOrValue<boolean>,
      overrideInflationRate: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    supportsInterface(
      interfaceId: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    transfer(
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    transferFrom(
      from: PromiseOrValue<string>,
      to: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    transferOwnership(
      newOwner: PromiseOrValue<string>,
      overrides?: PayableOverrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;
  };
}
