// CHECK:
//   Mangled name: A
//   Public signature: /A|null[0]
open class A {
  // CHECK:
  //   Mangled name: A{}a
  //   Public signature: /A.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  open var a: ArrayList<Int>
    // CHECK JVM_IR:
    //   Mangled name: A#<get-a>(){}java.util.ArrayList<kotlin.Int>
    //   Public signature: /A.a.<get-a>|4132676009764314200[0]
    //   Public signature debug description: <get-a>(){}java.util.ArrayList<kotlin.Int>
    open get
    // CHECK:
    //   Mangled name: A#<set-a>(java.util.ArrayList<kotlin.Int>){}
    //   Public signature: /A.a.<set-a>|-6295462313976522503[0]
    //   Public signature debug description: <set-a>(java.util.ArrayList<kotlin.Int>){}
    open set

  // CHECK:
  //   Mangled name: A{}b
  //   Public signature: /A.b|772347207915745207[0]
  //   Public signature debug description: {}b
  open var b: HashSet<Any?>
    // CHECK JVM_IR:
    //   Mangled name: A#<get-b>(){}java.util.HashSet<kotlin.Any?>
    //   Public signature: /A.b.<get-b>|6977653555431687524[0]
    //   Public signature debug description: <get-b>(){}java.util.HashSet<kotlin.Any?>
    open get
    // CHECK:
    //   Mangled name: A#<set-b>(java.util.HashSet<kotlin.Any?>){}
    //   Public signature: /A.b.<set-b>|-8728130019825579370[0]
    //   Public signature debug description: <set-b>(java.util.HashSet<kotlin.Any?>){}
    open set

  // CHECK:
  //   Mangled name: A{}c
  //   Public signature: /A.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  open var c: IntArray
    // CHECK JVM_IR:
    //   Mangled name: A#<get-c>(){}kotlin.IntArray
    //   Public signature: /A.c.<get-c>|-4266900595727428954[0]
    //   Public signature debug description: <get-c>(){}kotlin.IntArray
    open get
    // CHECK:
    //   Mangled name: A#<set-c>(kotlin.IntArray){}
    //   Public signature: /A.c.<set-c>|6408806882265521793[0]
    //   Public signature debug description: <set-c>(kotlin.IntArray){}
    open set

  // CHECK:
  //   Mangled name: A{}d
  //   Public signature: /A.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  open var d: Array<out String>
    // CHECK JVM_IR:
    //   Mangled name: A#<get-d>(){}kotlin.Array<out|kotlin.String>
    //   Public signature: /A.d.<get-d>|-5814496384501123578[0]
    //   Public signature debug description: <get-d>(){}kotlin.Array<out|kotlin.String>
    open get
    // CHECK:
    //   Mangled name: A#<set-d>(kotlin.Array<out|kotlin.String>){}
    //   Public signature: /A.d.<set-d>|160244433914068058[0]
    //   Public signature debug description: <set-d>(kotlin.Array<out|kotlin.String>){}
    open set

  // CHECK:
  //   Mangled name: A#<init>(){}
  //   Public signature: /A.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: A#bar(){}java.util.ArrayList<kotlin.Int>
  //   Public signature: /A.bar|3123552224271008170[0]
  //   Public signature debug description: bar(){}java.util.ArrayList<kotlin.Int>
  open fun bar(): ArrayList<Int>

  // CHECK JVM_IR:
  //   Mangled name: A#bar2(){}java.util.HashSet<kotlin.Any?>
  //   Public signature: /A.bar2|-6053596670982807099[0]
  //   Public signature debug description: bar2(){}java.util.HashSet<kotlin.Any?>
  open fun bar2(): HashSet<Any?>

  // CHECK JVM_IR:
  //   Mangled name: A#bar3(){}kotlin.IntArray
  //   Public signature: /A.bar3|1311395800098768031[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray
  open fun bar3(): IntArray

  // CHECK JVM_IR:
  //   Mangled name: A#bar4(){}kotlin.Array<out|kotlin.String>
  //   Public signature: /A.bar4|2570925914263886272[0]
  //   Public signature debug description: bar4(){}kotlin.Array<out|kotlin.String>
  open fun bar4(): Array<out String>

