// CHECK:
//   Mangled name: A
//   Public signature: /A|null[0]
sealed class A : CharSequence {
  // CHECK:
  //   Mangled name: A.B
  //   Public signature: /A.B|null[0]
  data class B : A, CharSequence {
    // CHECK:
    //   Mangled name: A.B{}c
    //   Public signature: /A.B.c|-4416962153448040627[0]
    //   Public signature debug description: {}c
    val c: CharSequence
      // CHECK JVM_IR:
      //   Mangled name: A.B#<get-c>(){}kotlin.CharSequence
      //   Public signature: /A.B.c.<get-c>|7304122790316032774[0]
      //   Public signature debug description: <get-c>(){}kotlin.CharSequence
      // CHECK JS_IR NATIVE:
      //   Mangled name: A.B#<get-c>(){}
      //   Public signature: /A.B.c.<get-c>|2368736057102379596[0]
      //   Public signature debug description: <get-c>(){}
      get

    // CHECK:
    //   Mangled name: A.B#<init>(kotlin.CharSequence){}
    //   Public signature: /A.B.<init>|2804354480087813081[0]
    //   Public signature debug description: <init>(kotlin.CharSequence){}
    constructor(c: CharSequence) /* primary */
    // CHECK JVM_IR:
    //   Mangled name: A.B#get(kotlin.Int){}kotlin.Char
    //   Public signature: /A.B.get|6519934306502810002[0]
    //   Public signature debug description: get(kotlin.Int){}kotlin.Char
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#get(kotlin.Int){}
    //   Public signature: /A.B.get|-1406503945102116889[0]
    //   Public signature debug description: get(kotlin.Int){}
    override operator fun get(index: Int): Char

    // CHECK JVM_IR:
    //   Mangled name: A.B#subSequence(kotlin.Int;kotlin.Int){}kotlin.CharSequence
    //   Public signature: /A.B.subSequence|7954975239934934955[0]
    //   Public signature debug description: subSequence(kotlin.Int;kotlin.Int){}kotlin.CharSequence
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#subSequence(kotlin.Int;kotlin.Int){}
    //   Public signature: /A.B.subSequence|-1845048848187925290[0]
    //   Public signature debug description: subSequence(kotlin.Int;kotlin.Int){}
    override fun subSequence(startIndex: Int, endIndex: Int): CharSequence

    // CHECK JVM_IR:
    //   Mangled name: A.B#component1(){}kotlin.CharSequence
    //   Public signature: /A.B.component1|3907327938938556754[0]
    //   Public signature debug description: component1(){}kotlin.CharSequence
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#component1(){}
    //   Public signature: /A.B.component1|162597135895221648[0]
    //   Public signature debug description: component1(){}
    operator fun component1(): CharSequence

    // CHECK JVM_IR:
    //   Mangled name: A.B#copy(kotlin.CharSequence){}A.B
    //   Public signature: /A.B.copy|-126682590898406005[0]
    //   Public signature debug description: copy(kotlin.CharSequence){}A.B
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#copy(kotlin.CharSequence){}
    //   Public signature: /A.B.copy|4084600718380071781[0]
    //   Public signature debug description: copy(kotlin.CharSequence){}
    fun copy(c: CharSequence): B

    // CHECK JVM_IR:
    //   Mangled name: A.B#equals(kotlin.Any?){}kotlin.Boolean
    //   Public signature: /A.B.equals|722809408929142791[0]
    //   Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#equals(kotlin.Any?){}
    //   Public signature: /A.B.equals|4638265728071529943[0]
    //   Public signature debug description: equals(kotlin.Any?){}
    override operator fun equals(other: Any?): Boolean

    // CHECK JVM_IR:
    //   Mangled name: A.B#hashCode(){}kotlin.Int
    //   Public signature: /A.B.hashCode|-8048879360829830756[0]
    //   Public signature debug description: hashCode(){}kotlin.Int
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#hashCode(){}
    //   Public signature: /A.B.hashCode|3409210261493131192[0]
    //   Public signature debug description: hashCode(){}
    override fun hashCode(): Int

    // CHECK JVM_IR:
    //   Mangled name: A.B#toString(){}kotlin.String
    //   Public signature: /A.B.toString|6958853723545266802[0]
    //   Public signature debug description: toString(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: A.B#toString(){}
    //   Public signature: /A.B.toString|-1522858123163872138[0]
    //   Public signature debug description: toString(){}
    override fun toString(): String

    // CHECK:
    //   Mangled name: A.B{}length
    //   Public signature: /A.B.length|8693345930578737573[0]
    //   Public signature debug description: {}length
    override val length: Int
      // CHECK JVM_IR:
      //   Mangled name: A.B#<get-length>(){}kotlin.Int
      //   Public signature: /A.B.length.<get-length>|2176130084070422186[0]
      //   Public signature debug description: <get-length>(){}kotlin.Int
      // CHECK JS_IR NATIVE:
      //   Mangled name: A.B#<get-length>(){}
      //   Public signature: /A.B.length.<get-length>|-602852775465059526[0]
      //   Public signature debug description: <get-length>(){}
      override get(): Int

  }

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

  // CHECK JVM_IR:
  //   Mangled name: A#get(kotlin.Int){}kotlin.Char
  //   Public signature: /A.get|6519934306502810002[0]
  //   Public signature debug description: get(kotlin.Int){}kotlin.Char
  // CHECK JS_IR NATIVE:
  //   Mangled name: A#get(kotlin.Int){}
  //   Public signature: /A.get|-1406503945102116889[0]
  //   Public signature debug description: get(kotlin.Int){}
  abstract /* fake */ override operator fun get(index: Int): Char

  // CHECK JVM_IR:
  //   Mangled name: A#subSequence(kotlin.Int;kotlin.Int){}kotlin.CharSequence
  //   Public signature: /A.subSequence|7954975239934934955[0]
  //   Public signature debug description: subSequence(kotlin.Int;kotlin.Int){}kotlin.CharSequence
  // CHECK JS_IR NATIVE:
  //   Mangled name: A#subSequence(kotlin.Int;kotlin.Int){}
  //   Public signature: /A.subSequence|-1845048848187925290[0]
  //   Public signature debug description: subSequence(kotlin.Int;kotlin.Int){}
  abstract /* fake */ override fun subSequence(startIndex: Int, endIndex: Int): CharSequence

  // CHECK:
  //   Mangled name: A{}length
  //   Public signature: /A.length|8693345930578737573[0]
  //   Public signature debug description: {}length
  abstract /* fake */ override val length: Int
    // CHECK JVM_IR:
    //   Mangled name: A#<get-length>(){}kotlin.Int
    //   Public signature: /A.length.<get-length>|2176130084070422186[0]
    //   Public signature debug description: <get-length>(){}kotlin.Int
    // CHECK JS_IR NATIVE:
    //   Mangled name: A#<get-length>(){}
    //   Public signature: /A.length.<get-length>|-602852775465059526[0]
    //   Public signature debug description: <get-length>(){}
    abstract /* fake */ override get(): Int

}

