/* 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,
} from "../common";

export type EnforcedOptionParamStruct = {
  eid: BigNumberish;
  msgType: BigNumberish;
  options: BytesLike;
};

export type EnforcedOptionParamStructOutput = [number, number, string] & {
  eid: number;
  msgType: number;
  options: string;
};

export type OriginStruct = {
  srcEid: BigNumberish;
  sender: BytesLike;
  nonce: BigNumberish;
};

export type OriginStructOutput = [number, string, BigNumber] & {
  srcEid: number;
  sender: string;
  nonce: BigNumber;
};

export type InboundPacketStruct = {
  origin: OriginStruct;
  dstEid: BigNumberish;
  receiver: string;
  guid: BytesLike;
  value: BigNumberish;
  executor: string;
  message: BytesLike;
  extraData: BytesLike;
};

export type InboundPacketStructOutput = [
  OriginStructOutput,
  number,
  string,
  string,
  BigNumber,
  string,
  string,
  string
] & {
  origin: OriginStructOutput;
  dstEid: number;
  receiver: string;
  guid: string;
  value: BigNumber;
  executor: string;
  message: string;
  extraData: string;
};

export type SendParamStruct = {
  dstEid: BigNumberish;
  to: BytesLike;
  amountLD: BigNumberish;
  minAmountLD: BigNumberish;
  extraOptions: BytesLike;
  composeMsg: BytesLike;
  oftCmd: BytesLike;
};

export type SendParamStructOutput = [
  number,
  string,
  BigNumber,
  BigNumber,
  string,
  string,
  string
] & {
  dstEid: number;
  to: string;
  amountLD: BigNumber;
  minAmountLD: BigNumber;
  extraOptions: string;
  composeMsg: string;
  oftCmd: string;
};

export type OFTLimitStruct = {
  minAmountLD: BigNumberish;
  maxAmountLD: BigNumberish;
};

export type OFTLimitStructOutput = [BigNumber, BigNumber] & {
  minAmountLD: BigNumber;
  maxAmountLD: BigNumber;
};

export type OFTFeeDetailStruct = {
  feeAmountLD: BigNumberish;
  description: string;
};

export type OFTFeeDetailStructOutput = [BigNumber, string] & {
  feeAmountLD: BigNumber;
  description: string;
};

export type OFTReceiptStruct = {
  amountSentLD: BigNumberish;
  amountReceivedLD: BigNumberish;
};

export type OFTReceiptStructOutput = [BigNumber, BigNumber] & {
  amountSentLD: BigNumber;
  amountReceivedLD: BigNumber;
};

export type MessagingFeeStruct = {
  nativeFee: BigNumberish;
  lzTokenFee: BigNumberish;
};

export type MessagingFeeStructOutput = [BigNumber, BigNumber] & {
  nativeFee: BigNumber;
  lzTokenFee: BigNumber;
};

export type MessagingReceiptStruct = {
  guid: BytesLike;
  nonce: BigNumberish;
  fee: MessagingFeeStruct;
};

export type MessagingReceiptStructOutput = [
  string,
  BigNumber,
  MessagingFeeStructOutput
] & { guid: string; nonce: BigNumber; fee: MessagingFeeStructOutput };

export interface SSGInterface extends utils.Interface {
  functions: {
    "MAX_SUPPLY()": FunctionFragment;
    "SEND()": FunctionFragment;
    "SEND_AND_CALL()": FunctionFragment;
    "allowInitializePath((uint32,bytes32,uint64))": FunctionFragment;
    "allowance(address,address)": FunctionFragment;
    "approvalRequired()": FunctionFragment;
    "approve(address,uint256)": FunctionFragment;
    "balanceOf(address)": FunctionFragment;
    "combineOptions(uint32,uint16,bytes)": FunctionFragment;
    "decimalConversionRate()": FunctionFragment;
    "decimals()": FunctionFragment;
    "endpoint()": FunctionFragment;
    "enforcedOptions(uint32,uint16)": FunctionFragment;
    "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": FunctionFragment;
    "isPeer(uint32,bytes32)": FunctionFragment;
    "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": FunctionFragment;
    "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": FunctionFragment;
    "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": FunctionFragment;
    "mint(address,uint256)": FunctionFragment;
    "msgInspector()": FunctionFragment;
    "name()": FunctionFragment;
    "nextNonce(uint32,bytes32)": FunctionFragment;
    "oApp()": FunctionFragment;
    "oAppVersion()": FunctionFragment;
    "oftVersion()": FunctionFragment;
    "owner()": FunctionFragment;
    "peers(uint32)": FunctionFragment;
    "preCrime()": FunctionFragment;
    "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": FunctionFragment;
    "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": FunctionFragment;
    "renounceOwnership()": FunctionFragment;
    "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": FunctionFragment;
    "setDelegate(address)": FunctionFragment;
    "setEnforcedOptions((uint32,uint16,bytes)[])": FunctionFragment;
    "setMsgInspector(address)": FunctionFragment;
    "setPeer(uint32,bytes32)": FunctionFragment;
    "setPreCrime(address)": FunctionFragment;
    "sharedDecimals()": FunctionFragment;
    "symbol()": FunctionFragment;
    "token()": FunctionFragment;
    "totalSupply()": FunctionFragment;
    "transfer(address,uint256)": FunctionFragment;
    "transferFrom(address,address,uint256)": FunctionFragment;
    "transferOwnership(address)": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "MAX_SUPPLY"
      | "SEND"
      | "SEND_AND_CALL"
      | "allowInitializePath"
      | "allowance"
      | "approvalRequired"
      | "approve"
      | "balanceOf"
      | "combineOptions"
      | "decimalConversionRate"
      | "decimals"
      | "endpoint"
      | "enforcedOptions"
      | "isComposeMsgSender"
      | "isPeer"
      | "lzReceive"
      | "lzReceiveAndRevert"
      | "lzReceiveSimulate"
      | "mint"
      | "msgInspector"
      | "name"
      | "nextNonce"
      | "oApp"
      | "oAppVersion"
      | "oftVersion"
      | "owner"
      | "peers"
      | "preCrime"
      | "quoteOFT"
      | "quoteSend"
      | "renounceOwnership"
      | "send"
      | "setDelegate"
      | "setEnforcedOptions"
      | "setMsgInspector"
      | "setPeer"
      | "setPreCrime"
      | "sharedDecimals"
      | "symbol"
      | "token"
      | "totalSupply"
      | "transfer"
      | "transferFrom"
      | "transferOwnership"
  ): FunctionFragment;

  encodeFunctionData(
    functionFragment: "MAX_SUPPLY",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "SEND", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "SEND_AND_CALL",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "allowInitializePath",
    values: [OriginStruct]
  ): string;
  encodeFunctionData(
    functionFragment: "allowance",
    values: [string, string]
  ): string;
  encodeFunctionData(
    functionFragment: "approvalRequired",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "approve",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "balanceOf", values: [string]): string;
  encodeFunctionData(
    functionFragment: "combineOptions",
    values: [BigNumberish, BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "decimalConversionRate",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
  encodeFunctionData(functionFragment: "endpoint", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "enforcedOptions",
    values: [BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "isComposeMsgSender",
    values: [OriginStruct, BytesLike, string]
  ): string;
  encodeFunctionData(
    functionFragment: "isPeer",
    values: [BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "lzReceive",
    values: [OriginStruct, BytesLike, BytesLike, string, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "lzReceiveAndRevert",
    values: [InboundPacketStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "lzReceiveSimulate",
    values: [OriginStruct, BytesLike, BytesLike, string, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "mint",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "msgInspector",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "name", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "nextNonce",
    values: [BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(functionFragment: "oApp", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "oAppVersion",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "oftVersion",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
  encodeFunctionData(functionFragment: "peers", values: [BigNumberish]): string;
  encodeFunctionData(functionFragment: "preCrime", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "quoteOFT",
    values: [SendParamStruct]
  ): string;
  encodeFunctionData(
    functionFragment: "quoteSend",
    values: [SendParamStruct, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "renounceOwnership",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "send",
    values: [SendParamStruct, MessagingFeeStruct, string]
  ): string;
  encodeFunctionData(functionFragment: "setDelegate", values: [string]): string;
  encodeFunctionData(
    functionFragment: "setEnforcedOptions",
    values: [EnforcedOptionParamStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "setMsgInspector",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "setPeer",
    values: [BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(functionFragment: "setPreCrime", values: [string]): string;
  encodeFunctionData(
    functionFragment: "sharedDecimals",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
  encodeFunctionData(functionFragment: "token", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "totalSupply",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "transfer",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "transferFrom",
    values: [string, string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "transferOwnership",
    values: [string]
  ): string;

  decodeFunctionResult(functionFragment: "MAX_SUPPLY", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "SEND", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "SEND_AND_CALL",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "allowInitializePath",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "approvalRequired",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "combineOptions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "decimalConversionRate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "endpoint", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "enforcedOptions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isComposeMsgSender",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "isPeer", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "lzReceive", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "lzReceiveAndRevert",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lzReceiveSimulate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "msgInspector",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "nextNonce", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "oApp", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "oAppVersion",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "oftVersion", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "peers", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "preCrime", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "quoteOFT", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "quoteSend", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "renounceOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "send", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setDelegate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setEnforcedOptions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMsgInspector",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "setPeer", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setPreCrime",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "sharedDecimals",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "token", 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;
    "EnforcedOptionSet((uint32,uint16,bytes)[])": EventFragment;
    "MsgInspectorSet(address)": EventFragment;
    "OFTReceived(bytes32,uint32,address,uint256)": EventFragment;
    "OFTSent(bytes32,uint32,address,uint256,uint256)": EventFragment;
    "OwnershipTransferred(address,address)": EventFragment;
    "PeerSet(uint32,bytes32)": EventFragment;
    "PreCrimeSet(address)": EventFragment;
    "Transfer(address,address,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "EnforcedOptionSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "MsgInspectorSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OFTReceived"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OFTSent"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "PeerSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "PreCrimeSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}

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

export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;

export interface EnforcedOptionSetEventObject {
  _enforcedOptions: EnforcedOptionParamStructOutput[];
}
export type EnforcedOptionSetEvent = TypedEvent<
  [EnforcedOptionParamStructOutput[]],
  EnforcedOptionSetEventObject
>;

export type EnforcedOptionSetEventFilter =
  TypedEventFilter<EnforcedOptionSetEvent>;

export interface MsgInspectorSetEventObject {
  inspector: string;
}
export type MsgInspectorSetEvent = TypedEvent<
  [string],
  MsgInspectorSetEventObject
>;

export type MsgInspectorSetEventFilter = TypedEventFilter<MsgInspectorSetEvent>;

export interface OFTReceivedEventObject {
  guid: string;
  srcEid: number;
  toAddress: string;
  amountReceivedLD: BigNumber;
}
export type OFTReceivedEvent = TypedEvent<
  [string, number, string, BigNumber],
  OFTReceivedEventObject
>;

export type OFTReceivedEventFilter = TypedEventFilter<OFTReceivedEvent>;

export interface OFTSentEventObject {
  guid: string;
  dstEid: number;
  fromAddress: string;
  amountSentLD: BigNumber;
  amountReceivedLD: BigNumber;
}
export type OFTSentEvent = TypedEvent<
  [string, number, string, BigNumber, BigNumber],
  OFTSentEventObject
>;

export type OFTSentEventFilter = TypedEventFilter<OFTSentEvent>;

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

export type OwnershipTransferredEventFilter =
  TypedEventFilter<OwnershipTransferredEvent>;

export interface PeerSetEventObject {
  eid: number;
  peer: string;
}
export type PeerSetEvent = TypedEvent<[number, string], PeerSetEventObject>;

export type PeerSetEventFilter = TypedEventFilter<PeerSetEvent>;

export interface PreCrimeSetEventObject {
  preCrimeAddress: string;
}
export type PreCrimeSetEvent = TypedEvent<[string], PreCrimeSetEventObject>;

export type PreCrimeSetEventFilter = TypedEventFilter<PreCrimeSetEvent>;

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

export type TransferEventFilter = TypedEventFilter<TransferEvent>;

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

  interface: SSGInterface;

  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: {
    MAX_SUPPLY(overrides?: CallOverrides): Promise<[BigNumber]>;

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

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

    allowInitializePath(
      origin: OriginStruct,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

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

    approvalRequired(overrides?: CallOverrides): Promise<[boolean]>;

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

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

    combineOptions(
      _eid: BigNumberish,
      _msgType: BigNumberish,
      _extraOptions: BytesLike,
      overrides?: CallOverrides
    ): Promise<[string]>;

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

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

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

    enforcedOptions(
      eid: BigNumberish,
      msgType: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[string] & { enforcedOption: string }>;

    isComposeMsgSender(
      arg0: OriginStruct,
      arg1: BytesLike,
      _sender: string,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    lzReceive(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    lzReceiveAndRevert(
      _packets: InboundPacketStruct[],
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    lzReceiveSimulate(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    mint(
      _to: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

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

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

    nextNonce(
      arg0: BigNumberish,
      arg1: BytesLike,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { nonce: BigNumber }>;

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

    oAppVersion(
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber] & {
        senderVersion: BigNumber;
        receiverVersion: BigNumber;
      }
    >;

    oftVersion(
      overrides?: CallOverrides
    ): Promise<
      [string, BigNumber] & { interfaceId: string; version: BigNumber }
    >;

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

    peers(
      eid: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[string] & { peer: string }>;

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

    quoteOFT(
      _sendParam: SendParamStruct,
      overrides?: CallOverrides
    ): Promise<
      [
        OFTLimitStructOutput,
        OFTFeeDetailStructOutput[],
        OFTReceiptStructOutput
      ] & {
        oftLimit: OFTLimitStructOutput;
        oftFeeDetails: OFTFeeDetailStructOutput[];
        oftReceipt: OFTReceiptStructOutput;
      }
    >;

    quoteSend(
      _sendParam: SendParamStruct,
      _payInLzToken: boolean,
      overrides?: CallOverrides
    ): Promise<
      [MessagingFeeStructOutput] & { msgFee: MessagingFeeStructOutput }
    >;

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

    send(
      _sendParam: SendParamStruct,
      _fee: MessagingFeeStruct,
      _refundAddress: string,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<ContractTransaction>;

    setDelegate(
      _delegate: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setEnforcedOptions(
      _enforcedOptions: EnforcedOptionParamStruct[],
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setMsgInspector(
      _msgInspector: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

    setPreCrime(
      _preCrime: string,
      overrides?: Overrides & { from?: string }
    ): Promise<ContractTransaction>;

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

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

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

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

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

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

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

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

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

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

  allowInitializePath(
    origin: OriginStruct,
    overrides?: CallOverrides
  ): Promise<boolean>;

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

  approvalRequired(overrides?: CallOverrides): Promise<boolean>;

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

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

  combineOptions(
    _eid: BigNumberish,
    _msgType: BigNumberish,
    _extraOptions: BytesLike,
    overrides?: CallOverrides
  ): Promise<string>;

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

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

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

  enforcedOptions(
    eid: BigNumberish,
    msgType: BigNumberish,
    overrides?: CallOverrides
  ): Promise<string>;

  isComposeMsgSender(
    arg0: OriginStruct,
    arg1: BytesLike,
    _sender: string,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isPeer(
    _eid: BigNumberish,
    _peer: BytesLike,
    overrides?: CallOverrides
  ): Promise<boolean>;

  lzReceive(
    _origin: OriginStruct,
    _guid: BytesLike,
    _message: BytesLike,
    _executor: string,
    _extraData: BytesLike,
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  lzReceiveAndRevert(
    _packets: InboundPacketStruct[],
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  lzReceiveSimulate(
    _origin: OriginStruct,
    _guid: BytesLike,
    _message: BytesLike,
    _executor: string,
    _extraData: BytesLike,
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  mint(
    _to: string,
    _amount: BigNumberish,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

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

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

  nextNonce(
    arg0: BigNumberish,
    arg1: BytesLike,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

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

  oAppVersion(
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber] & {
      senderVersion: BigNumber;
      receiverVersion: BigNumber;
    }
  >;

  oftVersion(
    overrides?: CallOverrides
  ): Promise<[string, BigNumber] & { interfaceId: string; version: BigNumber }>;

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

  peers(eid: BigNumberish, overrides?: CallOverrides): Promise<string>;

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

  quoteOFT(
    _sendParam: SendParamStruct,
    overrides?: CallOverrides
  ): Promise<
    [
      OFTLimitStructOutput,
      OFTFeeDetailStructOutput[],
      OFTReceiptStructOutput
    ] & {
      oftLimit: OFTLimitStructOutput;
      oftFeeDetails: OFTFeeDetailStructOutput[];
      oftReceipt: OFTReceiptStructOutput;
    }
  >;

  quoteSend(
    _sendParam: SendParamStruct,
    _payInLzToken: boolean,
    overrides?: CallOverrides
  ): Promise<MessagingFeeStructOutput>;

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

  send(
    _sendParam: SendParamStruct,
    _fee: MessagingFeeStruct,
    _refundAddress: string,
    overrides?: PayableOverrides & { from?: string }
  ): Promise<ContractTransaction>;

  setDelegate(
    _delegate: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setEnforcedOptions(
    _enforcedOptions: EnforcedOptionParamStruct[],
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setMsgInspector(
    _msgInspector: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setPeer(
    _eid: BigNumberish,
    _peer: BytesLike,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

  setPreCrime(
    _preCrime: string,
    overrides?: Overrides & { from?: string }
  ): Promise<ContractTransaction>;

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

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

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

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

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

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

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

  callStatic: {
    MAX_SUPPLY(overrides?: CallOverrides): Promise<BigNumber>;

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

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

    allowInitializePath(
      origin: OriginStruct,
      overrides?: CallOverrides
    ): Promise<boolean>;

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

    approvalRequired(overrides?: CallOverrides): Promise<boolean>;

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

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

    combineOptions(
      _eid: BigNumberish,
      _msgType: BigNumberish,
      _extraOptions: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

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

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

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

    enforcedOptions(
      eid: BigNumberish,
      msgType: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    isComposeMsgSender(
      arg0: OriginStruct,
      arg1: BytesLike,
      _sender: string,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: CallOverrides
    ): Promise<boolean>;

    lzReceive(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    lzReceiveAndRevert(
      _packets: InboundPacketStruct[],
      overrides?: CallOverrides
    ): Promise<void>;

    lzReceiveSimulate(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    mint(
      _to: string,
      _amount: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

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

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

    nextNonce(
      arg0: BigNumberish,
      arg1: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

    oAppVersion(
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber] & {
        senderVersion: BigNumber;
        receiverVersion: BigNumber;
      }
    >;

    oftVersion(
      overrides?: CallOverrides
    ): Promise<
      [string, BigNumber] & { interfaceId: string; version: BigNumber }
    >;

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

    peers(eid: BigNumberish, overrides?: CallOverrides): Promise<string>;

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

    quoteOFT(
      _sendParam: SendParamStruct,
      overrides?: CallOverrides
    ): Promise<
      [
        OFTLimitStructOutput,
        OFTFeeDetailStructOutput[],
        OFTReceiptStructOutput
      ] & {
        oftLimit: OFTLimitStructOutput;
        oftFeeDetails: OFTFeeDetailStructOutput[];
        oftReceipt: OFTReceiptStructOutput;
      }
    >;

    quoteSend(
      _sendParam: SendParamStruct,
      _payInLzToken: boolean,
      overrides?: CallOverrides
    ): Promise<MessagingFeeStructOutput>;

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

    send(
      _sendParam: SendParamStruct,
      _fee: MessagingFeeStruct,
      _refundAddress: string,
      overrides?: CallOverrides
    ): Promise<
      [MessagingReceiptStructOutput, OFTReceiptStructOutput] & {
        msgReceipt: MessagingReceiptStructOutput;
        oftReceipt: OFTReceiptStructOutput;
      }
    >;

    setDelegate(_delegate: string, overrides?: CallOverrides): Promise<void>;

    setEnforcedOptions(
      _enforcedOptions: EnforcedOptionParamStruct[],
      overrides?: CallOverrides
    ): Promise<void>;

    setMsgInspector(
      _msgInspector: string,
      overrides?: CallOverrides
    ): Promise<void>;

    setPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    setPreCrime(_preCrime: string, overrides?: CallOverrides): Promise<void>;

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

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

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

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

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

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

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

  filters: {
    "Approval(address,address,uint256)"(
      owner?: string | null,
      spender?: string | null,
      value?: null
    ): ApprovalEventFilter;
    Approval(
      owner?: string | null,
      spender?: string | null,
      value?: null
    ): ApprovalEventFilter;

    "EnforcedOptionSet((uint32,uint16,bytes)[])"(
      _enforcedOptions?: null
    ): EnforcedOptionSetEventFilter;
    EnforcedOptionSet(_enforcedOptions?: null): EnforcedOptionSetEventFilter;

    "MsgInspectorSet(address)"(inspector?: null): MsgInspectorSetEventFilter;
    MsgInspectorSet(inspector?: null): MsgInspectorSetEventFilter;

    "OFTReceived(bytes32,uint32,address,uint256)"(
      guid?: BytesLike | null,
      srcEid?: null,
      toAddress?: string | null,
      amountReceivedLD?: null
    ): OFTReceivedEventFilter;
    OFTReceived(
      guid?: BytesLike | null,
      srcEid?: null,
      toAddress?: string | null,
      amountReceivedLD?: null
    ): OFTReceivedEventFilter;

    "OFTSent(bytes32,uint32,address,uint256,uint256)"(
      guid?: BytesLike | null,
      dstEid?: null,
      fromAddress?: string | null,
      amountSentLD?: null,
      amountReceivedLD?: null
    ): OFTSentEventFilter;
    OFTSent(
      guid?: BytesLike | null,
      dstEid?: null,
      fromAddress?: string | null,
      amountSentLD?: null,
      amountReceivedLD?: null
    ): OFTSentEventFilter;

    "OwnershipTransferred(address,address)"(
      previousOwner?: string | null,
      newOwner?: string | null
    ): OwnershipTransferredEventFilter;
    OwnershipTransferred(
      previousOwner?: string | null,
      newOwner?: string | null
    ): OwnershipTransferredEventFilter;

    "PeerSet(uint32,bytes32)"(eid?: null, peer?: null): PeerSetEventFilter;
    PeerSet(eid?: null, peer?: null): PeerSetEventFilter;

    "PreCrimeSet(address)"(preCrimeAddress?: null): PreCrimeSetEventFilter;
    PreCrimeSet(preCrimeAddress?: null): PreCrimeSetEventFilter;

    "Transfer(address,address,uint256)"(
      from?: string | null,
      to?: string | null,
      value?: null
    ): TransferEventFilter;
    Transfer(
      from?: string | null,
      to?: string | null,
      value?: null
    ): TransferEventFilter;
  };

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

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

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

    allowInitializePath(
      origin: OriginStruct,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

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

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

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

    combineOptions(
      _eid: BigNumberish,
      _msgType: BigNumberish,
      _extraOptions: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

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

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

    enforcedOptions(
      eid: BigNumberish,
      msgType: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isComposeMsgSender(
      arg0: OriginStruct,
      arg1: BytesLike,
      _sender: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    lzReceive(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    lzReceiveAndRevert(
      _packets: InboundPacketStruct[],
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    lzReceiveSimulate(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    mint(
      _to: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

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

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

    nextNonce(
      arg0: BigNumberish,
      arg1: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

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

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

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

    peers(eid: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>;

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

    quoteOFT(
      _sendParam: SendParamStruct,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    quoteSend(
      _sendParam: SendParamStruct,
      _payInLzToken: boolean,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

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

    send(
      _sendParam: SendParamStruct,
      _fee: MessagingFeeStruct,
      _refundAddress: string,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<BigNumber>;

    setDelegate(
      _delegate: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setEnforcedOptions(
      _enforcedOptions: EnforcedOptionParamStruct[],
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setMsgInspector(
      _msgInspector: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

    setPreCrime(
      _preCrime: string,
      overrides?: Overrides & { from?: string }
    ): Promise<BigNumber>;

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

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

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

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

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

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

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

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

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

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

    allowInitializePath(
      origin: OriginStruct,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

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

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

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

    combineOptions(
      _eid: BigNumberish,
      _msgType: BigNumberish,
      _extraOptions: BytesLike,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

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

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

    enforcedOptions(
      eid: BigNumberish,
      msgType: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isComposeMsgSender(
      arg0: OriginStruct,
      arg1: BytesLike,
      _sender: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    lzReceive(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    lzReceiveAndRevert(
      _packets: InboundPacketStruct[],
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    lzReceiveSimulate(
      _origin: OriginStruct,
      _guid: BytesLike,
      _message: BytesLike,
      _executor: string,
      _extraData: BytesLike,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    mint(
      _to: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

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

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

    nextNonce(
      arg0: BigNumberish,
      arg1: BytesLike,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

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

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

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

    peers(
      eid: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

    quoteOFT(
      _sendParam: SendParamStruct,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    quoteSend(
      _sendParam: SendParamStruct,
      _payInLzToken: boolean,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

    send(
      _sendParam: SendParamStruct,
      _fee: MessagingFeeStruct,
      _refundAddress: string,
      overrides?: PayableOverrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setDelegate(
      _delegate: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setEnforcedOptions(
      _enforcedOptions: EnforcedOptionParamStruct[],
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setMsgInspector(
      _msgInspector: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setPeer(
      _eid: BigNumberish,
      _peer: BytesLike,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

    setPreCrime(
      _preCrime: string,
      overrides?: Overrides & { from?: string }
    ): Promise<PopulatedTransaction>;

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

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

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

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

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

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

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