public final class kotlinx/coroutines/debug/CoroutineInfo {
	public final fun copy ()Lkotlinx/coroutines/debug/CoroutineInfo;
	public final fun getContext ()Lkotlin/coroutines/CoroutineContext;
	public final fun getCreationStackTrace ()Ljava/util/List;
	public final fun getJob ()Lkotlinx/coroutines/Job;
	public final fun getState ()Lkotlinx/coroutines/debug/State;
	public final fun lastObservedStackTrace ()Ljava/util/List;
	public fun toString ()Ljava/lang/String;
}

public final class kotlinx/coroutines/debug/DebugProbes {
	public static final field INSTANCE Lkotlinx/coroutines/debug/DebugProbes;
	public final fun dumpCoroutines (Ljava/io/PrintStream;)V
	public static synthetic fun dumpCoroutines$default (Lkotlinx/coroutines/debug/DebugProbes;Ljava/io/PrintStream;ILjava/lang/Object;)V
	public final fun dumpCoroutinesInfo ()Ljava/util/List;
	public final fun getSanitizeStackTraces ()Z
	public final fun install ()V
	public final fun jobToString (Lkotlinx/coroutines/Job;)Ljava/lang/String;
	public final fun printJob (Lkotlinx/coroutines/Job;Ljava/io/PrintStream;)V
	public static synthetic fun printJob$default (Lkotlinx/coroutines/debug/DebugProbes;Lkotlinx/coroutines/Job;Ljava/io/PrintStream;ILjava/lang/Object;)V
	public final fun printScope (Lkotlinx/coroutines/CoroutineScope;Ljava/io/PrintStream;)V
	public static synthetic fun printScope$default (Lkotlinx/coroutines/debug/DebugProbes;Lkotlinx/coroutines/CoroutineScope;Ljava/io/PrintStream;ILjava/lang/Object;)V
	public final fun scopeToString (Lkotlinx/coroutines/CoroutineScope;)Ljava/lang/String;
	public final fun setSanitizeStackTraces (Z)V
	public final fun uninstall ()V
	public final fun withDebugProbes (Lkotlin/jvm/functions/Function0;)V
}

public final class kotlinx/coroutines/debug/State : java/lang/Enum {
	public static final field CREATED Lkotlinx/coroutines/debug/State;
	public static final field RUNNING Lkotlinx/coroutines/debug/State;
	public static final field SUSPENDED Lkotlinx/coroutines/debug/State;
	public static fun valueOf (Ljava/lang/String;)Lkotlinx/coroutines/debug/State;
	public static fun values ()[Lkotlinx/coroutines/debug/State;
}

public final class kotlinx/coroutines/debug/junit4/CoroutinesTimeout : org/junit/rules/TestRule {
	public static final field Companion Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout$Companion;
	public fun <init> (JZ)V
	public synthetic fun <init> (JZILkotlin/jvm/internal/DefaultConstructorMarker;)V
	public fun apply (Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;)Lorg/junit/runners/model/Statement;
}

public final class kotlinx/coroutines/debug/junit4/CoroutinesTimeout$Companion {
	public final fun seconds (IZ)Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout;
	public final fun seconds (JZ)Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout;
	public static synthetic fun seconds$default (Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout$Companion;IZILjava/lang/Object;)Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout;
	public static synthetic fun seconds$default (Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout$Companion;JZILjava/lang/Object;)Lkotlinx/coroutines/debug/junit4/CoroutinesTimeout;
}

