class C<T : Any?> {
  constructor(t: T) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val t: T
    field = t
    get

  override fun hashCode(): Int {
    return <this>.<get-t>() as Int
  }

}

value class IC<TT : Any?> {
  constructor(c: C<TT>) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val c: C<TT>
    field = c
    get

  fun foo(): Int {
    return <this>.<get-c>().hashCode()
  }

  override fun toString(): String {
    return "IC(" + "c=" + <this>.#c + ")"
  }

  override fun hashCode(): Int {
    return <this>.#c.hashCode()
  }

  override operator fun equals(other: Any?): Boolean {
    when {
      other !is IC<TT> -> return false
    }
    val tmp0_other_with_cast: IC<TT> = other as IC<TT>
    when {
      EQEQ(arg0 = <this>.#c, arg1 = tmp0_other_with_cast.#c).not() -> return false
    }
    return true
  }

}

fun box(): String {
  val ic: IC<Int> = IC<Int>(c = C<Int>(t = 42))
  when {
    EQEQ(arg0 = ic.foo(), arg1 = 42).not() -> return "FAIL"
  }
  return "OK"
}