  // CHECK:
  //   Mangled name: A#foo(java.util.ArrayList<kotlin.Int>){}
  //   Public signature: /A.foo|-787171505211988164[0]
  //   Public signature debug description: foo(java.util.ArrayList<kotlin.Int>){}
  open fun foo(a: ArrayList<Int>): Unit

  // CHECK:
  //   Mangled name: A#foo2(java.util.HashSet<kotlin.Any?>){}
  //   Public signature: /A.foo2|6915122236924631299[0]
  //   Public signature debug description: foo2(java.util.HashSet<kotlin.Any?>){}
  open fun foo2(b: HashSet<Any?>): Unit

  // CHECK:
  //   Mangled name: A#foo3(kotlin.IntArray){}
  //   Public signature: /A.foo3|-6559814817510685824[0]
  //   Public signature debug description: foo3(kotlin.IntArray){}
  open fun foo3(c: IntArray): Unit

  // CHECK:
  //   Mangled name: A#foo4(kotlin.Array<out|kotlin.String>){}
  //   Public signature: /A.foo4|5671374947764223348[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String>){}
  open fun foo4(d: Array<out String>): Unit

}

// CHECK:
//   Mangled name: B
//   Public signature: /B|null[0]
class B : Java1 {
  // CHECK:
  //   Mangled name: B#<init>(){}
  //   Public signature: /B.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: B#bar(){}java.util.ArrayList<kotlin.Int>
  //   Public signature: /B.bar|3123552224271008170[0]
  //   Public signature debug description: bar(){}java.util.ArrayList<kotlin.Int>
  /* fake */ override fun bar(): ArrayList<Int>

  // CHECK JVM_IR:
  //   Mangled name: B#bar2(){}java.util.HashSet<kotlin.Any?>
  //   Public signature: /B.bar2|-6053596670982807099[0]
  //   Public signature debug description: bar2(){}java.util.HashSet<kotlin.Any?>
  /* fake */ override fun bar2(): HashSet<Any?>

  // CHECK JVM_IR:
  //   Mangled name: B#bar3(){}kotlin.IntArray
  //   Public signature: /B.bar3|1311395800098768031[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray
  /* fake */ override fun bar3(): IntArray

  // CHECK JVM_IR:
  //   Mangled name: B#bar4(){}kotlin.Array<out|kotlin.String>
  //   Public signature: /B.bar4|2570925914263886272[0]
  //   Public signature debug description: bar4(){}kotlin.Array<out|kotlin.String>
  /* fake */ override fun bar4(): Array<out String>

  // CHECK:
  //   Mangled name: B#foo(java.util.ArrayList<kotlin.Int>){}
  //   Public signature: /B.foo|-787171505211988164[0]
  //   Public signature debug description: foo(java.util.ArrayList<kotlin.Int>){}
  /* fake */ override fun foo(a: ArrayList<Int>): Unit

  // CHECK:
  //   Mangled name: B#foo2(java.util.HashSet<kotlin.Any?>){}
  //   Public signature: /B.foo2|6915122236924631299[0]
  //   Public signature debug description: foo2(java.util.HashSet<kotlin.Any?>){}
  /* fake */ override fun foo2(b: HashSet<Any?>): Unit

  // CHECK:
  //   Mangled name: B#foo3(kotlin.IntArray){}
  //   Public signature: /B.foo3|-6559814817510685824[0]
  //   Public signature debug description: foo3(kotlin.IntArray){}
  /* fake */ override fun foo3(c: IntArray): Unit

  // CHECK:
  //   Mangled name: B#foo4(kotlin.Array<out|kotlin.String>){}
  //   Public signature: /B.foo4|5671374947764223348[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String>){}
  /* fake */ override fun foo4(d: Array<out String>): Unit

  // CHECK:
  //   Mangled name: B{}a
  //   Public signature: /B.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  /* fake */ override var a: ArrayList<Int>
    // CHECK JVM_IR:
    //   Mangled name: B#<get-a>(){}java.util.ArrayList<kotlin.Int>
    //   Public signature: /B.a.<get-a>|4132676009764314200[0]
    //   Public signature debug description: <get-a>(){}java.util.ArrayList<kotlin.Int>
    /* fake */ override get(): ArrayList<Int>
    // CHECK:
    //   Mangled name: B#<set-a>(java.util.ArrayList<kotlin.Int>){}
    //   Public signature: /B.a.<set-a>|-6295462313976522503[0]
    //   Public signature debug description: <set-a>(java.util.ArrayList<kotlin.Int>){}
    /* fake */ override set(<set-?>: ArrayList<Int>): Unit

