abstract class A : HashMap<Boolean, Boolean>, Java1, SortedMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>()
    /* <init>() */

  }

}

abstract class B : HashMap<Boolean, Boolean>, Java1, SortedMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>()
    /* <init>() */

  }

  override fun remove(key: Boolean): Boolean? {
    return false
  }

}

abstract class C : HashMap<Boolean, Boolean>, KotlinInterface, SortedMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>()
    /* <init>() */

  }

}

abstract class D : HashMap<Boolean, Boolean>, KotlinInterface, SortedMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*HashMap*/<@FlexibleNullability Boolean?, @FlexibleNullability Boolean?>()
    /* <init>() */

  }

  override fun remove(key: Boolean): Boolean {
    return true
  }

}

abstract class E : KotlinInterface, SortedMap<Boolean, Boolean>, MutableMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class F : KotlinInterface, SortedMap<Boolean, Boolean>, MutableMap<Boolean, Boolean> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun remove(key: Any): Boolean {
    return true
  }

}

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

  }

}

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

  }

  override fun remove(key: Boolean?): Boolean? {
    return true
  }

}

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

  }

}

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

  }

  override fun remove(key: Boolean): Boolean {
    return true
  }

}

abstract class M : Java1, KotlinInterface3 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

abstract class N : Java1, KotlinInterface3 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  override fun remove(key: Boolean): Boolean? {
    return null
  }

}

interface KotlinInterface {
  abstract fun remove(key: Any): Boolean

}

interface KotlinInterface2 : SortedMap<Boolean, Boolean> {
}

interface KotlinInterface3 : MutableMap<Boolean, Boolean> {
}

fun test(a: A, b: B, c: C, d: D, e: E, f: F, i: I, j: J, k: K, l: L, m: M, n: N) {
  a.<get-size>() /*~> Unit */
  a.remove(key = null) /*~> Unit */
  a.remove(key = true) /*~> Unit */
  b.<get-size>() /*~> Unit */
  b.remove(key = null) /*~> Unit */
  b.remove(key = true) /*~> Unit */
  c.<get-size>() /*~> Unit */
  c.remove(key = null) /*~> Unit */
  c.remove(key = true) /*~> Unit */
  c.remove(key = "") /*~> Unit */
  d.<get-size>() /*~> Unit */
  d.remove(key = true) /*~> Unit */
  d.remove(key = "") /*~> Unit */
  e.<get-size>() /*~> Unit */
  e.remove(key = true) /*~> Unit */
  e.remove(key = "") /*~> Unit */
  e.remove(key = null) /*~> Unit */
  f.<get-size>() /*~> Unit */
  f.remove(key = true) /*~> Unit */
  f.remove(key = "") /*~> Unit */
  f.remove(key = null) /*~> Unit */
  i.<get-size>() /*~> Unit */
  i.remove(key = null) /*~> Unit */
  i.remove(key = true) /*~> Unit */
  i.remove(key = "") /*~> Unit */
  j.<get-size>() /*~> Unit */
  j.remove(key = null) /*~> Unit */
  j.remove(key = true) /*~> Unit */
  j.remove(key = "") /*~> Unit */
  k.<get-size>() /*~> Unit */
  k.remove(key = null) /*~> Unit */
  k.remove(key = true) /*~> Unit */
  k.remove(key = "") /*~> Unit */
  l.<get-size>() /*~> Unit */
  l.remove(key = null) /*~> Unit */
  l.remove(key = true) /*~> Unit */
  l.remove(key = "") /*~> Unit */
  m.<get-size>() /*~> Unit */
  m.remove(key = null) /*~> Unit */
  m.remove(key = true) /*~> Unit */
  m.remove(key = "") /*~> Unit */
  n.<get-size>() /*~> Unit */
  n.remove(key = null) /*~> Unit */
  n.remove(key = true) /*~> Unit */
  n.remove(key = "") /*~> Unit */
}
