package Ġat . ro tes k re uz . stop cor ona . model . repositories Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġat . ro tes k re uz . stop cor ona . constants . Constants . Misc . EMPTY _ STRING Ċ import Ġat . ro tes k re uz . stop cor ona . model . api . Api Interactor Ċ import Ġat . ro tes k re uz . stop cor ona . model . db . dao . In fection Message Dao Ċ import Ġat . ro tes k re uz . stop cor ona . model . db . dao . Near by Record Dao Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . info . Api Add ressed In fection Message Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . info . Api In fection Info Request Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . info . Api Personal Data Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . info . Warning Type Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . message . In fection Message Content Ċ import Ġat . ro tes k re uz . stop cor ona . model . entities . in fection . message . MessageType Ċ import Ġat . ro tes k re uz . stop cor ona . model . manager . Database Cleanup Manager Ċ import Ġat . ro tes k re uz . stop cor ona . model . repositories . Reporting Repository . Companion . SCOPE _ NAME Ċ import Ġat . ro tes k re uz . stop cor ona . skeleton . core . model . helpers . App Dispatch ers Ċ import Ġat . ro tes k re uz . stop cor ona . skeleton . core . model . scope . Scope Ċ import Ġat . ro tes k re uz . stop cor ona . utils . Non Nullable Behavior Subject Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . rx kotlin . Observable s Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . th reet en . bp . Z onedDateTime Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* ĠScoped Ġrepository Ġfor Ġhandling Ġdata Ġduring Ġuploading Ġthe Ġresult Ġof Ġa Ġself - testing , Ċ Ġ* Ġa Ġs ickness Ġcertificate Ġor Ġa Ġself - test Ġre voke . Ċ Ġ*/ Ċ interface ĠReporting Repository Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSCO PE _ NAME Ġ= Ġ" Reporting Repository Scope " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmessage Type Ġthat Ġwill Ġbe Ġreported Ġto Ġauthor ities Ġat Ġthe Ġend Ġof Ġthe Ġreporting Ġflow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset MessageType ( message Type : ĠMessageType ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest Ġa ĠT AN Ġfor Ġauthentication . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġrequest Tan ( mobile Number : ĠString ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpload Ġthe Ġreport Ġinformation Ġwith Ġthe Ġupload Ġin fection Ġrequest . ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid ConfigurationException ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġthe Ġmessage Type Ġ Ġthe Ġuser Ġsent Ġto Ġhis Ġcontacts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġupload Report Information (): ĠMessageType ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġvalidated Ġpersonal Ġdata Ġwhen Ġa ĠT AN Ġwas Ġsuccessfully Ġrequested . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Personal Data And Tan Request Success ( mobile Number : ĠString ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠT AN Ġintroduced Ġby Ġthe Ġuser . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Tan ( tan : ĠString ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġlatest Ġagreement Ġof Ġthe Ġuser Ġabout Ġdata Ġreporting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUser Agreement ( agreement : ĠBoolean ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNavigate Ġback Ġfrom Ġthe ĠT AN Ġentry Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgo Back From Tan Entry Screen () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNavigate Ġback Ġfrom Ġthe Ġreporting Ġagreement Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgo Back From Reporting Agreement Screen () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġthe Ġstate Ġof Ġthe Ġreporting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Reporting State (): ĠObservable < Reporting State > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġthe Ġpersonal Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Personal Data (): ĠObservable < Personal Data > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġthe ĠT AN Ġrelated Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Tan Data (): ĠObservable < Tan Data > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġthe Ġdata Ġrelated Ġto Ġuser Ġagreement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Agreement Data (): ĠObservable < Agreement Data > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġthe Ġmessage Type Ġthat Ġwill Ġreported Ġin Ġthis Ġflow . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Invalid ConfigurationException ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve MessageType (): ĠObservable < MessageType > Ċ } Ċ Ċ class ĠReporting Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġapp Dispatch ers : ĠApp Dispatch ers , ĊĠĠĠ Ġprivate Ġval Ġapi Interactor : ĠApi Interactor , ĊĠĠĠ Ġprivate Ġval Ġconfiguration Repository : ĠConfiguration Repository , ĊĠĠĠ Ġprivate Ġval Ġnearby Record Dao : ĠN ear by Record Dao , ĊĠĠĠ Ġprivate Ġval Ġin fection Message Dao : ĠIn fection Message Dao , ĊĠĠĠ Ġprivate Ġval Ġcrypto Repository : ĠCrypto Repository , ĊĠĠĠ Ġprivate Ġval Ġin fection Messenger Repository : ĠIn fection Messenger Repository , ĊĠĠĠ Ġprivate Ġval Ġqu ar ant ine Repository : ĠQu ar ant ine Repository , ĊĠĠĠ Ġprivate Ġval Ġdatabase Cleanup Manager : ĠDatabase Cleanup Manager Ċ ) Ġ: ĠScope ( SCOPE _ NAME ), ĊĠĠĠ ĠReporting Repository , ĊĠĠĠ ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġapp Dispatch ers . Default ĊĊĠĠĠ Ġprivate Ġval Ġpersonal Data Subject Ġ= ĠNon Nullable Behavior Subject ( ĊĠĠĠĠĠĠĠ ĠPersonal Data () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġtan Data Subject Ġ= ĠNon Nullable Behavior Subject ( ĊĠĠĠĠĠĠĠ ĠT an Data () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġagreement Data Subject Ġ= ĠNon Nullable Behavior Subject ( Agreement Data ()) ĊĠĠĠ Ġprivate Ġval Ġmessage Type Subject Ġ= ĠBehavior Subject . create < MessageType >() ĊĊĠĠĠ Ġoverride Ġfun Ġset MessageType ( message Type : ĠMessageType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Type Subject . onNext ( message Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrequest Tan ( mobile Number : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Interactor . request Tan ( mobile Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupload Report Information (): ĠMessageType Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( message Type Subject . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . Re voke Ġ-> Ġupload Re voke Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġupload In fection Info () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupload In fection Info (): ĠMessageType . In fection Level Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin fection Level Ġ= Ġmessage Type Subject . value Ġas ? ĠMessageType . In fection Level Ġ?: Ġthrow ĠInvalid ConfigurationException . In fection Level Not Set ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġconfiguration Repository . observe Configuration (). blocking First () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwarn Before Sy mptoms Ġ= Ġconfiguration . warn Before Sy mptoms Ġ?: Ġthrow ĠInvalid ConfigurationException . Null Warn Before Sy mptoms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthreshold Time Ġ= ĠZ onedDateTime . now (). minus Hours ( warn Before Sy mptoms . to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin fection Messages Ġ= Ġmutable ListOf < Pair < ByteArray , ĠIn fection Message Content >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in fection Level Ġ== ĠMessageType . In fection Level . Red ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Messages . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Message Dao . observe Sent In fection Messages By MessageType ( MessageType . In fection Level . Yellow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. blocking First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfull Container Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . contacts . first (). publicKey Ġto ĠIn fection Message Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . In fection Level . Red , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . time Stamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in fection Messages . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Messages . sortBy Descending Ġ{ Ġ(_, Ġcontent ) Ġ-> Ġcontent . time Stamp Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthreshold Time Ġ= Ġin fection Messages . first (). second . time Stamp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( in fection Level Ġ== ĠMessageType . In fection Level . Yellow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreset Messages Ġ= Ġin fection Message Dao . observe Sent In fection Messages By MessageType ( MessageType . In fection Level . Yellow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. blocking First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfull Container Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . contacts . first (). publicKey Ġto ĠIn fection Message Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . Re voke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . time Stamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Messenger Repository . store Sent In fection Messages ( reset Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Messages . addAll ( near by Record Dao . observe Records Recent Than ( threshold Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. blocking First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġnearby Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnearby Record . publicKey Ġto ĠIn fection Message Content ( in fection Level , Ġnearby Record . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Interactor . set In fection Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi In fection Info Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtan Data Subject . value . tan , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt In fection Messages ( in fection Messages ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Data Subject . value . as Api Entity ( in fection Level . warning Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Messenger Repository . store Sent In fection Messages ( in fection Messages ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( in fection Level ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . In fection Level . Red Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . report Medical Confirmation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . revoke Positive Self Diag nose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . revoke Self Monitoring () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . In fection Level . Yellow Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . report Positive Self Diag nose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . revoke Self Monitoring () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġin fection Level ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupload Re voke Info (): ĠMessageType . Re voke Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin fection Messages Ġ= Ġin fection Message Dao . observe Sent In fection Messages By MessageType ( MessageType . In fection Level . Yellow ). blocking First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfull Container Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . contacts . first (). publicKey Ġto ĠIn fection Message Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . Re voke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . time Stamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Container . in fection Message Instance . uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Interactor . set In fection Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi In fection Info Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtan Data Subject . value . tan , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt In fection Messages ( in fection Messages ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Data Subject . value . as Api Entity ( MessageType . Re voke . warning Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġqu ar ant ine Repository . revoke Positive Self Diag nose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Cleanup Manager . remove Outgoing Yellow Messages () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . Re voke ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencrypt In fection Messages ( in fection Messages : ĠList < Pair < ByteArray , ĠIn fection Message Content >> ): ĠList < Api Add ressed In fection Message > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġin fection Messages . map Ġ{ Ġ( publicKey , Ġin fection Message ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto Repository . encrypt ( in fection Message . toByteArray (), ĠpublicKey ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto Repository . get PublicKey Prefix ( publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġ( encrypted In fection Message , Ġaddress Prefix ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted In fection Message Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġ( encrypted In fection Message , Ġaddress Prefix ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencoded Encrypted In fection Message Ġ= ĠBase 6 4 . encode ToString ( encrypted In fection Message , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Add ressed In fection Message ( encoded Encrypted In fection Message , Ġaddress Prefix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Personal Data And Tan Request Success ( mobile Number : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpersonal Data Subject . onNext ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPersonal Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Tan ( tan : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtan Data Subject . onNext ( Tan Data ( tan , Ġtan Is Filled Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser Agreement ( agreement : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġagreement Data Subject . onNext ( Agreement Data ( agreement )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Reporting State (): ĠObservable < Reporting State > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable s . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Data Subject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtan Data Subject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagreement Data Subject ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġ( personal Data , Ġtan Data , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Data . tan Successfully Requested . not () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠReporting State . Personal Data Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtan Data . tan Is Filled . not () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠReporting State . Tan Entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠReporting State . Reporting Agreement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgo Back From Tan Entry Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġpersonal Data Subject . onNext ( personal Data Subject . value . copy ( tan Successfully Requested Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġtan Data Subject . onNext ( tan Data Subject . value . copy ( tan Ġ= ĠEMPTY _ STRING )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgo Back From Reporting Agreement Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġtan Data Subject . onNext ( tan Data Subject . value . copy ( tan Is Filled Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġagreement Data Subject . onNext ( agreement Data Subject . value . copy ( user Has Ag reed Ġ= Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Personal Data (): ĠObservable < Personal Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpersonal Data Subject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Tan Data (): ĠObservable < Tan Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtan Data Subject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Agreement Data (): ĠObservable < Agreement Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġagreement Data Subject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve MessageType (): ĠObservable < MessageType > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Type Subject ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠAgreement Data ( val Ġuser Has Ag reed : ĠBoolean Ġ= Ġfalse ) Ċ Ċ data Ġclass ĠT an Data ( val Ġtan : ĠString Ġ= ĠEMPTY _ STRING , Ġval Ġtan Is Filled : ĠBoolean Ġ= Ġfalse ) Ċ Ċ data Ġclass ĠPersonal Data ( ĊĠĠĠ Ġval Ġmobile Number : ĠString Ġ= ĠEMPTY _ STRING , ĊĠĠĠ Ġval Ġtan Successfully Requested : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġas Api Entity ( warning Type : ĠWarning Type ): ĠApi Personal Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApi Personal Data ( EMPTY _ STRING , ĠEMPTY _ STRING , Ġmobile Number , ĠEMPTY _ STRING , ĠEMPTY _ STRING , Ġwarning Type , ĠEMPTY _ STRING ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAutom aton Ġdefinition Ġof Ġthe Ġreport Ġsending Ġprocess . Ċ Ġ*/ Ċ sealed Ġclass ĠReporting State Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUser Ġhas Ġto Ġenter Ġhis Ġpersonal Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġobject ĠPersonal Data Entry Ġ: ĠReporting State () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUser Ġhas Ġto Ġenter Ġthe ĠT AN Ġreceived Ġvia ĠSMS . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġobject ĠT an Entry Ġ: ĠReporting State () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUser Ġhas Ġto Ġagree Ġthat Ġhis Ġdata Ġwill Ġbe Ġreported Ġto Ġauthor ities . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġobject ĠReporting Agreement Ġ: ĠReporting State () Ċ } Ċ Ċ /** Ċ Ġ* ĠExceptions Ġcaused Ġby Ġinvalid Ġdata Ġin Ġconfiguration . Ċ Ġ*/ Ċ sealed Ġclass ĠInvalid ConfigurationException ( override Ġval Ġmessage : ĠString ) Ġ: ĠException ( message ) Ġ{ ĊĊĠĠĠ Ġobject ĠNull Warn Before Sy mptoms Ġ: ĠInvalid ConfigurationException (" warn Before Sy mptoms Ġis Ġnull ") ĊĊĠĠĠ Ġobject ĠIn fection Level Not Set Ġ: ĠInvalid ConfigurationException (" message Type Ġis Ġnull ") Ċ } Ċ