package

public fun test(): kotlin.Unit
public fun </*0*/ T : Copyable<T, U>, /*1*/ U : Builder<T>> T.copy(/*0*/ fn: U.() -> kotlin.Unit): T

public interface Builder</*0*/ out T> {
    public abstract fun build(): T
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

public interface Copyable</*0*/ out T, /*1*/ out U : Builder<T>> {
    public abstract fun builder(): U
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

public open class Foo : Copyable<Foo, Foo.FooBuilder> {
    public constructor Foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
    public final val x: kotlin.Int
    public final val y: kotlin.Int
    public open override /*1*/ fun builder(): Foo.FooBuilder
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String

    public open class FooBuilder : Builder<Foo> {
        public constructor FooBuilder(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
        public final var x: kotlin.Int
        public final var y: kotlin.Int
        public open override /*1*/ fun build(): Foo
        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
    }
}
