abstract class A : Number {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

}

class B : Number {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

  override fun doubleValue(): Double {
    return 4.0
  }

  override fun floatValue(): Float {
    return 3.0F
  }

  override fun intValue(): Int {
    return 1
  }

  override fun longValue(): Long {
    return 2L
  }

}

abstract class C : Number, Java2 {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

}

abstract class D : Number, Java2 {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

  override fun intValue(): Int {
    return 1
  }

  override fun longValue(): Long {
    return 2L
  }

}

abstract class E : Number, KotlinInterface {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

}

abstract class F : Number, KotlinInterface {
  constructor() /* primary */ {
    super/*Number*/()
    /* <init>() */

  }

  override fun doubleValue(): Double {
    return 4.0
  }

  override fun floatValue(): Float {
    return 3.0F
  }

}

abstract class G : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

abstract class H : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override fun toByte(): Byte {
    return 1B
  }

  override fun toDouble(): Double {
    return 1.0
  }

}

abstract class I : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

}

class J : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

  override fun toByte(): Byte {
    return 1B
  }

  override fun toShort(): Short {
    return 2S
  }

}

abstract class K : Java4 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

}

class L : Java4 {
  constructor() /* primary */ {
    super/*Java4*/()
    /* <init>() */

  }

  override fun doubleValue(): Double {
    return 4.0
  }

  override fun floatValue(): Float {
    return 3.0F
  }

  override fun intValue(): Int {
    return 1
  }

  override fun longValue(): Long {
    return 2L
  }

}

class M : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

}

class N : Java5 {
  constructor() /* primary */ {
    super/*Java5*/()
    /* <init>() */

  }

  override fun intValue(): Int {
    return 10
  }

}

abstract class O : A, Java2 {
  constructor() /* primary */ {
    super/*A*/()
    /* <init>() */

  }

}

abstract class P : A, Java2 {
  constructor() /* primary */ {
    super/*A*/()
    /* <init>() */

  }

  override fun intValue(): Int {
    return 1
  }

  override fun longValue(): Long {
    return 2L
  }

}

abstract class Q : Java1, Java2 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

abstract class R : Java1, Java2 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override fun toInt(): Int {
    return 1
  }

}

interface KotlinInterface {
  abstract fun byteValue(): Byte

}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R) {
  a.shortValue() /*~> Unit */
  a.intValue() /*~> Unit */
  b.byteValue() /*~> Unit */
  b.longValue() /*~> Unit */
  c.intValue() /*~> Unit */
  d.intValue() /*~> Unit */
  d.longValue() /*~> Unit */
  e.byteValue() /*~> Unit */
  e.intValue() /*~> Unit */
  f.intValue() /*~> Unit */
  f.doubleValue() /*~> Unit */
  g.toShort() /*~> Unit */
  g.toByte() /*~> Unit */
  h.toShort() /*~> Unit */
  h.toInt() /*~> Unit */
  i.toInt() /*~> Unit */
  j.toByte() /*~> Unit */
  k.intValue() /*~> Unit */
  k.byteValue() /*~> Unit */
  l.intValue() /*~> Unit */
  l.doubleValue() /*~> Unit */
  m.intValue() /*~> Unit */
  m.doubleValue() /*~> Unit */
  n.intValue() /*~> Unit */
  o.intValue() /*~> Unit */
  o.byteValue() /*~> Unit */
  p.intValue() /*~> Unit */
  p.shortValue() /*~> Unit */
  q.intValue() /*~> Unit */
  q.toByte() /*~> Unit */
  r.intValue() /*~> Unit */
}