  // CHECK:
  //   Mangled name: B{}b
  //   Public signature: /B.b|772347207915745207[0]
  //   Public signature debug description: {}b
  /* fake */ override var b: HashSet<Any?>
    // CHECK JVM_IR:
    //   Mangled name: B#<get-b>(){}java.util.HashSet<kotlin.Any?>
    //   Public signature: /B.b.<get-b>|6977653555431687524[0]
    //   Public signature debug description: <get-b>(){}java.util.HashSet<kotlin.Any?>
    /* fake */ override get(): HashSet<Any?>
    // CHECK:
    //   Mangled name: B#<set-b>(java.util.HashSet<kotlin.Any?>){}
    //   Public signature: /B.b.<set-b>|-8728130019825579370[0]
    //   Public signature debug description: <set-b>(java.util.HashSet<kotlin.Any?>){}
    /* fake */ override set(<set-?>: HashSet<Any?>): Unit

  // CHECK:
  //   Mangled name: B{}c
  //   Public signature: /B.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  /* fake */ override var c: IntArray
    // CHECK JVM_IR:
    //   Mangled name: B#<get-c>(){}kotlin.IntArray
    //   Public signature: /B.c.<get-c>|-4266900595727428954[0]
    //   Public signature debug description: <get-c>(){}kotlin.IntArray
    /* fake */ override get(): IntArray
    // CHECK:
    //   Mangled name: B#<set-c>(kotlin.IntArray){}
    //   Public signature: /B.c.<set-c>|6408806882265521793[0]
    //   Public signature debug description: <set-c>(kotlin.IntArray){}
    /* fake */ override set(<set-?>: IntArray): Unit

  // CHECK:
  //   Mangled name: B{}d
  //   Public signature: /B.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  /* fake */ override var d: Array<out String>
    // CHECK JVM_IR:
    //   Mangled name: B#<get-d>(){}kotlin.Array<out|kotlin.String>
    //   Public signature: /B.d.<get-d>|-5814496384501123578[0]
    //   Public signature debug description: <get-d>(){}kotlin.Array<out|kotlin.String>
    /* fake */ override get(): Array<out String>
    // CHECK:
    //   Mangled name: B#<set-d>(kotlin.Array<out|kotlin.String>){}
    //   Public signature: /B.d.<set-d>|160244433914068058[0]
    //   Public signature debug description: <set-d>(kotlin.Array<out|kotlin.String>){}
    /* fake */ override set(<set-?>: Array<out String>): Unit

}

// CHECK:
//   Mangled name: C
//   Public signature: /C|null[0]
class C : Java1 {
  // CHECK:
  //   Mangled name: C#<init>(){}
  //   Public signature: /C.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: C#bar(){}java.util.ArrayList<kotlin.Int>
  //   Public signature: /C.bar|3123552224271008170[0]
  //   Public signature debug description: bar(){}java.util.ArrayList<kotlin.Int>
  override fun bar(): ArrayList<Int>

  // CHECK JVM_IR:
  //   Mangled name: C#bar2(){}java.util.HashSet<kotlin.Any?>
  //   Public signature: /C.bar2|-6053596670982807099[0]
  //   Public signature debug description: bar2(){}java.util.HashSet<kotlin.Any?>
  override fun bar2(): HashSet<Any?>

  // CHECK JVM_IR:
  //   Mangled name: C#bar3(){}kotlin.IntArray
  //   Public signature: /C.bar3|1311395800098768031[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray
  override fun bar3(): IntArray

  // CHECK JVM_IR:
  //   Mangled name: C#bar4(){}kotlin.Array<out|kotlin.String>
  //   Public signature: /C.bar4|2570925914263886272[0]
  //   Public signature debug description: bar4(){}kotlin.Array<out|kotlin.String>
  override fun bar4(): Array<out String>

  // CHECK:
  //   Mangled name: C#foo(java.util.ArrayList<kotlin.Int>){}
  //   Public signature: /C.foo|-787171505211988164[0]
  //   Public signature debug description: foo(java.util.ArrayList<kotlin.Int>){}
  override fun foo(a: ArrayList<Int>): Unit

