Kotlin null-safety — what do `?`, `?.`, `?:`, and `!!` mean? | LetsGit.IT