package test

public final class Outer</*0*/ X> {
    /*primary*/ public constructor Outer</*0*/ X>()

    public final inner class Inner</*0*/ Z> /*captured type parameters: /*1*/ X*/ {
        /*primary*/ public constructor Inner</*0*/ Z>()
        public typealias Test3</*0*/ C>  /*captured type parameters: /*1*/ Z, /*2*/ X*/ = test.Triple<X, Z, C>
    }

    public final inner class InnerTest1</*0*/ A> /*captured type parameters: /*1*/ X*/ : test.Pair<X, A> {
        /*primary*/ public constructor InnerTest1</*0*/ A>()
    }

    public final class Nested</*0*/ Y> {
        /*primary*/ public constructor Nested</*0*/ Y>()
        public typealias Test2</*0*/ B>  /*captured type parameters: /*1*/ Y*/ = test.Pair<Y, B>
    }
    public typealias Test1</*0*/ A>  /*captured type parameters: /*1*/ X*/ = test.Pair<X, A>
}

public open class Pair</*0*/ T1, /*1*/ T2> {
    /*primary*/ public constructor Pair</*0*/ T1, /*1*/ T2>()
}

public open class Triple</*0*/ T1, /*1*/ T2, /*2*/ T3> {
    /*primary*/ public constructor Triple</*0*/ T1, /*1*/ T2, /*2*/ T3>()
}
