import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, 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 FixidityLib {
    type FractionStruct = {
        value: PromiseOrValue<BigNumberish>;
    };
    type FractionStructOutput = [BigNumber] & {
        value: BigNumber;
    };
}
export declare namespace IBiPoolManager {
    type PoolConfigStruct = {
        spread: FixidityLib.FractionStruct;
        referenceRateFeedID: PromiseOrValue<string>;
        referenceRateResetFrequency: PromiseOrValue<BigNumberish>;
        minimumReports: PromiseOrValue<BigNumberish>;
        stablePoolResetSize: PromiseOrValue<BigNumberish>;
    };
    type PoolConfigStructOutput = [
        FixidityLib.FractionStructOutput,
        string,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        spread: FixidityLib.FractionStructOutput;
        referenceRateFeedID: string;
        referenceRateResetFrequency: BigNumber;
        minimumReports: BigNumber;
        stablePoolResetSize: BigNumber;
    };
    type PoolExchangeStruct = {
        asset0: PromiseOrValue<string>;
        asset1: PromiseOrValue<string>;
        pricingModule: PromiseOrValue<string>;
        bucket0: PromiseOrValue<BigNumberish>;
        bucket1: PromiseOrValue<BigNumberish>;
        lastBucketUpdate: PromiseOrValue<BigNumberish>;
        config: IBiPoolManager.PoolConfigStruct;
    };
    type PoolExchangeStructOutput = [
        string,
        string,
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        IBiPoolManager.PoolConfigStructOutput
    ] & {
        asset0: string;
        asset1: string;
        pricingModule: string;
        bucket0: BigNumber;
        bucket1: BigNumber;
        lastBucketUpdate: BigNumber;
        config: IBiPoolManager.PoolConfigStructOutput;
    };
}
export declare namespace IExchangeProvider {
    type ExchangeStruct = {
        exchangeId: PromiseOrValue<BytesLike>;
        assets: PromiseOrValue<string>[];
    };
    type ExchangeStructOutput = [string, string[]] & {
        exchangeId: string;
        assets: string[];
    };
}
export interface BiPoolManagerInterface extends utils.Interface {
    functions: {
        "CONSTANT_PRODUCT()": FunctionFragment;
        "CONSTANT_SUM()": FunctionFragment;
        "breakerBox()": FunctionFragment;
        "broker()": FunctionFragment;
        "createExchange((address,address,address,uint256,uint256,uint256,((uint256),address,uint256,uint256,uint256)))": FunctionFragment;
        "destroyExchange(bytes32,uint256)": FunctionFragment;
        "exchangeIds(uint256)": FunctionFragment;
        "exchanges(bytes32)": FunctionFragment;
        "getAmountIn(bytes32,address,address,uint256)": FunctionFragment;
        "getAmountOut(bytes32,address,address,uint256)": FunctionFragment;
        "getExchangeIds()": FunctionFragment;
        "getExchanges()": FunctionFragment;
        "getPoolExchange(bytes32)": FunctionFragment;
        "initialize(address,address,address,address)": FunctionFragment;
        "initialized()": FunctionFragment;
        "isOwner()": FunctionFragment;
        "owner()": FunctionFragment;
        "pricingModules(bytes32)": FunctionFragment;
        "renounceOwnership()": FunctionFragment;
        "reserve()": FunctionFragment;
        "setBreakerBox(address)": FunctionFragment;
        "setBroker(address)": FunctionFragment;
        "setPricingModules(bytes32[],address[])": FunctionFragment;
        "setReserve(address)": FunctionFragment;
        "setSortedOracles(address)": FunctionFragment;
        "sortedOracles()": FunctionFragment;
        "swapIn(bytes32,address,address,uint256)": FunctionFragment;
        "swapOut(bytes32,address,address,uint256)": FunctionFragment;
        "tokenPrecisionMultipliers(address)": FunctionFragment;
        "transferOwnership(address)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "CONSTANT_PRODUCT" | "CONSTANT_SUM" | "breakerBox" | "broker" | "createExchange" | "destroyExchange" | "exchangeIds" | "exchanges" | "getAmountIn" | "getAmountOut" | "getExchangeIds" | "getExchanges" | "getPoolExchange" | "initialize" | "initialized" | "isOwner" | "owner" | "pricingModules" | "renounceOwnership" | "reserve" | "setBreakerBox" | "setBroker" | "setPricingModules" | "setReserve" | "setSortedOracles" | "sortedOracles" | "swapIn" | "swapOut" | "tokenPrecisionMultipliers" | "transferOwnership"): FunctionFragment;
    encodeFunctionData(functionFragment: "CONSTANT_PRODUCT", values?: undefined): string;
    encodeFunctionData(functionFragment: "CONSTANT_SUM", values?: undefined): string;
    encodeFunctionData(functionFragment: "breakerBox", values?: undefined): string;
    encodeFunctionData(functionFragment: "broker", values?: undefined): string;
    encodeFunctionData(functionFragment: "createExchange", values: [IBiPoolManager.PoolExchangeStruct]): string;
    encodeFunctionData(functionFragment: "destroyExchange", values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "exchangeIds", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "exchanges", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "getAmountIn", values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "getAmountOut", values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "getExchangeIds", values?: undefined): string;
    encodeFunctionData(functionFragment: "getExchanges", values?: undefined): string;
    encodeFunctionData(functionFragment: "getPoolExchange", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "initialize", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: "initialized", values?: undefined): string;
    encodeFunctionData(functionFragment: "isOwner", values?: undefined): string;
    encodeFunctionData(functionFragment: "owner", values?: undefined): string;
    encodeFunctionData(functionFragment: "pricingModules", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string;
    encodeFunctionData(functionFragment: "reserve", values?: undefined): string;
    encodeFunctionData(functionFragment: "setBreakerBox", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setBroker", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setPricingModules", values: [PromiseOrValue<BytesLike>[], PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: "setReserve", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setSortedOracles", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "sortedOracles", values?: undefined): string;
    encodeFunctionData(functionFragment: "swapIn", values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "swapOut", values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "tokenPrecisionMultipliers", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "transferOwnership", values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: "CONSTANT_PRODUCT", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "CONSTANT_SUM", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "breakerBox", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "broker", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "destroyExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exchangeIds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exchanges", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getAmountIn", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getAmountOut", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getExchangeIds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getExchanges", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getPoolExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialized", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "isOwner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "pricingModules", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "reserve", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setBreakerBox", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setBroker", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setPricingModules", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setReserve", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setSortedOracles", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "sortedOracles", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swapIn", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swapOut", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "tokenPrecisionMultipliers", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result;
    events: {
        "BreakerBoxUpdated(address)": EventFragment;
        "BrokerUpdated(address)": EventFragment;
        "BucketsUpdated(bytes32,uint256,uint256)": EventFragment;
        "ExchangeCreated(bytes32,address,address,address)": EventFragment;
        "ExchangeDestroyed(bytes32,address,address,address)": EventFragment;
        "OwnershipTransferred(address,address)": EventFragment;
        "PricingModulesUpdated(bytes32[],address[])": EventFragment;
        "ReserveUpdated(address)": EventFragment;
        "SortedOraclesUpdated(address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "BreakerBoxUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "BrokerUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "BucketsUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExchangeCreated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExchangeDestroyed"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "PricingModulesUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ReserveUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "SortedOraclesUpdated"): EventFragment;
}
export interface BreakerBoxUpdatedEventObject {
    newBreakerBox: string;
}
export type BreakerBoxUpdatedEvent = TypedEvent<[
    string
], BreakerBoxUpdatedEventObject>;
export type BreakerBoxUpdatedEventFilter = TypedEventFilter<BreakerBoxUpdatedEvent>;
export interface BrokerUpdatedEventObject {
    newBroker: string;
}
export type BrokerUpdatedEvent = TypedEvent<[string], BrokerUpdatedEventObject>;
export type BrokerUpdatedEventFilter = TypedEventFilter<BrokerUpdatedEvent>;
export interface BucketsUpdatedEventObject {
    exchangeId: string;
    bucket0: BigNumber;
    bucket1: BigNumber;
}
export type BucketsUpdatedEvent = TypedEvent<[
    string,
    BigNumber,
    BigNumber
], BucketsUpdatedEventObject>;
export type BucketsUpdatedEventFilter = TypedEventFilter<BucketsUpdatedEvent>;
export interface ExchangeCreatedEventObject {
    exchangeId: string;
    asset0: string;
    asset1: string;
    pricingModule: string;
}
export type ExchangeCreatedEvent = TypedEvent<[
    string,
    string,
    string,
    string
], ExchangeCreatedEventObject>;
export type ExchangeCreatedEventFilter = TypedEventFilter<ExchangeCreatedEvent>;
export interface ExchangeDestroyedEventObject {
    exchangeId: string;
    asset0: string;
    asset1: string;
    pricingModule: string;
}
export type ExchangeDestroyedEvent = TypedEvent<[
    string,
    string,
    string,
    string
], ExchangeDestroyedEventObject>;
export type ExchangeDestroyedEventFilter = TypedEventFilter<ExchangeDestroyedEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<[
    string,
    string
], OwnershipTransferredEventObject>;
export type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface PricingModulesUpdatedEventObject {
    newIdentifiers: string[];
    newAddresses: string[];
}
export type PricingModulesUpdatedEvent = TypedEvent<[
    string[],
    string[]
], PricingModulesUpdatedEventObject>;
export type PricingModulesUpdatedEventFilter = TypedEventFilter<PricingModulesUpdatedEvent>;
export interface ReserveUpdatedEventObject {
    newReserve: string;
}
export type ReserveUpdatedEvent = TypedEvent<[
    string
], ReserveUpdatedEventObject>;
export type ReserveUpdatedEventFilter = TypedEventFilter<ReserveUpdatedEvent>;
export interface SortedOraclesUpdatedEventObject {
    newSortedOracles: string;
}
export type SortedOraclesUpdatedEvent = TypedEvent<[
    string
], SortedOraclesUpdatedEventObject>;
export type SortedOraclesUpdatedEventFilter = TypedEventFilter<SortedOraclesUpdatedEvent>;
export interface BiPoolManager extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: BiPoolManagerInterface;
    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: {
        CONSTANT_PRODUCT(overrides?: CallOverrides): Promise<[string]>;
        CONSTANT_SUM(overrides?: CallOverrides): Promise<[string]>;
        breakerBox(overrides?: CallOverrides): Promise<[string]>;
        broker(overrides?: CallOverrides): Promise<[string]>;
        createExchange(_exchange: IBiPoolManager.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        exchangeIds(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string]>;
        exchanges(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[
            string,
            string,
            string,
            BigNumber,
            BigNumber,
            BigNumber,
            IBiPoolManager.PoolConfigStructOutput
        ] & {
            asset0: string;
            asset1: string;
            pricingModule: string;
            bucket0: BigNumber;
            bucket1: BigNumber;
            lastBucketUpdate: BigNumber;
            config: IBiPoolManager.PoolConfigStructOutput;
        }>;
        getAmountIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber] & {
            amountIn: BigNumber;
        }>;
        getAmountOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber] & {
            amountOut: BigNumber;
        }>;
        getExchangeIds(overrides?: CallOverrides): Promise<[string[]]>;
        getExchanges(overrides?: CallOverrides): Promise<[
            IExchangeProvider.ExchangeStructOutput[]
        ] & {
            _exchanges: IExchangeProvider.ExchangeStructOutput[];
        }>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[
            IBiPoolManager.PoolExchangeStructOutput
        ] & {
            exchange: IBiPoolManager.PoolExchangeStructOutput;
        }>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _sortedOracles: PromiseOrValue<string>, _breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        initialized(overrides?: CallOverrides): Promise<[boolean]>;
        isOwner(overrides?: CallOverrides): Promise<[boolean]>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        pricingModules(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[string]>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        reserve(overrides?: CallOverrides): Promise<[string]>;
        setBreakerBox(_breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setPricingModules(identifiers: PromiseOrValue<BytesLike>[], modules: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setSortedOracles(_sortedOracles: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        sortedOracles(overrides?: CallOverrides): Promise<[string]>;
        swapIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        swapOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        tokenPrecisionMultipliers(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    CONSTANT_PRODUCT(overrides?: CallOverrides): Promise<string>;
    CONSTANT_SUM(overrides?: CallOverrides): Promise<string>;
    breakerBox(overrides?: CallOverrides): Promise<string>;
    broker(overrides?: CallOverrides): Promise<string>;
    createExchange(_exchange: IBiPoolManager.PoolExchangeStruct, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    exchangeIds(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    exchanges(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[
        string,
        string,
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        IBiPoolManager.PoolConfigStructOutput
    ] & {
        asset0: string;
        asset1: string;
        pricingModule: string;
        bucket0: BigNumber;
        bucket1: BigNumber;
        lastBucketUpdate: BigNumber;
        config: IBiPoolManager.PoolConfigStructOutput;
    }>;
    getAmountIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getAmountOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getExchangeIds(overrides?: CallOverrides): Promise<string[]>;
    getExchanges(overrides?: CallOverrides): Promise<IExchangeProvider.ExchangeStructOutput[]>;
    getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<IBiPoolManager.PoolExchangeStructOutput>;
    initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _sortedOracles: PromiseOrValue<string>, _breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    initialized(overrides?: CallOverrides): Promise<boolean>;
    isOwner(overrides?: CallOverrides): Promise<boolean>;
    owner(overrides?: CallOverrides): Promise<string>;
    pricingModules(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    reserve(overrides?: CallOverrides): Promise<string>;
    setBreakerBox(_breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setPricingModules(identifiers: PromiseOrValue<BytesLike>[], modules: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setSortedOracles(_sortedOracles: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    sortedOracles(overrides?: CallOverrides): Promise<string>;
    swapIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    swapOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    tokenPrecisionMultipliers(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        CONSTANT_PRODUCT(overrides?: CallOverrides): Promise<string>;
        CONSTANT_SUM(overrides?: CallOverrides): Promise<string>;
        breakerBox(overrides?: CallOverrides): Promise<string>;
        broker(overrides?: CallOverrides): Promise<string>;
        createExchange(_exchange: IBiPoolManager.PoolExchangeStruct, overrides?: CallOverrides): Promise<string>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<boolean>;
        exchangeIds(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
        exchanges(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[
            string,
            string,
            string,
            BigNumber,
            BigNumber,
            BigNumber,
            IBiPoolManager.PoolConfigStructOutput
        ] & {
            asset0: string;
            asset1: string;
            pricingModule: string;
            bucket0: BigNumber;
            bucket1: BigNumber;
            lastBucketUpdate: BigNumber;
            config: IBiPoolManager.PoolConfigStructOutput;
        }>;
        getAmountIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getAmountOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getExchangeIds(overrides?: CallOverrides): Promise<string[]>;
        getExchanges(overrides?: CallOverrides): Promise<IExchangeProvider.ExchangeStructOutput[]>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<IBiPoolManager.PoolExchangeStructOutput>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _sortedOracles: PromiseOrValue<string>, _breakerBox: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        initialized(overrides?: CallOverrides): Promise<boolean>;
        isOwner(overrides?: CallOverrides): Promise<boolean>;
        owner(overrides?: CallOverrides): Promise<string>;
        pricingModules(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        reserve(overrides?: CallOverrides): Promise<string>;
        setBreakerBox(_breakerBox: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setPricingModules(identifiers: PromiseOrValue<BytesLike>[], modules: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setSortedOracles(_sortedOracles: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        sortedOracles(overrides?: CallOverrides): Promise<string>;
        swapIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        swapOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        tokenPrecisionMultipliers(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "BreakerBoxUpdated(address)"(newBreakerBox?: null): BreakerBoxUpdatedEventFilter;
        BreakerBoxUpdated(newBreakerBox?: null): BreakerBoxUpdatedEventFilter;
        "BrokerUpdated(address)"(newBroker?: PromiseOrValue<string> | null): BrokerUpdatedEventFilter;
        BrokerUpdated(newBroker?: PromiseOrValue<string> | null): BrokerUpdatedEventFilter;
        "BucketsUpdated(bytes32,uint256,uint256)"(exchangeId?: PromiseOrValue<BytesLike> | null, bucket0?: null, bucket1?: null): BucketsUpdatedEventFilter;
        BucketsUpdated(exchangeId?: PromiseOrValue<BytesLike> | null, bucket0?: null, bucket1?: null): BucketsUpdatedEventFilter;
        "ExchangeCreated(bytes32,address,address,address)"(exchangeId?: PromiseOrValue<BytesLike> | null, asset0?: PromiseOrValue<string> | null, asset1?: PromiseOrValue<string> | null, pricingModule?: null): ExchangeCreatedEventFilter;
        ExchangeCreated(exchangeId?: PromiseOrValue<BytesLike> | null, asset0?: PromiseOrValue<string> | null, asset1?: PromiseOrValue<string> | null, pricingModule?: null): ExchangeCreatedEventFilter;
        "ExchangeDestroyed(bytes32,address,address,address)"(exchangeId?: PromiseOrValue<BytesLike> | null, asset0?: PromiseOrValue<string> | null, asset1?: PromiseOrValue<string> | null, pricingModule?: null): ExchangeDestroyedEventFilter;
        ExchangeDestroyed(exchangeId?: PromiseOrValue<BytesLike> | null, asset0?: PromiseOrValue<string> | null, asset1?: PromiseOrValue<string> | null, pricingModule?: null): ExchangeDestroyedEventFilter;
        "OwnershipTransferred(address,address)"(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        "PricingModulesUpdated(bytes32[],address[])"(newIdentifiers?: null, newAddresses?: null): PricingModulesUpdatedEventFilter;
        PricingModulesUpdated(newIdentifiers?: null, newAddresses?: null): PricingModulesUpdatedEventFilter;
        "ReserveUpdated(address)"(newReserve?: PromiseOrValue<string> | null): ReserveUpdatedEventFilter;
        ReserveUpdated(newReserve?: PromiseOrValue<string> | null): ReserveUpdatedEventFilter;
        "SortedOraclesUpdated(address)"(newSortedOracles?: PromiseOrValue<string> | null): SortedOraclesUpdatedEventFilter;
        SortedOraclesUpdated(newSortedOracles?: PromiseOrValue<string> | null): SortedOraclesUpdatedEventFilter;
    };
    estimateGas: {
        CONSTANT_PRODUCT(overrides?: CallOverrides): Promise<BigNumber>;
        CONSTANT_SUM(overrides?: CallOverrides): Promise<BigNumber>;
        breakerBox(overrides?: CallOverrides): Promise<BigNumber>;
        broker(overrides?: CallOverrides): Promise<BigNumber>;
        createExchange(_exchange: IBiPoolManager.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        exchangeIds(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        exchanges(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        getAmountIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getAmountOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getExchangeIds(overrides?: CallOverrides): Promise<BigNumber>;
        getExchanges(overrides?: CallOverrides): Promise<BigNumber>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _sortedOracles: PromiseOrValue<string>, _breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        initialized(overrides?: CallOverrides): Promise<BigNumber>;
        isOwner(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        pricingModules(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        reserve(overrides?: CallOverrides): Promise<BigNumber>;
        setBreakerBox(_breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setPricingModules(identifiers: PromiseOrValue<BytesLike>[], modules: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setSortedOracles(_sortedOracles: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        sortedOracles(overrides?: CallOverrides): Promise<BigNumber>;
        swapIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        swapOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        tokenPrecisionMultipliers(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        CONSTANT_PRODUCT(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        CONSTANT_SUM(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        breakerBox(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        broker(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        createExchange(_exchange: IBiPoolManager.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        exchangeIds(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        exchanges(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getAmountIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getAmountOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getExchangeIds(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getExchanges(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _sortedOracles: PromiseOrValue<string>, _breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        initialized(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        isOwner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        pricingModules(arg0: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        reserve(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        setBreakerBox(_breakerBox: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setPricingModules(identifiers: PromiseOrValue<BytesLike>[], modules: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setSortedOracles(_sortedOracles: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        sortedOracles(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        swapIn(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountIn: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        swapOut(exchangeId: PromiseOrValue<BytesLike>, tokenIn: PromiseOrValue<string>, tokenOut: PromiseOrValue<string>, amountOut: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        tokenPrecisionMultipliers(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