  // CHECK:
  //   Mangled name: C#foo2(java.util.HashSet<kotlin.Any?>){}
  //   Public signature: /C.foo2|6915122236924631299[0]
  //   Public signature debug description: foo2(java.util.HashSet<kotlin.Any?>){}
  override fun foo2(b: HashSet<Any?>): Unit

  // CHECK:
  //   Mangled name: C#foo3(kotlin.IntArray){}
  //   Public signature: /C.foo3|-6559814817510685824[0]
  //   Public signature debug description: foo3(kotlin.IntArray){}
  override fun foo3(c: IntArray): Unit

  // CHECK:
  //   Mangled name: C#foo4(kotlin.Array<out|kotlin.String>){}
  //   Public signature: /C.foo4|5671374947764223348[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String>){}
  override fun foo4(d: Array<out String>): Unit

  // CHECK:
  //   Mangled name: C{}a
  //   Public signature: /C.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  override var a: ArrayList<Int>
    // CHECK JVM_IR:
    //   Mangled name: C#<get-a>(){}java.util.ArrayList<kotlin.Int>
    //   Public signature: /C.a.<get-a>|4132676009764314200[0]
    //   Public signature debug description: <get-a>(){}java.util.ArrayList<kotlin.Int>
    override get(): ArrayList<Int>
    // CHECK:
    //   Mangled name: C#<set-a>(java.util.ArrayList<kotlin.Int>){}
    //   Public signature: /C.a.<set-a>|-6295462313976522503[0]
    //   Public signature debug description: <set-a>(java.util.ArrayList<kotlin.Int>){}
    override set(value: ArrayList<Int>): Unit

  // CHECK:
  //   Mangled name: C{}b
  //   Public signature: /C.b|772347207915745207[0]
  //   Public signature debug description: {}b
  override var b: HashSet<Any?>
    // CHECK JVM_IR:
    //   Mangled name: C#<get-b>(){}java.util.HashSet<kotlin.Any?>
    //   Public signature: /C.b.<get-b>|6977653555431687524[0]
    //   Public signature debug description: <get-b>(){}java.util.HashSet<kotlin.Any?>
    override get(): HashSet<Any?>
    // CHECK:
    //   Mangled name: C#<set-b>(java.util.HashSet<kotlin.Any?>){}
    //   Public signature: /C.b.<set-b>|-8728130019825579370[0]
    //   Public signature debug description: <set-b>(java.util.HashSet<kotlin.Any?>){}
    override set(value: HashSet<Any?>): Unit

  // CHECK:
  //   Mangled name: C{}c
  //   Public signature: /C.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  override var c: IntArray
    // CHECK JVM_IR:
    //   Mangled name: C#<get-c>(){}kotlin.IntArray
    //   Public signature: /C.c.<get-c>|-4266900595727428954[0]
    //   Public signature debug description: <get-c>(){}kotlin.IntArray
    override get(): IntArray
    // CHECK:
    //   Mangled name: C#<set-c>(kotlin.IntArray){}
    //   Public signature: /C.c.<set-c>|6408806882265521793[0]
    //   Public signature debug description: <set-c>(kotlin.IntArray){}
    override set(value: IntArray): Unit

  // CHECK:
  //   Mangled name: C{}d
  //   Public signature: /C.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  override var d: Array<out String>
    // CHECK JVM_IR:
    //   Mangled name: C#<get-d>(){}kotlin.Array<out|kotlin.String>
    //   Public signature: /C.d.<get-d>|-5814496384501123578[0]
    //   Public signature debug description: <get-d>(){}kotlin.Array<out|kotlin.String>
    override get(): Array<out String>
    // CHECK:
    //   Mangled name: C#<set-d>(kotlin.Array<out|kotlin.String>){}
    //   Public signature: /C.d.<set-d>|160244433914068058[0]
    //   Public signature debug description: <set-d>(kotlin.Array<out|kotlin.String>){}
    override set(value: Array<out String>): Unit

}

// CHECK:
//   Mangled name: D
//   Public signature: /D|null[0]
abstract class D : Java3 {
  // CHECK:
  //   Mangled name: D#<init>(){}
  //   Public signature: /D.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: D#bar(){}kotlin.collections.MutableList<kotlin.Int?>?
  //   Public signature: /D.bar|-1114015493624990905[0]
  //   Public signature debug description: bar(){}kotlin.collections.MutableList<kotlin.Int?>?
  abstract /* fake */ override fun bar(): MutableList<Int?>?

