package Ġbe . my god . vpn hot spot . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content .* Ċ import Ġandroid . net . Inet Addresses Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġbe . my god . vpn hot spot . App . Companion . app Ċ import Ġbe . my god . vpn hot spot . room . mac ToString Ċ import Ġbe . my god . vpn hot spot . widget . Smart Snackbar Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . NetworkInterface Ċ import Ġjava . net . Socket Exception Ċ Ċ val ĠThrowable . readable Message Ġget () Ġ= Ġlocalized Message Ġ?: Ġjava Class . name Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġhack : Ġwe Ġwrap Ġlong s Ġaround Ġin Ġ 1 Ġb illion Ġand Ġsuch . ĠHope fully Ġevery Ġlanguage Ġcounts Ġin Ġbase Ġ 1 0 Ġand Ġthis Ġworks Ċ Ġ* Ġmar velo us ly Ġfor Ġevery body . Ċ Ġ*/ Ċ fun ĠLong . to Pl ural Int (): ĠInt Ġ{ ĊĠĠĠ Ġcheck ( this Ġ>= Ġ 0 ) ĠĠĠ Ġ// Ġplease Ġdon 't Ġmess Ġwith Ġme ĊĠĠĠ Ġif Ġ( this Ġ<= ĠInt . MAX _ VALUE ) Ġreturn Ġto Int () ĊĠĠĠ Ġreturn Ġ( this Ġ% Ġ 1 0 0 0 0 0 0 0 0 0 ). toInt () Ġ+ Ġ 1 0 0 0 0 0 0 0 0 0 Ċ } Ċ Ċ fun ĠContext . ensure Receiver Un registered ( receiver : ĠBroadcast Receiver ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġunregister Receiver ( receiver ) ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠIllegalArgumentException ) Ġ{ Ġ} Ċ } Ċ Ċ @ Suppress Lint (" Re cycle ") Ċ fun Ġ< T > Ġuse Parcel ( block : Ġ( Parcel ) Ġ-> ĠT ) Ġ= ĠParcel . obtain (). run Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ( this ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠParcel able . toByteArray ( parcel able Flags : ĠInt Ġ= Ġ 0 ) Ġ= Ġuse Parcel Ġ{ Ġp Ġ-> ĊĠĠĠ Ġp . write Parcelable ( this , Ġparcel able Flags ) ĊĠĠĠ Ġp . marshall () Ċ } Ċ fun Ġ< T Ġ: ĠParcel able > ĠByteArray . to Parcelable () Ġ= Ġuse Parcel Ġ{ Ġp Ġ-> ĊĠĠĠ Ġp . un marshall ( this , Ġ 0 , Ġsize ) ĊĠĠĠ Ġp . setData Position ( 0 ) ĊĠĠĠ Ġp . read Parcelable < T >( java Class . class Loader ) Ċ } Ċ Ċ fun Ġbroadcast Receiver ( receiver : Ġ( Context , ĠIntent ) Ġ-> ĠUnit ) Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ= Ġreceiver ( context , Ġintent ) Ċ } Ċ Ċ fun Ġintent Filter ( var arg Ġactions : ĠString ) Ġ= ĠIntent Filter (). also Ġ{ Ġactions . forEach ( it :: addAction ) Ġ} Ċ Ċ @ Binding Adapter (" android : src ") Ċ fun Ġset Image Resource ( imageView : ĠImageView , Ġ@ Drawable Res Ġresource : ĠInt ) Ġ= ĠimageView . setImage Resource ( resource ) Ċ Ċ @ Binding Adapter (" android : visibility ") Ċ fun Ġset Visibility ( view : ĠView , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠ Ġview . isVisible Ġ= Ġvalue Ċ } Ċ Ċ fun Ġmake Ip Span ( ip : ĠInet Address ) Ġ= Ġip . host Address . let Ġ{ ĊĠĠĠ Ġ// Ġexclude Ġall Ġb og on ĠIP Ġaddresses Ġsupported Ġby ĠAndroid ĠAPIs ĊĠĠĠ Ġif Ġ(! app . has Touch Ġ|| Ġip . is Mult icast Address Ġ|| Ġip . is Any Local Address Ġ|| Ġip . is Loop back Address Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġip . is Link Local Address Ġ|| Ġip . is Site Local Address Ġ|| Ġip . is MC Global Ġ|| Ġip . is MC Node Local Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġip . is M CL ink Local Ġ|| Ġip . is M CS ite Local Ġ|| Ġip . is MCO rg Local ) Ġit Ġelse ĠSp ann able String ( it ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Span ( Custom Tabs Url Span (" https :// ip info . io /$ it "), Ġ 0 , Ġlength , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠ Ġ} Ċ } Ċ fun Ġmake Mac Span ( mac : ĠString ) Ġ= Ġif Ġ( app . has Touch ) ĠSp ann able String ( mac ). apply Ġ{ ĊĠĠĠ Ġset Span ( Custom Tabs Url Span (" https :// mac vendors . co / results /$ mac "), Ġ 0 , Ġlength , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) Ċ } Ġelse Ġmac Ċ Ċ fun ĠNetwork Interface . format Addresses ( mac Only : ĠBoolean Ġ= Ġfalse ) Ġ= ĠSp ann able StringBuilder (). apply Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġhardware Address ?. apply Ġ{ Ġappend ln ( make Mac Span ( as Iterable (). mac ToString ())) Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠSocket Exception ) Ġ{ Ġ} ĊĠĠĠ Ġif Ġ(! mac Only ) Ġfor Ġ( address Ġin Ġinterface Addresses ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( make Ip Span ( address . address )) ĊĠĠĠĠĠĠĠ Ġappend ln ("/ ${ address . network Prefix Length }") ĊĠĠĠ Ġ} Ċ }. trim End () Ċ Ċ private Ġval Ġparse Numeric Address Ġby Ġlazy Ġ@ Suppress Lint (" So on Blocked Private Api ") Ġ{ ĊĠĠĠ ĠInet Address :: class . java . getDeclared Method (" parse Numeric Address ", ĠString :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Accessible Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ fun Ġparse Numeric Address ( address : ĠString ) Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 9 ) ĊĠĠĠ ĠInet Addresses . parse Numeric Address ( address ) Ġelse Ġparse Numeric Address . invoke ( null , Ġaddress ) Ġas ĠInet Address Ċ Ċ fun ĠContext . launch Url ( url : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( app . has Touch ) Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġapp . custom Tabs Intent . launch Url ( this , Ġurl . to Uri ()) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠRuntimeException ) Ġ{ Ġ} ĊĠĠĠ ĠSmart Snackbar . make ( url ). show () Ċ } Ċ Ċ fun ĠContext . stop And Un bind ( connection : ĠService Connection ) Ġ{ ĊĠĠĠ Ġconnection . on Service Disconnected ( null ) ĊĠĠĠ Ġun bind Service ( connection ) Ċ } Ċ Ċ var ĠMenuItem . isNot G one : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġis Visible Ġ|| Ġis Enabled ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġvalue ĊĠĠĠ Ġ} Ċ Ċ fun Ġ< K , ĠV > ĠMutable Map < K , ĠV >. compute If Absent Compat ( key : ĠK , Ġvalue : Ġ() Ġ-> ĠV ) Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) ĊĠĠĠ Ġcompute If Absent ( key ) Ġ{ Ġvalue () Ġ} Ġelse Ġthis [ key ] Ġ?: Ġvalue (). also Ġ{ Ġput ( key , Ġit ) Ġ} Ċ fun Ġ< K , ĠV > ĠMutable Map < K , ĠV >. put If Absent Compat ( key : ĠK , Ġvalue : ĠV ) Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) ĊĠĠĠ Ġput If Absent ( key , Ġvalue ) Ġelse Ġthis [ key ] Ġ?: Ġput ( key , Ġvalue ) Ċ fun Ġ< K , ĠV > ĠMutable Map < K , ĠV >. remove Compat ( key : ĠK , Ġvalue : ĠV ) Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) Ġremove ( key , Ġvalue ) Ġelse Ġ{ ĊĠĠĠ Ġval Ġcur Value Ġ= Ġget ( key ) ĊĠĠĠ Ġif Ġ( cur Value Ġ=== Ġvalue Ġ&& Ġ( cur Value Ġ!= Ġnull Ġ|| Ġcontains Key ( key ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( key ) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġelse Ġfalse Ċ } Ċ