package Ġmo e . sh iz uk u . manager . starter Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . User Manager Ċ import Ġandroid . system . Errno Exception Ċ import Ġandroid . system . Os Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġmo e . sh iz uk u . manager . Build Config Ċ import Ġmo e . sh iz uk u . manager . R Ċ import Ġmo e . sh iz uk u . manager . k tx . create Device Protected Storage Context Compat Ċ import Ġmo e . sh iz uk u . manager . k tx . log d Ċ import Ġri k ka . core . os . FileUtils Ċ import Ġri k ka . core . util . Build Utils Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ import Ġjava . util . zip . Zip File Ċ import Ġri k ka . sh iz uk u . Sh iz uk u Api Constants . SERVER _ VERSION Ġas Ġserver Version Ċ Ċ object ĠSt arter Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠSERVER _ DEX _ NAME Ġ= Ġ" server - v $ server Version . dex " ĊĠĠĠ Ġprivate Ġconst Ġval ĠST AR TER _ DEX _ NAME Ġ= Ġ" starter - v $ server Version . dex " ĊĠĠĠ Ġprivate Ġconst Ġval ĠST AR TER _ NAME Ġ= Ġ" starter - v $ server Version " ĊĊĠĠĠ Ġprivate Ġvar Ġcommand Internal : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġcommand Ġget () Ġ= Ġcommand Internal !! ĊĊĠĠĠ Ġval Ġcommand A db : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" adb Ġshell Ġ$ command " ĊĊĠĠĠ Ġfun Ġwrite Files Async ( context : ĠContext , Ġforce : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ Ġwrite Files ( context . application Context , Ġforce ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Files ( context : ĠContext , Ġforce : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! force Ġ&& Ġcommand Internal Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog d (" already Ġwritten ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġget Root ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOs . chmod ( out . absolute Path , Ġ 4 5 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠErr no Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Dex Path Ġ= Ġcopy Dex ( context , Ġ" server . dex ", ĠFile ( out , ĠSERVER _ DEX _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarter Dex Path Ġ= Ġcopy Dex ( context , Ġ" starter . dex ", ĠFile ( out , ĠST AR TER _ DEX _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarter Path Ġ= Ġcopy Starter ( context , ĠFile ( out , ĠST AR TER _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Path Ġ= Ġwrite Script ( context , ĠFile ( out , Ġ" start . sh "), Ġstarter Path , Ġserver Dex Path , Ġstarter Dex Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Internal Ġ= Ġ" sh Ġ$ script Path " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Legacy A db Script ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog d ( command Internal !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Root ( context : ĠContext ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . create Device Protected Storage Context Compat (). files Dir . parent File !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcopy Dex ( context : ĠContext , Ġname : ĠString , Ġout : ĠFile ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( out . exists () Ġ&& Ġ! Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġout . absolute Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ` is ` Ġ= Ġcontext . assets . open ( name ) ĊĠĠĠĠĠĠĠ Ġval Ġos : ĠOutputStream Ġ= ĠFileOutputStream ( out ) ĊĠĠĠĠĠĠĠ ĠFileUtils . copy (` is `, Ġos ) ĊĠĠĠĠĠĠĠ Ġos . flush () ĊĠĠĠĠĠĠĠ Ġos . close () ĊĠĠĠĠĠĠĠ Ġ` is `. close () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOs . chmod ( out . absolute Path , Ġ 4 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠErr no Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġout . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Starter ( context : ĠContext , Ġout : ĠFile ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( out . exists () Ġ&& Ġout . length () Ġ> Ġ 0 Ġ&& Ġ! Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġout . absolute Path ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġso Ġ= Ġ" lib /${ Build . SUPPORTED _ AB IS [ 0 ] }/ lib sh iz uk u . so " ĊĠĠĠĠĠĠĠ Ġval Ġai Ġ= Ġcontext . application Info ĊĊĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( out ) ĊĠĠĠĠĠĠĠ Ġval Ġapk Ġ= ĠZip File ( ai . source Dir ) ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġapk . entries () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( entries . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentries . nextElement () Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . name Ġ!= Ġso ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( entry . size . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis Ġ= ĠData InputStream ( apk . getInputStream ( entry )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis . read Fully ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy ( ByteArray InputStream ( buf ), Ġf os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOs . chmod ( out . absolute Path , Ġ 4 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠErr no Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġout . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġwrite Script ( context : ĠContext , Ġout : ĠFile , Ġstarter : ĠString , Ġserver Dex : ĠString , Ġstarter Dex : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! out . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . createNew File () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ` is ` Ġ= ĠBufferedReader ( InputStream Reader ( context . resources . open Raw Resource ( R . raw . start ))) ĊĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠPrintWriter ( FileWriter ( out )) ĊĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠ Ġwhile Ġ(` is `. readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . println ( line !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" %%% STAR TER _ PATH %%% ", Ġstarter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" %%% STAR TER _ PARAM %%% ", Ġget Starter Param ( server Dex , Ġstarter Dex )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġos . flush () ĊĠĠĠĠĠĠĠ Ġos . close () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOs . chmod ( out . absolute Path , Ġ 4 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠErr no Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġout . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" New Api ") ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġwrite Legacy A db Script ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġum Ġ= Ġcontext . getSystem Service ( User Manager :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( um Ġ== Ġnull Ġ|| Ġ! Build Utils . at Least 2 4 Ġ|| Ġ! um . is User Unlock ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġcontext . get External Files Dir ( null ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFile ( parent , Ġ" start . sh ") ĊĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠPrintWriter ( FileWriter ( out )) ĊĠĠĠĠĠĠĠ Ġos . println ("# !/ system / bin / sh ") ĊĠĠĠĠĠĠĠ Ġos . println (" echo Ġ\" âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ ĠP LEASE ĠREAD ĠâĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ âĨ ĵ \" ") ĊĠĠĠĠĠĠĠ Ġos . println (" echo Ġ\" The Ġstart Ġscript Ġhas Ġbeen Ġmoved Ġto Ġ/ data , Ġthis Ġcompatibility Ġscript Ġwill Ġbe Ġeventually Ġremoved .\" ") ĊĠĠĠĠĠĠĠ Ġos . println (" echo Ġ\" Open ĠSh iz uk u Ġapp Ġto Ġview Ġthe Ġnew Ġcommand .\" ") ĊĠĠĠĠĠĠĠ Ġos . println (" echo Ġ\" âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ ĠP LEASE ĠREAD ĠâĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ âĨ ĳ \" ") ĊĠĠĠĠĠĠĠ Ġos . println (" sleep Ġ 1 0 ") ĊĠĠĠĠĠĠĠ Ġos . println ( command ) ĊĠĠĠĠĠĠĠ Ġos . flush () ĊĠĠĠĠĠĠĠ Ġos . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Starter Param ( server : ĠString , Ġstarter : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ ĠObjects . requireNonNull ( server ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ(" -- server - dex =" Ġ+ Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġ-- starter - dex =" Ġ+ Ġstarter ) ĊĠĠĠ Ġ} Ċ }