  // CHECK JVM_IR:
  //   Mangled name: D#bar2(){}kotlin.collections.MutableSet<kotlin.Any?>?
  //   Public signature: /D.bar2|-2873137878466437571[0]
  //   Public signature debug description: bar2(){}kotlin.collections.MutableSet<kotlin.Any?>?
  abstract /* fake */ override fun bar2(): MutableSet<Any?>?

  // CHECK JVM_IR:
  //   Mangled name: D#bar3(){}kotlin.IntArray?
  //   Public signature: /D.bar3|8039016854090168633[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray?
  abstract /* fake */ override fun bar3(): IntArray?

  // CHECK JVM_IR:
  //   Mangled name: D#bar4(){}kotlin.Array<out|kotlin.String?>?
  //   Public signature: /D.bar4|8506343176403750960[0]
  //   Public signature debug description: bar4(){}kotlin.Array<out|kotlin.String?>?
  abstract /* fake */ override fun bar4(): Array<out String?>?

  // CHECK:
  //   Mangled name: D#foo(kotlin.collections.MutableList<kotlin.Int?>?){}
  //   Public signature: /D.foo|-3600187289102144184[0]
  //   Public signature debug description: foo(kotlin.collections.MutableList<kotlin.Int?>?){}
  abstract /* fake */ override fun foo(a: MutableList<Int?>?): Unit

  // CHECK:
  //   Mangled name: D#foo2(kotlin.collections.MutableSet<kotlin.Any?>?){}
  //   Public signature: /D.foo2|7094192972215394930[0]
  //   Public signature debug description: foo2(kotlin.collections.MutableSet<kotlin.Any?>?){}
  abstract /* fake */ override fun foo2(c: MutableSet<Any?>?): Unit

  // CHECK:
  //   Mangled name: D#foo3(kotlin.IntArray?){}
  //   Public signature: /D.foo3|9165439092912336634[0]
  //   Public signature debug description: foo3(kotlin.IntArray?){}
  abstract /* fake */ override fun foo3(d: IntArray?): Unit

  // CHECK:
  //   Mangled name: D#foo4(kotlin.Array<out|kotlin.String?>?){}
  //   Public signature: /D.foo4|1672704619806915997[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String?>?){}
  abstract /* fake */ override fun foo4(e: Array<out String?>?): Unit

}

// CHECK:
//   Mangled name: E
//   Public signature: /E|null[0]
class E : Java3 {
  // CHECK:
  //   Mangled name: E#<init>(){}
  //   Public signature: /E.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: E#bar(){}kotlin.collections.MutableList<kotlin.Int>
  //   Public signature: /E.bar|5423197504340908737[0]
  //   Public signature debug description: bar(){}kotlin.collections.MutableList<kotlin.Int>
  override fun bar(): MutableList<Int>

  // CHECK JVM_IR:
  //   Mangled name: E#bar2(){}kotlin.collections.MutableSet<kotlin.Any>
  //   Public signature: /E.bar2|6895257317561786542[0]
  //   Public signature debug description: bar2(){}kotlin.collections.MutableSet<kotlin.Any>
  override fun bar2(): MutableSet<Any>

  // CHECK JVM_IR:
  //   Mangled name: E#bar3(){}kotlin.IntArray
  //   Public signature: /E.bar3|1311395800098768031[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray
  override fun bar3(): IntArray

  // CHECK JVM_IR:
  //   Mangled name: E#bar4(){}kotlin.Array<kotlin.String>
  //   Public signature: /E.bar4|-822819057820886026[0]
  //   Public signature debug description: bar4(){}kotlin.Array<kotlin.String>
  override fun bar4(): Array<String>

  // CHECK:
  //   Mangled name: E#foo(kotlin.collections.MutableList<kotlin.Int>?){}
  //   Public signature: /E.foo|1154826910735753439[0]
  //   Public signature debug description: foo(kotlin.collections.MutableList<kotlin.Int>?){}
  override fun foo(a: MutableList<Int>?): Unit

