package Ġcom . ad wi . bet ty . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . math . round ĊĊ Ċ val Ġ< T > ĠT . exhaustive : ĠT ĊĠĠĠ Ġget () Ġ= Ġthis Ċ Ċ fun Ġ< T > Ġconcatenate ( var arg Ġlists : ĠList < T >): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn ĠlistOf (* lists ). flatten () Ċ } Ċ Ċ fun ĠDouble . round ( decimals : ĠInt ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġmultiplier Ġ= Ġ 1 . 0 ĊĠĠĠ Ġrepeat ( decimals ) Ġ{ Ġmultiplier Ġ*= Ġ 1 0 Ġ} ĊĠĠĠ Ġreturn Ġround ( this Ġ* Ġmultiplier ) Ġ/ Ġmultiplier Ċ } Ċ Ċ fun ĠAppCompatActivity . launch Coroutine ( body : Ġsuspend Ġ() Ġ-> ĠUnit ): ĠJob Ġ{ ĊĠĠĠ Ġreturn Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠViewModel . on Dispatcher ( dispatcher : ĠCor outine Dispatcher , Ġbody : Ġsuspend Ġ() Ġ-> ĠUnit ): ĠJob Ġ{ ĊĠĠĠ Ġreturn ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠ Ġ} Ċ }