open class A {
    open val a = "OK"
}

class B : A() {
    override val a = "FAIL"
    fun foo() = "CRUSH"
}

class C {
    fun A?.complex(): String {
        if (this is B) return foo()
        else if (this != null) return a
        else return "???"
    }

    fun bar() = A().complex()
}

fun box() = C().bar()