  // CHECK:
  //   Mangled name: E#foo2(kotlin.collections.MutableSet<kotlin.Any>?){}
  //   Public signature: /E.foo2|-3725789332454442163[0]
  //   Public signature debug description: foo2(kotlin.collections.MutableSet<kotlin.Any>?){}
  override fun foo2(c: MutableSet<Any>?): Unit

  // CHECK:
  //   Mangled name: E#foo3(kotlin.IntArray?){}
  //   Public signature: /E.foo3|9165439092912336634[0]
  //   Public signature debug description: foo3(kotlin.IntArray?){}
  override fun foo3(d: IntArray?): Unit

  // CHECK:
  //   Mangled name: E#foo4(kotlin.Array<out|kotlin.String>?){}
  //   Public signature: /E.foo4|-5434745432365457110[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String>?){}
  override fun foo4(e: Array<out String>?): Unit

}

// CHECK:
//   Mangled name: KotlinInterface
//   Public signature: /KotlinInterface|null[0]
interface KotlinInterface : Java2 {
  // CHECK JVM_IR:
  //   Mangled name: KotlinInterface#bar(){}kotlin.collections.MutableList<kotlin.Int?>?
  //   Public signature: /KotlinInterface.bar|-1114015493624990905[0]
  //   Public signature debug description: bar(){}kotlin.collections.MutableList<kotlin.Int?>?
  abstract /* fake */ override fun bar(): MutableList<Int?>?

  // CHECK JVM_IR:
  //   Mangled name: KotlinInterface#bar2(){}kotlin.collections.MutableSet<kotlin.Any?>?
  //   Public signature: /KotlinInterface.bar2|-2873137878466437571[0]
  //   Public signature debug description: bar2(){}kotlin.collections.MutableSet<kotlin.Any?>?
  abstract /* fake */ override fun bar2(): MutableSet<Any?>?

  // CHECK JVM_IR:
  //   Mangled name: KotlinInterface#bar3(){}kotlin.IntArray?
  //   Public signature: /KotlinInterface.bar3|8039016854090168633[0]
  //   Public signature debug description: bar3(){}kotlin.IntArray?
  abstract /* fake */ override fun bar3(): IntArray?

  // CHECK JVM_IR:
  //   Mangled name: KotlinInterface#bar4(){}kotlin.Array<out|kotlin.String?>?
  //   Public signature: /KotlinInterface.bar4|8506343176403750960[0]
  //   Public signature debug description: bar4(){}kotlin.Array<out|kotlin.String?>?
  abstract /* fake */ override fun bar4(): Array<out String?>?

  // CHECK:
  //   Mangled name: KotlinInterface#foo(kotlin.collections.MutableList<kotlin.Int?>?){}
  //   Public signature: /KotlinInterface.foo|-3600187289102144184[0]
  //   Public signature debug description: foo(kotlin.collections.MutableList<kotlin.Int?>?){}
  abstract /* fake */ override fun foo(a: MutableList<Int?>?): Unit

  // CHECK:
  //   Mangled name: KotlinInterface#foo2(kotlin.collections.MutableSet<kotlin.Any?>?){}
  //   Public signature: /KotlinInterface.foo2|7094192972215394930[0]
  //   Public signature debug description: foo2(kotlin.collections.MutableSet<kotlin.Any?>?){}
  abstract /* fake */ override fun foo2(c: MutableSet<Any?>?): Unit

  // CHECK:
  //   Mangled name: KotlinInterface#foo3(kotlin.IntArray?){}
  //   Public signature: /KotlinInterface.foo3|9165439092912336634[0]
  //   Public signature debug description: foo3(kotlin.IntArray?){}
  abstract /* fake */ override fun foo3(d: IntArray?): Unit

  // CHECK:
  //   Mangled name: KotlinInterface#foo4(kotlin.Array<out|kotlin.String?>?){}
  //   Public signature: /KotlinInterface.foo4|1672704619806915997[0]
  //   Public signature debug description: foo4(kotlin.Array<out|kotlin.String?>?){}
  abstract /* fake */ override fun foo4(e: Array<out String?>?): Unit

}

// CHECK:
//   Mangled name: #test(B;C;D;E){}
//   Public signature: /test|-2264777070922935105[0]
//   Public signature debug description: test(B;C;D;E){}
fun test(b: B, c: C, d: D, e: E): Unit
