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 MultiFeeDistribution {
    type RewardDataStruct = {
        token: PromiseOrValue<string>;
        amount: PromiseOrValue<BigNumberish>;
    };
    type RewardDataStructOutput = [string, BigNumber] & {
        token: string;
        amount: BigNumber;
    };
    type LockedBalanceStruct = {
        amount: PromiseOrValue<BigNumberish>;
        unlockTime: PromiseOrValue<BigNumberish>;
    };
    type LockedBalanceStructOutput = [BigNumber, BigNumber] & {
        amount: BigNumber;
        unlockTime: BigNumber;
    };
}
export interface RadiantCapitalPlatformFeesInterface extends utils.Interface {
    functions: {
        'addReward(address)': FunctionFragment;
        'claimableRewards(address)': FunctionFragment;
        'delegateExit(address)': FunctionFragment;
        'earnedBalances(address)': FunctionFragment;
        'exit(bool,address)': FunctionFragment;
        'exitDelegatee(address)': FunctionFragment;
        'getReward(address[])': FunctionFragment;
        'getRewardForDuration(address)': FunctionFragment;
        'incentivesController()': FunctionFragment;
        'lastTimeRewardApplicable(address)': FunctionFragment;
        'lockDuration()': FunctionFragment;
        'lockedBalances(address)': FunctionFragment;
        'lockedSupply()': FunctionFragment;
        'mint(address,uint256,bool)': FunctionFragment;
        'minters(address)': FunctionFragment;
        'mintersAreSet()': FunctionFragment;
        'owner()': FunctionFragment;
        'recoverERC20(address,uint256)': FunctionFragment;
        'renounceOwnership()': FunctionFragment;
        'rewardData(address)': FunctionFragment;
        'rewardLookback()': FunctionFragment;
        'rewardPerToken(address)': FunctionFragment;
        'rewardTokens(uint256)': FunctionFragment;
        'rewards(address,address)': FunctionFragment;
        'rewardsDuration()': FunctionFragment;
        'setIncentivesController(address)': FunctionFragment;
        'setMinters(address[])': FunctionFragment;
        'stake(uint256,bool,address)': FunctionFragment;
        'stakingToken()': FunctionFragment;
        'totalBalance(address)': FunctionFragment;
        'totalSupply()': FunctionFragment;
        'transferOwnership(address)': FunctionFragment;
        'unlockedBalance(address)': FunctionFragment;
        'userRewardPerTokenPaid(address,address)': FunctionFragment;
        'withdraw(uint256)': FunctionFragment;
        'withdrawExpiredLocks()': FunctionFragment;
        'withdrawableBalance(address)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'addReward' | 'claimableRewards' | 'delegateExit' | 'earnedBalances' | 'exit' | 'exitDelegatee' | 'getReward' | 'getRewardForDuration' | 'incentivesController' | 'lastTimeRewardApplicable' | 'lockDuration' | 'lockedBalances' | 'lockedSupply' | 'mint' | 'minters' | 'mintersAreSet' | 'owner' | 'recoverERC20' | 'renounceOwnership' | 'rewardData' | 'rewardLookback' | 'rewardPerToken' | 'rewardTokens' | 'rewards' | 'rewardsDuration' | 'setIncentivesController' | 'setMinters' | 'stake' | 'stakingToken' | 'totalBalance' | 'totalSupply' | 'transferOwnership' | 'unlockedBalance' | 'userRewardPerTokenPaid' | 'withdraw' | 'withdrawExpiredLocks' | 'withdrawableBalance'): FunctionFragment;
    encodeFunctionData(functionFragment: 'addReward', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'claimableRewards', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'delegateExit', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'earnedBalances', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'exit', values: [PromiseOrValue<boolean>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'exitDelegatee', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'getReward', values: [PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: 'getRewardForDuration', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'incentivesController', values?: undefined): string;
    encodeFunctionData(functionFragment: 'lastTimeRewardApplicable', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'lockDuration', values?: undefined): string;
    encodeFunctionData(functionFragment: 'lockedBalances', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'lockedSupply', values?: undefined): string;
    encodeFunctionData(functionFragment: 'mint', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<boolean>]): string;
    encodeFunctionData(functionFragment: 'minters', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'mintersAreSet', values?: undefined): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'recoverERC20', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'renounceOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'rewardData', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'rewardLookback', values?: undefined): string;
    encodeFunctionData(functionFragment: 'rewardPerToken', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'rewardTokens', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'rewards', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'rewardsDuration', values?: undefined): string;
    encodeFunctionData(functionFragment: 'setIncentivesController', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'setMinters', values: [PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: 'stake', values: [PromiseOrValue<BigNumberish>, PromiseOrValue<boolean>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'stakingToken', values?: undefined): string;
    encodeFunctionData(functionFragment: 'totalBalance', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'totalSupply', values?: undefined): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'unlockedBalance', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'userRewardPerTokenPaid', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'withdraw', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'withdrawExpiredLocks', values?: undefined): string;
    encodeFunctionData(functionFragment: 'withdrawableBalance', values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: 'addReward', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'claimableRewards', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'delegateExit', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'earnedBalances', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'exit', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'exitDelegatee', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getReward', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getRewardForDuration', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'incentivesController', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'lastTimeRewardApplicable', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'lockDuration', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'lockedBalances', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'lockedSupply', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'mint', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'minters', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'mintersAreSet', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'recoverERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'renounceOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewardData', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewardLookback', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewardPerToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewardTokens', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewards', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rewardsDuration', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setIncentivesController', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setMinters', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'stake', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'stakingToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'totalBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'totalSupply', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'unlockedBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'userRewardPerTokenPaid', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdraw', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawExpiredLocks', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawableBalance', data: BytesLike): Result;
    events: {
        'OwnershipTransferred(address,address)': EventFragment;
        'Recovered(address,uint256)': EventFragment;
        'RewardAdded(uint256)': EventFragment;
        'RewardPaid(address,address,uint256)': EventFragment;
        'RewardsDurationUpdated(address,uint256)': EventFragment;
        'Staked(address,uint256,bool)': EventFragment;
        'Withdrawn(address,uint256,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Recovered'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RewardAdded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RewardPaid'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RewardsDurationUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Staked'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Withdrawn'): EventFragment;
}
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export declare type OwnershipTransferredEvent = TypedEvent<[string, string], OwnershipTransferredEventObject>;
export declare type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface RecoveredEventObject {
    token: string;
    amount: BigNumber;
}
export declare type RecoveredEvent = TypedEvent<[string, BigNumber], RecoveredEventObject>;
export declare type RecoveredEventFilter = TypedEventFilter<RecoveredEvent>;
export interface RewardAddedEventObject {
    reward: BigNumber;
}
export declare type RewardAddedEvent = TypedEvent<[BigNumber], RewardAddedEventObject>;
export declare type RewardAddedEventFilter = TypedEventFilter<RewardAddedEvent>;
export interface RewardPaidEventObject {
    user: string;
    rewardsToken: string;
    reward: BigNumber;
}
export declare type RewardPaidEvent = TypedEvent<[string, string, BigNumber], RewardPaidEventObject>;
export declare type RewardPaidEventFilter = TypedEventFilter<RewardPaidEvent>;
export interface RewardsDurationUpdatedEventObject {
    token: string;
    newDuration: BigNumber;
}
export declare type RewardsDurationUpdatedEvent = TypedEvent<[string, BigNumber], RewardsDurationUpdatedEventObject>;
export declare type RewardsDurationUpdatedEventFilter = TypedEventFilter<RewardsDurationUpdatedEvent>;
export interface StakedEventObject {
    user: string;
    amount: BigNumber;
    locked: boolean;
}
export declare type StakedEvent = TypedEvent<[string, BigNumber, boolean], StakedEventObject>;
export declare type StakedEventFilter = TypedEventFilter<StakedEvent>;
export interface WithdrawnEventObject {
    user: string;
    receivedAmount: BigNumber;
    penaltyPaid: BigNumber;
}
export declare type WithdrawnEvent = TypedEvent<[string, BigNumber, BigNumber], WithdrawnEventObject>;
export declare type WithdrawnEventFilter = TypedEventFilter<WithdrawnEvent>;
export interface RadiantCapitalPlatformFees extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: RadiantCapitalPlatformFeesInterface;
    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: {
        addReward(_rewardsToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        claimableRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            MultiFeeDistribution.RewardDataStructOutput[]
        ] & {
            rewards: MultiFeeDistribution.RewardDataStructOutput[];
        }>;
        delegateExit(delegatee: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        earnedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            MultiFeeDistribution.LockedBalanceStructOutput[]
        ] & {
            total: BigNumber;
            earningsData: MultiFeeDistribution.LockedBalanceStructOutput[];
        }>;
        exit(claimRewards: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        exitDelegatee(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string]>;
        getReward(_rewardTokens: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        getRewardForDuration(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        incentivesController(overrides?: CallOverrides): Promise<[string]>;
        lastTimeRewardApplicable(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        lockDuration(overrides?: CallOverrides): Promise<[BigNumber]>;
        lockedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber,
            MultiFeeDistribution.LockedBalanceStructOutput[]
        ] & {
            total: BigNumber;
            unlockable: BigNumber;
            locked: BigNumber;
            lockData: MultiFeeDistribution.LockedBalanceStructOutput[];
        }>;
        lockedSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        mint(user: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, withPenalty: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        minters(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        mintersAreSet(overrides?: CallOverrides): Promise<[boolean]>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        recoverERC20(tokenAddress: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        rewardData(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber
        ] & {
            periodFinish: BigNumber;
            rewardRate: BigNumber;
            lastUpdateTime: BigNumber;
            rewardPerTokenStored: BigNumber;
            balance: BigNumber;
        }>;
        rewardLookback(overrides?: CallOverrides): Promise<[BigNumber]>;
        rewardPerToken(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        rewardTokens(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string]>;
        rewards(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        rewardsDuration(overrides?: CallOverrides): Promise<[BigNumber]>;
        setIncentivesController(_controller: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setMinters(_minters: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        stake(amount: PromiseOrValue<BigNumberish>, lock: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        stakingToken(overrides?: CallOverrides): Promise<[string]>;
        totalBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber] & {
            amount: BigNumber;
        }>;
        totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        unlockedBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber] & {
            amount: BigNumber;
        }>;
        userRewardPerTokenPaid(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        withdraw(amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawExpiredLocks(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawableBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            amount: BigNumber;
            penaltyAmount: BigNumber;
        }>;
    };
    addReward(_rewardsToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    claimableRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<MultiFeeDistribution.RewardDataStructOutput[]>;
    delegateExit(delegatee: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    earnedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
        BigNumber,
        MultiFeeDistribution.LockedBalanceStructOutput[]
    ] & {
        total: BigNumber;
        earningsData: MultiFeeDistribution.LockedBalanceStructOutput[];
    }>;
    exit(claimRewards: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    exitDelegatee(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
    getReward(_rewardTokens: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    getRewardForDuration(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    incentivesController(overrides?: CallOverrides): Promise<string>;
    lastTimeRewardApplicable(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    lockDuration(overrides?: CallOverrides): Promise<BigNumber>;
    lockedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber,
        BigNumber,
        MultiFeeDistribution.LockedBalanceStructOutput[]
    ] & {
        total: BigNumber;
        unlockable: BigNumber;
        locked: BigNumber;
        lockData: MultiFeeDistribution.LockedBalanceStructOutput[];
    }>;
    lockedSupply(overrides?: CallOverrides): Promise<BigNumber>;
    mint(user: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, withPenalty: PromiseOrValue<boolean>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    minters(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    mintersAreSet(overrides?: CallOverrides): Promise<boolean>;
    owner(overrides?: CallOverrides): Promise<string>;
    recoverERC20(tokenAddress: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    rewardData(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        periodFinish: BigNumber;
        rewardRate: BigNumber;
        lastUpdateTime: BigNumber;
        rewardPerTokenStored: BigNumber;
        balance: BigNumber;
    }>;
    rewardLookback(overrides?: CallOverrides): Promise<BigNumber>;
    rewardPerToken(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    rewardTokens(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    rewards(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    rewardsDuration(overrides?: CallOverrides): Promise<BigNumber>;
    setIncentivesController(_controller: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setMinters(_minters: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    stake(amount: PromiseOrValue<BigNumberish>, lock: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    stakingToken(overrides?: CallOverrides): Promise<string>;
    totalBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    unlockedBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    userRewardPerTokenPaid(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    withdraw(amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawExpiredLocks(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawableBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
        amount: BigNumber;
        penaltyAmount: BigNumber;
    }>;
    callStatic: {
        addReward(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        claimableRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<MultiFeeDistribution.RewardDataStructOutput[]>;
        delegateExit(delegatee: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        earnedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            MultiFeeDistribution.LockedBalanceStructOutput[]
        ] & {
            total: BigNumber;
            earningsData: MultiFeeDistribution.LockedBalanceStructOutput[];
        }>;
        exit(claimRewards: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        exitDelegatee(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
        getReward(_rewardTokens: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
        getRewardForDuration(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        incentivesController(overrides?: CallOverrides): Promise<string>;
        lastTimeRewardApplicable(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        lockDuration(overrides?: CallOverrides): Promise<BigNumber>;
        lockedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber,
            MultiFeeDistribution.LockedBalanceStructOutput[]
        ] & {
            total: BigNumber;
            unlockable: BigNumber;
            locked: BigNumber;
            lockData: MultiFeeDistribution.LockedBalanceStructOutput[];
        }>;
        lockedSupply(overrides?: CallOverrides): Promise<BigNumber>;
        mint(user: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, withPenalty: PromiseOrValue<boolean>, overrides?: CallOverrides): Promise<void>;
        minters(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        mintersAreSet(overrides?: CallOverrides): Promise<boolean>;
        owner(overrides?: CallOverrides): Promise<string>;
        recoverERC20(tokenAddress: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        rewardData(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber,
            BigNumber
        ] & {
            periodFinish: BigNumber;
            rewardRate: BigNumber;
            lastUpdateTime: BigNumber;
            rewardPerTokenStored: BigNumber;
            balance: BigNumber;
        }>;
        rewardLookback(overrides?: CallOverrides): Promise<BigNumber>;
        rewardPerToken(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rewardTokens(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
        rewards(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rewardsDuration(overrides?: CallOverrides): Promise<BigNumber>;
        setIncentivesController(_controller: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setMinters(_minters: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
        stake(amount: PromiseOrValue<BigNumberish>, lock: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        stakingToken(overrides?: CallOverrides): Promise<string>;
        totalBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        unlockedBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        userRewardPerTokenPaid(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        withdraw(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        withdrawExpiredLocks(overrides?: CallOverrides): Promise<void>;
        withdrawableBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            amount: BigNumber;
            penaltyAmount: BigNumber;
        }>;
    };
    filters: {
        'OwnershipTransferred(address,address)'(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        'Recovered(address,uint256)'(token?: null, amount?: null): RecoveredEventFilter;
        Recovered(token?: null, amount?: null): RecoveredEventFilter;
        'RewardAdded(uint256)'(reward?: null): RewardAddedEventFilter;
        RewardAdded(reward?: null): RewardAddedEventFilter;
        'RewardPaid(address,address,uint256)'(user?: PromiseOrValue<string> | null, rewardsToken?: PromiseOrValue<string> | null, reward?: null): RewardPaidEventFilter;
        RewardPaid(user?: PromiseOrValue<string> | null, rewardsToken?: PromiseOrValue<string> | null, reward?: null): RewardPaidEventFilter;
        'RewardsDurationUpdated(address,uint256)'(token?: null, newDuration?: null): RewardsDurationUpdatedEventFilter;
        RewardsDurationUpdated(token?: null, newDuration?: null): RewardsDurationUpdatedEventFilter;
        'Staked(address,uint256,bool)'(user?: PromiseOrValue<string> | null, amount?: null, locked?: null): StakedEventFilter;
        Staked(user?: PromiseOrValue<string> | null, amount?: null, locked?: null): StakedEventFilter;
        'Withdrawn(address,uint256,uint256)'(user?: PromiseOrValue<string> | null, receivedAmount?: null, penaltyPaid?: null): WithdrawnEventFilter;
        Withdrawn(user?: PromiseOrValue<string> | null, receivedAmount?: null, penaltyPaid?: null): WithdrawnEventFilter;
    };
    estimateGas: {
        addReward(_rewardsToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        claimableRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        delegateExit(delegatee: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        earnedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        exit(claimRewards: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        exitDelegatee(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getReward(_rewardTokens: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        getRewardForDuration(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        incentivesController(overrides?: CallOverrides): Promise<BigNumber>;
        lastTimeRewardApplicable(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        lockDuration(overrides?: CallOverrides): Promise<BigNumber>;
        lockedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        lockedSupply(overrides?: CallOverrides): Promise<BigNumber>;
        mint(user: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, withPenalty: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        minters(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        mintersAreSet(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        recoverERC20(tokenAddress: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        rewardData(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rewardLookback(overrides?: CallOverrides): Promise<BigNumber>;
        rewardPerToken(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rewardTokens(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        rewards(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        rewardsDuration(overrides?: CallOverrides): Promise<BigNumber>;
        setIncentivesController(_controller: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setMinters(_minters: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        stake(amount: PromiseOrValue<BigNumberish>, lock: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        stakingToken(overrides?: CallOverrides): Promise<BigNumber>;
        totalBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        unlockedBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        userRewardPerTokenPaid(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        withdraw(amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawExpiredLocks(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawableBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        addReward(_rewardsToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        claimableRewards(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        delegateExit(delegatee: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        earnedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        exit(claimRewards: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        exitDelegatee(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getReward(_rewardTokens: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        getRewardForDuration(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        incentivesController(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        lastTimeRewardApplicable(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        lockDuration(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        lockedBalances(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        lockedSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        mint(user: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, withPenalty: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        minters(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        mintersAreSet(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        recoverERC20(tokenAddress: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        rewardData(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rewardLookback(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rewardPerToken(_rewardsToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rewardTokens(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rewards(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        rewardsDuration(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        setIncentivesController(_controller: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setMinters(_minters: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        stake(amount: PromiseOrValue<BigNumberish>, lock: PromiseOrValue<boolean>, onBehalfOf: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        stakingToken(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        totalBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        unlockedBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        userRewardPerTokenPaid(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        withdraw(amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawExpiredLocks(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawableBalance(user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
