package Ġde . r ki . cor on aw arn app . di agnosis keys . download Ċ Ċ import Ġde . r ki . cor on aw arn app . di agnosis keys . server . Location Code Ċ import Ġde . r ki . cor on aw arn app . di agnosis keys . storage . Cached Key Ċ import Ġorg . joda . time . LocalDate Ċ import Ġorg . joda . time . Local Time Ċ Ċ sealed Ġclass ĠLocation Data Ġ{ ĊĊĠĠĠ Ġabstract Ġval Ġlocation : ĠLocation Code ĊĊĠĠĠ Ġabstract Ġval Ġapproximate Size InBytes : ĠLong Ċ } Ċ Ċ internal Ġdata Ġclass ĠLocation Days ( ĊĠĠĠ Ġoverride Ġval Ġlocation : ĠLocation Code , ĊĠĠĠ Ġval Ġday Data : ĠCollection < LocalDate > Ċ ) Ġ: ĠLocation Data () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġapproximate Size InBytes : ĠLong Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġday Data . size Ġ* ĠAP PRO X _ DAY _ SIZE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa Ġfiltered Ġlist Ġthat Ġcontains Ġall Ġdates Ġwhich Ġare Ġpart Ġof Ġthis Ġwrapper , Ġbut Ġnot Ġin Ġthe Ġparameter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Missing Days ( cached Keys : ĠList < Cached Key >): ĠCollection < LocalDate >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcached Location Dates Ġ= Ġcached Keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . info . location Ġ== Ġlocation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . info . day Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġday Data . filter Ġ{ Ġdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! cached Location Dates . contains ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġlocation Ġobject Ġthat Ġonly Ġcontains Ġthose Ġelements , ĊĠĠĠĠ Ġ* Ġthat Ġare Ġpart Ġof Ġthis Ġwrapper , Ġbut Ġnot Ġin Ġthe Ġcache . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Missing Days ( cached Keys : ĠList < Cached Key >): ĠLocation Days ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmissing Days Ġ= Ġthis . get Missing Days ( cached Keys ) ĊĠĠĠĠĠĠĠ Ġif Ġ( missing Days Ġ== Ġnull Ġ|| Ġmissing Days . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLocation Days ( this . location , Ġmissing Days ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ~ 5 1 2 KB ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAP PRO X _ DAY _ SIZE Ġ= Ġ 5 1 2 Ġ* Ġ 1 0 2 4 L ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġdata Ġclass ĠLocation Hours ( ĊĠĠĠ Ġoverride Ġval Ġlocation : ĠLocation Code , ĊĠĠĠ Ġval Ġhour Data : ĠMap < LocalDate , ĠList < Local Time >> Ċ ) Ġ: ĠLocation Data () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġapproximate Size InBytes : ĠLong Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġhour Data . values . fold ( 0 L ) Ġ{ Ġacc , Ġhours For Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġhours For Day . size Ġ* ĠAP PRO X _ HOUR _ SIZE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Missing Hours ( cached Keys : ĠList < Cached Key >): ĠMap < LocalDate , ĠList < Local Time >> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcached Hours Ġ= Ġcached Keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . info . location Ġ== Ġlocation Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhour Data . map NotNull Ġ{ Ġ( day , Ġday Hours ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissing Hours Ġ= Ġday Hours . filter Ġ{ Ġhour Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Hours . none Ġ{ Ġit . info . day Ġ== Ġday Ġ&& Ġit . info . hour Ġ== Ġhour Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( missing Hours . isEmpty ()) Ġnull Ġelse Ġday Ġto Ġmissing Hours ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Missing Hours ( cached Keys : ĠList < Cached Key >): ĠLocation Hours ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmissing Hours Ġ= Ġthis . get Missing Hours ( cached Keys ) ĊĠĠĠĠĠĠĠ Ġif Ġ( missing Hours Ġ== Ġnull Ġ|| Ġmissing Hours . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLocation Hours ( this . location , Ġmissing Hours ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ~ 2 2 KB ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAP PRO X _ HOUR _ SIZE Ġ= Ġ 2 2 Ġ* Ġ 1 0 2 4 L ĊĠĠĠ Ġ} Ċ } Ċ