adb help // List all comands | |
== Adb Server | |
adb kill-server | |
adb start-server | |
== Adb Reboot | |
adb reboot | |
adb reboot recovery | |
adb reboot-bootloader | |
adb root //restarts adb with root permissions | |
== Shell | |
adb shell // Open or run commands in a terminal on the host Android device. | |
== Devices | |
adb usb | |
adb devices //show devices attached | |
adb devices -l //devices (product/model) | |
adb connect ip_address_of_device | |
== Get device android version | |
adb shell getprop ro.build.version.release | |
== LogCat | |
adb logcat | |
adb logcat -c // clear // The parameter -c will clear the current logs on the device. | |
adb logcat -d > [path_to_file] // Save the logcat output to a file on the local system. | |
adb bugreport > [path_to_file] // Will dump the whole device information like dumpstate, dumpsys and logcat output. | |
== Files | |
adb push [source] [destination] // Copy files from your computer to your phone. | |
adb pull [device file location] [local file location] // Copy files from your phone to your computer. | |
== App install | |
adb -e install path/to/app.apk | |
-d - directs command to the only connected USB device... | |
-e - directs command to the only running emulator... | |
-s <serial number> ... | |
-p <product name or path> ... | |
The flag you decide to use has to come before the actual adb command: | |
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r com.myAppPackage // Install the given app on all connected devices. | |
== Uninstalling app from device | |
adb uninstall com.myAppPackage | |
adb uninstall <app .apk name> | |
adb uninstall -k <app .apk name> -> "Uninstall .apk withour deleting data" | |
adb shell pm uninstall com.example.MyApp | |
adb shell pm clear [package] // Deletes all data associated with a package. | |
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X uninstall com.myAppPackage //Uninstall the given app from all connected devices | |
== Update app | |
adb install -r yourApp.apk // -r means re-install the app and keep its data on the device. | |
adb install –k <.apk file path on computer> | |
== Home button | |
adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN | |
== Activity Manager | |
adb shell am start -a android.intent.action.VIEW | |
adb shell am broadcast -a 'my_action' | |
adb shell am start -a android.intent.action.CALL -d tel:+972527300294 // Make a call | |
// Open send sms screen with phone number and the message: | |
adb shell am start -a android.intent.action.SENDTO -d sms:+972527300294 --es sms_body "Test --ez exit_on_sent false | |
// Reset permissions | |
adb shell pm reset-permissions -p your.app.package | |
adb shell pm grant [packageName] [ Permission] // Grant a permission to an app. | |
adb shell pm revoke [packageName] [ Permission] // Revoke a permission from an app. | |
// Emulate device | |
adb shell wm size 2048x1536 | |
adb shell wm density 288 | |
// And reset to default | |
adb shell wm size reset | |
adb shell wm density reset | |
== Print text | |
adb shell input text 'Wow, it so cool feature' | |
== Screenshot | |
adb shell screencap -p /sdcard/screenshot.png | |
$ adb shell | |
shell@ $ screencap /sdcard/screen.png | |
shell@ $ exit | |
$ adb pull /sdcard/screen.png | |
--- | |
adb shell screenrecord /sdcard/NotAbleToLogin.mp4 | |
$ adb shell | |
shell@ $ screenrecord --verbose /sdcard/demo.mp4 | |
(press Control + C to stop) | |
shell@ $ exit | |
$ adb pull /sdcard/demo.mp4 | |
== Key event | |
adb shell input keyevent 3 // Home btn | |
adb shell input keyevent 4 // Back btn | |
adb shell input keyevent 5 // Call | |
adb shell input keyevent 6 // End call | |
adb shell input keyevent 26 // Turn Android device ON and OFF. It will toggle device to on/off status. | |
adb shell input keyevent 27 // Camera | |
adb shell input keyevent 64 // Open browser | |
adb shell input keyevent 66 // Enter | |
adb shell input keyevent 67 // Delete (backspace) | |
adb shell input keyevent 207 // Contacts | |
adb shell input keyevent 220 / 221 // Brightness down/up | |
adb shell input keyevent 277 / 278 /279 // Cut/Copy/Paste | |
0 --> "KEYCODE_0" | |
1 --> "KEYCODE_SOFT_LEFT" | |
2 --> "KEYCODE_SOFT_RIGHT" | |
3 --> "KEYCODE_HOME" | |
4 --> "KEYCODE_BACK" | |
5 --> "KEYCODE_CALL" | |
6 --> "KEYCODE_ENDCALL" | |
7 --> "KEYCODE_0" | |
8 --> "KEYCODE_1" | |
9 --> "KEYCODE_2" | |
10 --> "KEYCODE_3" | |
11 --> "KEYCODE_4" | |
12 --> "KEYCODE_5" | |
13 --> "KEYCODE_6" | |
14 --> "KEYCODE_7" | |
15 --> "KEYCODE_8" | |
16 --> "KEYCODE_9" | |
17 --> "KEYCODE_STAR" | |
18 --> "KEYCODE_POUND" | |
19 --> "KEYCODE_DPAD_UP" | |
20 --> "KEYCODE_DPAD_DOWN" | |
21 --> "KEYCODE_DPAD_LEFT" | |
22 --> "KEYCODE_DPAD_RIGHT" | |
23 --> "KEYCODE_DPAD_CENTER" | |
24 --> "KEYCODE_VOLUME_UP" | |
25 --> "KEYCODE_VOLUME_DOWN" | |
26 --> "KEYCODE_POWER" | |
27 --> "KEYCODE_CAMERA" | |
28 --> "KEYCODE_CLEAR" | |
29 --> "KEYCODE_A" | |
30 --> "KEYCODE_B" | |
31 --> "KEYCODE_C" | |
32 --> "KEYCODE_D" | |
33 --> "KEYCODE_E" | |
34 --> "KEYCODE_F" | |
35 --> "KEYCODE_G" | |
36 --> "KEYCODE_H" | |
37 --> "KEYCODE_I" | |
38 --> "KEYCODE_J" | |
39 --> "KEYCODE_K" | |
40 --> "KEYCODE_L" | |
41 --> "KEYCODE_M" | |
42 --> "KEYCODE_N" | |
43 --> "KEYCODE_O" | |
44 --> "KEYCODE_P" | |
45 --> "KEYCODE_Q" | |
46 --> "KEYCODE_R" | |
47 --> "KEYCODE_S" | |
48 --> "KEYCODE_T" | |
49 --> "KEYCODE_U" | |
50 --> "KEYCODE_V" | |
51 --> "KEYCODE_W" | |
52 --> "KEYCODE_X" | |
53 --> "KEYCODE_Y" | |
54 --> "KEYCODE_Z" | |
55 --> "KEYCODE_COMMA" | |
56 --> "KEYCODE_PERIOD" | |
57 --> "KEYCODE_ALT_LEFT" | |
58 --> "KEYCODE_ALT_RIGHT" | |
59 --> "KEYCODE_SHIFT_LEFT" | |
60 --> "KEYCODE_SHIFT_RIGHT" | |
61 --> "KEYCODE_TAB" | |
62 --> "KEYCODE_SPACE" | |
63 --> "KEYCODE_SYM" | |
64 --> "KEYCODE_EXPLORER" | |
65 --> "KEYCODE_ENVELOPE" | |
66 --> "KEYCODE_ENTER" | |
67 --> "KEYCODE_DEL" | |
68 --> "KEYCODE_GRAVE" | |
69 --> "KEYCODE_MINUS" | |
70 --> "KEYCODE_EQUALS" | |
71 --> "KEYCODE_LEFT_BRACKET" | |
72 --> "KEYCODE_RIGHT_BRACKET" | |
73 --> "KEYCODE_BACKSLASH" | |
74 --> "KEYCODE_SEMICOLON" | |
75 --> "KEYCODE_APOSTROPHE" | |
76 --> "KEYCODE_SLASH" | |
77 --> "KEYCODE_AT" | |
78 --> "KEYCODE_NUM" | |
79 --> "KEYCODE_HEADSETHOOK" | |
80 --> "KEYCODE_FOCUS" | |
81 --> "KEYCODE_PLUS" | |
82 --> "KEYCODE_MENU" | |
83 --> "KEYCODE_NOTIFICATION" | |
84 --> "KEYCODE_SEARCH" | |
85 --> "KEYCODE_MEDIA_PLAY_PAUSE" | |
86 --> "KEYCODE_MEDIA_STOP" | |
87 --> "KEYCODE_MEDIA_NEXT" | |
88 --> "KEYCODE_MEDIA_PREVIOUS" | |
89 --> "KEYCODE_MEDIA_REWIND" | |
90 --> "KEYCODE_MEDIA_FAST_FORWARD" | |
91 --> "KEYCODE_MUTE" | |
92 --> "KEYCODE_PAGE_UP" | |
93 --> "KEYCODE_PAGE_DOWN" | |
94 --> "KEYCODE_PICTSYMBOLS" | |
... | |
122 --> "KEYCODE_MOVE_HOME" | |
123 --> "KEYCODE_MOVE_END" | |
// https://developer.android.com/reference/android/view/KeyEvent.html | |
== ShPref | |
# replace org.example.app with your application id | |
# Add a value to default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key key_name --es value "hello world!"' | |
# Remove a value to default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.REMOVE --es key key_name' | |
# Clear all default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.CLEAR --es key key_name' | |
# It's also possible to specify shared preferences file. | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es name Game --es key level --ei value 10' | |
# Data types | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key string --es value "hello world!"' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key boolean --ez value true' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key float --ef value 3.14159' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key int --ei value 2015' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key long --el value 9223372036854775807' | |
# Restart application process after making changes | |
adb shell 'am broadcast -a org.example.app.sp.CLEAR --ez restart true' | |
== Monkey | |
adb shell monkey -p com.myAppPackage -v 10000 -s 100 // monkey tool is generating 10.000 random events on the real device | |
== Paths | |
/data/data/<package>/databases (app databases) | |
/data/data/<package>/shared_prefs/ (shared preferences) | |
/data/app (apk installed by user) | |
/system/app (pre-installed APK files) | |
/mmt/asec (encrypted apps) (App2SD) | |
/mmt/emmc (internal SD Card) | |
/mmt/adcard (external/Internal SD Card) | |
/mmt/adcard/external_sd (external SD Card) | |
adb shell ls (list directory contents) | |
adb shell ls -s (print size of each file) | |
adb shell ls -R (list subdirectories recursively) | |
== Device onformation | |
adb get-statе (print device state) | |
adb get-serialno (get the serial number) | |
adb shell dumpsys iphonesybinfo (get the IMEI) | |
adb shell netstat (list TCP connectivity) | |
adb shell pwd (print current working directory) | |
adb shell dumpsys battery (battery status) | |
adb shell pm list features (list phone features) | |
adb shell service list (list all services) | |
adb shell dumpsys activity <package>/<activity> (activity info) | |
adb shell ps (print process status) | |
adb shell wm size (displays the current screen resolution) | |
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' (print current app's opened activity) | |
== Package info | |
adb shell list packages (list package names) | |
adb shell list packages -r (list package name + path to apks) | |
adb shell list packages -3 (list third party package names) | |
adb shell list packages -s (list only system packages) | |
adb shell list packages -u (list package names + uninstalled) | |
adb shell dumpsys package packages (list info on all apps) | |
adb shell dump <name> (list info on one package) | |
adb shell path <package> (path to the apk file) | |
==Configure Settings Commands | |
adb shell dumpsys battery set level <n> (change the level from 0 to 100) | |
adb shell dumpsys battery set status<n> (change the level to unknown, charging, discharging, not charging or full) | |
adb shell dumpsys battery reset (reset the battery) | |
adb shell dumpsys battery set usb <n> (change the status of USB connection. ON or OFF) | |
adb shell wm size WxH (sets the resolution to WxH) | |
== Device Related Commands | |
adb reboot-recovery (reboot device into recovery mode) | |
adb reboot fastboot (reboot device into recovery mode) | |
adb shell screencap -p "/path/to/screenshot.png" (capture screenshot) | |
adb shell screenrecord "/path/to/record.mp4" (record device screen) | |
adb backup -apk -all -f backup.ab (backup settings and apps) | |
adb backup -apk -shared -all -f backup.ab (backup settings, apps and shared storage) | |
adb backup -apk -nosystem -all -f backup.ab (backup only non-system apps) | |
adb restore backup.ab (restore a previous backup) | |
adb shell am start|startservice|broadcast <INTENT>[<COMPONENT>] | |
-a <ACTION> e.g. android.intent.action.VIEW | |
-c <CATEGORY> e.g. android.intent.category.LAUNCHER (start activity intent) | |
adb shell am start -a android.intent.action.VIEW -d URL (open URL) | |
adb shell am start -t image/* -a android.intent.action.VIEW (opens gallery) | |
== Logs | |
adb logcat [options] [filter] [filter] (view device log) | |
adb bugreport (print bug reports) | |
== Other | |
adb backup // Create a full backup of your phone and save to the computer. | |
adb restore // Restore a backup to your phone. | |
adb sideload // Push and flash custom ROMs and zips from your computer. | |
fastboot devices | |
// Check connection and get basic information about devices connected to the computer. | |
// This is essentially the same command as adb devices from earlier. | |
//However, it works in the bootloader, which ADB does not. Handy for ensuring that you have properly established a connection. | |
-------------------------------------------------------------------------------- | |
Shared Preferences | |
# replace org.example.app with your application id | |
# Add a value to default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key key_name --es value "hello world!"' | |
# Remove a value to default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.REMOVE --es key key_name' | |
# Clear all default shared preferences. | |
adb shell 'am broadcast -a org.example.app.sp.CLEAR --es key key_name' | |
# It's also possible to specify shared preferences file. | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es name Game --es key level --ei value 10' | |
# Data types | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key string --es value "hello world!"' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key boolean --ez value true' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key float --ef value 3.14159' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key int --ei value 2015' | |
adb shell 'am broadcast -a org.example.app.sp.PUT --es key long --el value 9223372036854775807' | |
# Restart application process after making changes | |
adb shell 'am broadcast -a org.example.app.sp.CLEAR --ez restart true' | |
-------------------------------------------------------------------------------- | |
=== Few bash snippets === | |
@Source (https://jonfhancock.com/bash-your-way-to-better-android-development-1169bc3e0424) | |
=== Using tail -n | |
//Use tail to remove the first line. Actually two lines. The first one is just a newline. The second is “List of devices attached.” | |
$ adb devices | tail -n +2 | |
=== Using cut -sf | |
// Cut the last word and any white space off the end of each line. | |
$ adb devices | tail -n +2 | cut -sf -1 | |
=== Using xargs -I | |
// Given the -I option, xargs will perform an action for each line of text that we feed into it. | |
// We can give the line a variable name to use in commands that xargs can execute. | |
$ adb devices | tail -n +2 | cut -sf -1 | xargs -I X echo X aw yiss | |
=== Three options below together | |
// Will print android version of all connected devices | |
adb devices | tail -n +2 | cut -sf -1 | xargs -I X adb -s X shell getprop ro.build.version.release | |
=== Using alias | |
-- Example 1 | |
alias tellMeMore=echo | |
tellMeMore "hi there" | |
Output => hi there | |
-- Example 2 | |
// Define alias | |
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1" | |
// And you can use it later | |
apkinstall ~/Downloads/MyAppRelease.apk // Install an apk on all devices | |
-- Example 3 | |
alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1" | |
rmapp com.example.myapp // Uninstall a package from all devices | |
-- Example 4 | |
alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1" | |
clearapp com.example.myapp // Clear data on all devices (leave installed) | |
-- Example 5 | |
alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1" | |
startintent https://twitter.com/JonFHancock // Launch a deep link on all devices | |
Setting up your .bash_profile | |
Finally, to make this all reusable even after rebooting your computer (aliases only last through the current session), we have to add these to your .bash_profile. You might or might not already have a .bash_profile, so let’s make sure we append to it rather than overwriting it. Just open a terminal, and run the following command | |
touch .bash_profile && open .bash_profile | |
This will create it if it doesn’t already exist, and open it in a text editor either way. Now just copy and paste all of the aliases into it, save, and close. | |
alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1" | |
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1" | |
alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1" | |
alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1" | |
=============================================================== | |
Sources: | |
- Internet | |
- https://www.automatetheplanet.com/adb-cheat-sheet/ |
This comment has been minimized.
This comment has been minimized.
Thank you very much love it !!! |
This comment has been minimized.
This comment has been minimized.
love it... |
This comment has been minimized.
This comment has been minimized.
thanks! |
This comment has been minimized.
This comment has been minimized.
These are great. Especially adb bugreport! Here is a few goodies for your .bash_profile alias adbimg='cd && adb shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png' |
This comment has been minimized.
This comment has been minimized.
Thank you so much for sharing :) |
This comment has been minimized.
This comment has been minimized.
Thanks alot.bro |
This comment has been minimized.
This comment has been minimized.
Hi Can you tell me how to copy my host .android/adbkey.pub key inside the android device |
This comment has been minimized.
This comment has been minimized.
Great summary |
This comment has been minimized.
This comment has been minimized.
First off, this is great! Thanks so much for sharing! I wanted to perhaps suggesting the following change for line 106:
The existing language confused me as I thought it actually powered down my entire device and then could also power it on (something that adb can't do unfortunately afaik). |
This comment has been minimized.
This comment has been minimized.
Would like to request a command to use ADB to clear all text messages on my phone. I would like to programmatically clear messages somehow. I found out how to do it pm clear com.android.providers.telephony |
This comment has been minimized.
This comment has been minimized.
Pretty nice! Thanks a lot! |
This comment has been minimized.
This comment has been minimized.
I am trying to run/retrieve info on all the different available options for "content query", for example:
Which is dependent on the URI being of a valid content provider on the device. However, all I can find online are fixed lists for the "content://settings/global" but from my understanding, the value used here are specific to the phone, the apps installed etc. I have not found a shell command that will list valid content providers, on the device. eg https://github.com/jenzz/ContentProviderHelper Anyone know how to get a list of all the valid URI's (content providers) on the running device using a shell command? |
This comment has been minimized.
This comment has been minimized.
Is this really writing to a different file though? |
This comment has been minimized.
This comment has been minimized.
Changing shared preference via broadcasts requires https://github.com/jfsso/PreferencesEditor |
This comment has been minimized.
This comment has been minimized.
Is it possible to get copped text string from android device through adb? |
This comment has been minimized.
This comment has been minimized.
love it |
This comment has been minimized.
This comment has been minimized.
Is there any adb command to launch trusted certificate in settings app for android ??? Since that trusted certificate position keeps changing on OS version . Need solution ASAP . Thanks in advance, |
This comment has been minimized.
This comment has been minimized.
Excellent work, Thank you |
This comment has been minimized.
This comment has been minimized.
So far this is the best compilation. Thanks for sharing! |
This comment has been minimized.
This comment has been minimized.
Is there any updated adb command for this: adb shell settings put secure enabled_notification_listeners ? |
This comment has been minimized.
This comment has been minimized.
how to create a contact if not exist using adb shell? |
This comment has been minimized.
This comment has been minimized.
Can we open a particular application thru adb commands? |
This comment has been minimized.
This comment has been minimized.
Yes, it is actually pretty easy, this is one of the possible ways: If you are interested in more ADB inspiration, see my repo https://github.com/IntergalacticPenguin/mobile-toolkit |
This comment has been minimized.
This comment has been minimized.
What do you mean by open? if you mean to launch a particular application main activity through adb use this: For example below command will launch the dialer app on Sony phone: |
This comment has been minimized.
This comment has been minimized.
yes, this worked! adb shell am start packageName, I again have one more question, can we click a particular email inside gmail ( android emulator ) through adb commands? |
This comment has been minimized.
This comment has been minimized.
possible to get an avd emulator's name? |
This comment has been minimized.
This comment has been minimized.
@jdougit |
This comment has been minimized.
This comment has been minimized.
thanks, @IntergalacticPenguin
|
This comment has been minimized.
This comment has been minimized.
@Ip2507 try: |
This comment has been minimized.
This comment has been minimized.
hi, how to get condition Lock/Unlock device ? |
This comment has been minimized.
This comment has been minimized.
Hi Team, My scenario:
I am using below method
I also check pid and it was running as process but not sure why I don't get 3~5 hours full logs because this is big time affecting my test results. Any idea how to resolve this issue? |
This comment has been minimized.
This comment has been minimized.
Is there any possibility to create custom adb command?? |
This comment has been minimized.
This comment has been minimized.
Of course, you can do anything you want - just create your own shell script. |
This comment has been minimized.
This comment has been minimized.
Thank you. |
This comment has been minimized.
This comment has been minimized.
Maybe I dont fully understand what you want to achieve. I have thought, that you wanted to do some work using adb via single command. What command do you hope to create? |
This comment has been minimized.
This comment has been minimized.
I have a created a socket based channel through which my application gets some data. Thanks in advance!! |
This comment has been minimized.
This comment has been minimized.
What does adb -s do?? |
This comment has been minimized.
This comment has been minimized.
Adb -s specifies the target for the command to be executed on. As an return from "adb devices" then you can specify the device to target with your next command with: adb -s emulator-5554 shell echo "hello". |
This comment has been minimized.
This comment has been minimized.
Thank you @Vrakoss |
This comment has been minimized.
This comment has been minimized.
I Love it Thanks |
This comment has been minimized.
This comment has been minimized.
I think the command to list all the packages should be like this: https://gist.github.com/bbsusheelkumar/357c62202bda3d905d589046b95d157b/revisions I have tested it and after changes it is working. |
This comment has been minimized.
This comment has been minimized.
cool! Thanx! |
This comment has been minimized.
This comment has been minimized.
Thanks mates |
This comment has been minimized.
This comment has been minimized.
To simulate text with spaces, the space must be escaped, as so:
so, corrected in the above gist should be:
|
This comment has been minimized.
This comment has been minimized.
here is a really usefull work you've done. Many thanks. |
This comment has been minimized.
This comment has been minimized.
https://gist.github.com/bbsusheelkumar/357c62202bda3d905d589046b95d157b/revisions all command for adb right her with examble |
This comment has been minimized.
This comment has been minimized.
For the mac users |
This comment has been minimized.
This comment has been minimized.
Type error in line 262. btw very useful, ty. |
This comment has been minimized.
This comment has been minimized.
thanks, i really appreciate. |
This comment has been minimized.
This comment has been minimized.
guys is there an adb command that would allow me to open apps in floating mode or pop-up view? |
This comment has been minimized.
This comment has been minimized.
Open a window for each application in linux or windows? I have no idea, but you can use scrcpy to see your full screen inside windows or linux. |
This comment has been minimized.
This comment has been minimized.
Hey thanks for the list. |
This comment has been minimized.
Thank you so much!