Update NDK prebuilts to build 6859468.

Taken from branch aosp-simpleperf-release.

Also update ChangeLog.

Bug: 169090018
Test: run python tests for different hosts and devices.

Change-Id: I2e63a3436e648feefd7aef86f09900301fa26b52
diff --git a/ChangeLog b/ChangeLog
index d0dfcaa..ef0439c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
 
+build 6859468
+Add --csv option in report cmd.
+Add --sort option in stat cmd.
+Add --tp-filter option to filter tracepoint events in record cmd.
+Add --addr-filter to filter etm recording in record cmd.
+Fix finding symbols from kernel modules.
+Better ART JIT support (dump jit symfiles to a single file instead of multiple
+temporary files).
+Support generic JIT symbols from symbol map file. See doc/jit_symbols.md.
+
+
 ndk r22
 build 6401870
 Support multiple record files in pprof_proto_generator.py.
diff --git a/app_api/java/com/android/simpleperf/ProfileSession.java b/app_api/java/com/android/simpleperf/ProfileSession.java
index a3d4796..d1dbc53 100644
--- a/app_api/java/com/android/simpleperf/ProfileSession.java
+++ b/app_api/java/com/android/simpleperf/ProfileSession.java
@@ -19,6 +19,10 @@
 import android.os.Build;
 import android.system.OsConstants;
 
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -55,6 +59,7 @@
  * process, filter logcat with `simpleperf`.
  * </p>
  */
+@RequiresApi(28)
 public class ProfileSession {
     private static final String SIMPLEPERF_PATH_IN_IMAGE = "/system/bin/simpleperf";
 
@@ -65,27 +70,27 @@
         STOPPED,
     }
 
-    private State state = State.NOT_YET_STARTED;
-    private String appDataDir;
-    private String simpleperfPath;
-    private String simpleperfDataDir;
-    private Process simpleperfProcess;
-    private boolean traceOffcpu = false;
+    private State mState = State.NOT_YET_STARTED;
+    private final String mAppDataDir;
+    private String mSimpleperfPath;
+    private final String mSimpleperfDataDir;
+    private Process mSimpleperfProcess;
+    private boolean mTraceOffCpu = false;
 
     /**
      * @param appDataDir the same as android.content.Context.getDataDir().
      *                   ProfileSession stores profiling data in appDataDir/simpleperf_data/.
      */
-    public ProfileSession(String appDataDir) {
-        this.appDataDir = appDataDir;
-        simpleperfDataDir = appDataDir + "/simpleperf_data";
+    public ProfileSession(@NonNull String appDataDir) {
+        mAppDataDir = appDataDir;
+        mSimpleperfDataDir = appDataDir + "/simpleperf_data";
     }
 
     /**
      * ProfileSession assumes appDataDir as /data/data/app_package_name.
      */
     public ProfileSession() {
-        String packageName = "";
+        String packageName;
         try {
             String s = readInputStream(new FileInputStream("/proc/self/cmdline"));
             for (int i = 0; i < s.length(); i++) {
@@ -101,15 +106,15 @@
         if (packageName.isEmpty()) {
             throw new Error("failed to find packageName");
         }
-        appDataDir = "/data/data/" + packageName;
-        simpleperfDataDir = appDataDir + "/simpleperf_data";
+        mAppDataDir = "/data/data/" + packageName;
+        mSimpleperfDataDir = mAppDataDir + "/simpleperf_data";
     }
 
     /**
      * Start recording.
      * @param options RecordOptions
      */
-    public void startRecording(RecordOptions options) {
+    public void startRecording(@NonNull RecordOptions options) {
         startRecording(options.toRecordArgs());
     }
 
@@ -117,77 +122,77 @@
      * Start recording.
      * @param args arguments for `simpleperf record` cmd.
      */
-    public synchronized void startRecording(List<String> args) {
-        if (state != State.NOT_YET_STARTED) {
-            throw new AssertionError("startRecording: session in wrong state " + state);
+    public synchronized void startRecording(@NonNull List<String> args) {
+        if (mState != State.NOT_YET_STARTED) {
+            throw new AssertionError("startRecording: session in wrong state " + mState);
         }
         for (String arg : args) {
             if (arg.equals("--trace-offcpu")) {
-                traceOffcpu = true;
+                mTraceOffCpu = true;
             }
         }
-        simpleperfPath = findSimpleperf();
+        mSimpleperfPath = findSimpleperf();
         checkIfPerfEnabled();
         createSimpleperfDataDir();
-        createSimpleperfProcess(simpleperfPath, args);
-        state = State.STARTED;
+        createSimpleperfProcess(mSimpleperfPath, args);
+        mState = State.STARTED;
     }
 
     /**
      * Pause recording. No samples are generated in paused state.
      */
     public synchronized void pauseRecording() {
-        if (state != State.STARTED) {
-            throw new AssertionError("pauseRecording: session in wrong state " + state);
+        if (mState != State.STARTED) {
+            throw new AssertionError("pauseRecording: session in wrong state " + mState);
         }
-        if (traceOffcpu) {
+        if (mTraceOffCpu) {
             throw new AssertionError(
                     "--trace-offcpu option doesn't work well with pause/resume recording");
         }
         sendCmd("pause");
-        state = State.PAUSED;
+        mState = State.PAUSED;
     }
 
     /**
      * Resume a paused session.
      */
     public synchronized void resumeRecording() {
-        if (state != State.PAUSED) {
-            throw new AssertionError("resumeRecording: session in wrong state " + state);
+        if (mState != State.PAUSED) {
+            throw new AssertionError("resumeRecording: session in wrong state " + mState);
         }
         sendCmd("resume");
-        state = State.STARTED;
+        mState = State.STARTED;
     }
 
     /**
      * Stop recording and generate a recording file under appDataDir/simpleperf_data/.
      */
     public synchronized void stopRecording() {
-        if (state != State.STARTED && state != State.PAUSED) {
-            throw new AssertionError("stopRecording: session in wrong state " + state);
+        if (mState != State.STARTED && mState != State.PAUSED) {
+            throw new AssertionError("stopRecording: session in wrong state " + mState);
         }
-        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P + 1 &&
-                simpleperfPath.equals(SIMPLEPERF_PATH_IN_IMAGE)) {
+        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P + 1
+                && mSimpleperfPath.equals(SIMPLEPERF_PATH_IN_IMAGE)) {
             // The simpleperf shipped on Android Q contains a bug, which may make it abort if
             // calling simpleperfProcess.destroy().
             destroySimpleperfProcessWithoutClosingStdin();
         } else {
-            simpleperfProcess.destroy();
+            mSimpleperfProcess.destroy();
         }
         try {
-            int exitCode = simpleperfProcess.waitFor();
+            int exitCode = mSimpleperfProcess.waitFor();
             if (exitCode != 0) {
                 throw new AssertionError("simpleperf exited with error: " + exitCode);
             }
         } catch (InterruptedException e) {
         }
-        simpleperfProcess = null;
-        state = State.STOPPED;
+        mSimpleperfProcess = null;
+        mState = State.STOPPED;
     }
 
     private void destroySimpleperfProcessWithoutClosingStdin() {
         // In format "Process[pid=? ..."
-        String s = simpleperfProcess.toString();
+        String s = mSimpleperfProcess.toString();
         final String prefix = "Process[pid=";
         if (s.startsWith(prefix)) {
             int startIndex = prefix.length();
@@ -198,7 +203,7 @@
                 return;
             }
         }
-        simpleperfProcess.destroy();
+        mSimpleperfProcess.destroy();
     }
 
     private String readInputStream(InputStream in) {
@@ -225,19 +230,20 @@
         throw new Error("can't find simpleperf on device. Please run api_profiler.py.");
     }
 
-    private boolean isExecutableFile(String path) {
+    private boolean isExecutableFile(@NonNull String path) {
         File file = new File(path);
         return file.canExecute();
     }
 
+    @Nullable
     private String findSimpleperfInTempDir() {
         String path = "/data/local/tmp/simpleperf";
         File file = new File(path);
-        if (!file.isFile()){
+        if (!file.isFile()) {
             return null;
         }
         // Copy it to app dir to execute it.
-        String toPath = appDataDir + "/simpleperf";
+        String toPath = mAppDataDir + "/simpleperf";
         try {
             Process process = new ProcessBuilder()
                     .command("cp", path, toPath).start();
@@ -255,7 +261,7 @@
             Process process = new ProcessBuilder().command(toPath, "list", "sw").start();
             process.waitFor();
             String data = readInputStream(process.getInputStream());
-            if (data.indexOf("cpu-clock") == -1) {
+            if (!data.contains("cpu-clock")) {
                 return null;
             }
         } catch (Exception e) {
@@ -265,7 +271,7 @@
     }
 
     private void checkIfPerfEnabled() {
-        String value = "";
+        String value;
         Process process;
         try {
             process = new ProcessBuilder()
@@ -280,13 +286,13 @@
         }
         value = readInputStream(process.getInputStream());
         if (value.startsWith("1")) {
-            throw new Error("linux perf events aren't enabled on the device." +
-                            " Please run api_profiler.py.");
+            throw new Error("linux perf events aren't enabled on the device."
+                    + " Please run api_profiler.py.");
         }
     }
 
     private void createSimpleperfDataDir() {
-        File file = new File(simpleperfDataDir);
+        File file = new File(mSimpleperfDataDir);
         if (!file.isDirectory()) {
             file.mkdir();
         }
@@ -307,9 +313,9 @@
         args.addAll(recordArgs);
 
         // 2. Create the simpleperf process.
-        ProcessBuilder pb = new ProcessBuilder(args).directory(new File(simpleperfDataDir));
+        ProcessBuilder pb = new ProcessBuilder(args).directory(new File(mSimpleperfDataDir));
         try {
-            simpleperfProcess = pb.start();
+            mSimpleperfProcess = pb.start();
         } catch (IOException e) {
             throw new Error("failed to create simpleperf process: " + e.getMessage());
         }
@@ -321,11 +327,11 @@
         }
     }
 
-    private void sendCmd(String cmd) {
+    private void sendCmd(@NonNull String cmd) {
         cmd += "\n";
         try {
-            simpleperfProcess.getOutputStream().write(cmd.getBytes());
-            simpleperfProcess.getOutputStream().flush();
+            mSimpleperfProcess.getOutputStream().write(cmd.getBytes());
+            mSimpleperfProcess.getOutputStream().flush();
         } catch (IOException e) {
             throw new Error("failed to send cmd to simpleperf: " + e.getMessage());
         }
@@ -334,6 +340,7 @@
         }
     }
 
+    @NonNull
     private String readReply() {
         // Read one byte at a time to stop at line break or EOF. BufferedReader will try to read
         // more than available and make us blocking, so don't use it.
@@ -341,13 +348,13 @@
         while (true) {
             int c = -1;
             try {
-                c = simpleperfProcess.getInputStream().read();
+                c = mSimpleperfProcess.getInputStream().read();
             } catch (IOException e) {
             }
             if (c == -1 || c == '\n') {
                 break;
             }
-            s += (char)c;
+            s += (char) c;
         }
         return s;
     }
diff --git a/app_api/java/com/android/simpleperf/RecordOptions.java b/app_api/java/com/android/simpleperf/RecordOptions.java
index 3ed39fb..ae65b94 100644
--- a/app_api/java/com/android/simpleperf/RecordOptions.java
+++ b/app_api/java/com/android/simpleperf/RecordOptions.java
@@ -18,6 +18,10 @@
 
 import android.system.Os;
 
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -39,30 +43,34 @@
  *   session.startRecording(options);
  * </p>
  */
+@RequiresApi(28)
 public class RecordOptions {
 
     /**
      * Set output filename. Default is perf-<month>-<day>-<hour>-<minute>-<second>.data.
      * The file will be generated under simpleperf_data/.
      */
-    public RecordOptions setOutputFilename(String filename) {
-        outputFilename = filename;
+    @NonNull
+    public RecordOptions setOutputFilename(@NonNull String filename) {
+        mOutputFilename = filename;
         return this;
     }
 
     /**
      * Set event to record. Default is cpu-cycles. See `simpleperf list` for all available events.
      */
-    public RecordOptions setEvent(String event) {
-        this.event = event;
+    @NonNull
+    public RecordOptions setEvent(@NonNull String event) {
+        mEvent = event;
         return this;
     }
 
     /**
      * Set how many samples to generate each second running. Default is 4000.
      */
+    @NonNull
     public RecordOptions setSampleFrequency(int freq) {
-        this.freq = freq;
+        mFreq = freq;
         return this;
     }
 
@@ -70,86 +78,92 @@
      * Set record duration. The record stops after `durationInSecond` seconds. By default,
      * record stops only when stopRecording() is called.
      */
+    @NonNull
     public RecordOptions setDuration(double durationInSecond) {
-        this.durationInSecond = durationInSecond;
+        mDurationInSeconds = durationInSecond;
         return this;
     }
 
     /**
      * Record some threads in the app process. By default, record all threads in the process.
      */
-    public RecordOptions setSampleThreads(List<Integer> threads) {
-        this.threads.addAll(threads);
+    @NonNull
+    public RecordOptions setSampleThreads(@NonNull List<Integer> threads) {
+        mThreads.addAll(threads);
         return this;
     }
 
     /**
      * Record dwarf based call graph. It is needed to get Java callstacks.
      */
+    @NonNull
     public RecordOptions recordDwarfCallGraph() {
-        this.dwarfCallGraph = true;
-        this.fpCallGraph = false;
+        mDwarfCallGraph = true;
+        mFpCallGraph = false;
         return this;
     }
 
     /**
      * Record frame pointer based call graph. It is suitable to get C++ callstacks on 64bit devices.
      */
+    @NonNull
     public RecordOptions recordFramePointerCallGraph() {
-        this.fpCallGraph = true;
-        this.dwarfCallGraph = false;
+        mFpCallGraph = true;
+        mDwarfCallGraph = false;
         return this;
     }
 
     /**
      * Trace context switch info to show where threads spend time off cpu.
      */
+    @NonNull
     public RecordOptions traceOffCpu() {
-        this.traceOffCpu = true;
+        mTraceOffCpu = true;
         return this;
     }
 
     /**
      * Translate record options into arguments for `simpleperf record` cmd.
      */
+    @NonNull
     public List<String> toRecordArgs() {
         ArrayList<String> args = new ArrayList<>();
 
-        String filename = outputFilename;
+        String filename = mOutputFilename;
         if (filename == null) {
             filename = getDefaultOutputFilename();
         }
         args.add("-o");
         args.add(filename);
         args.add("-e");
-        args.add(event);
+        args.add(mEvent);
         args.add("-f");
-        args.add(String.valueOf(freq));
-        if (durationInSecond != 0.0) {
+        args.add(String.valueOf(mFreq));
+        if (mDurationInSeconds != 0.0) {
             args.add("--duration");
-            args.add(String.valueOf(durationInSecond));
+            args.add(String.valueOf(mDurationInSeconds));
         }
-        if (threads.isEmpty()) {
+        if (mThreads.isEmpty()) {
             args.add("-p");
             args.add(String.valueOf(Os.getpid()));
         } else {
             String s = "";
-            for (int i = 0; i < threads.size(); i++) {
+            for (int i = 0; i < mThreads.size(); i++) {
                 if (i > 0) {
                     s += ",";
                 }
-                s += threads.get(i).toString();
+                s += mThreads.get(i).toString();
             }
             args.add("-t");
             args.add(s);
         }
-        if (dwarfCallGraph) {
+        if (mDwarfCallGraph) {
             args.add("-g");
-        } else if (fpCallGraph) {
+        } else if (mFpCallGraph) {
             args.add("--call-graph");
             args.add("fp");
         }
-        if (traceOffCpu) {
+        if (mTraceOffCpu) {
             args.add("--trace-offcpu");
         }
         return args;
@@ -161,12 +175,22 @@
         return time.format(formatter);
     }
 
-    private String outputFilename;
-    private String event = "cpu-cycles";
-    private int freq = 4000;
-    private double durationInSecond = 0.0;
-    private ArrayList<Integer> threads = new ArrayList<>();
-    private boolean dwarfCallGraph = false;
-    private boolean fpCallGraph = false;
-    private boolean traceOffCpu = false;
+    @Nullable
+    private String mOutputFilename;
+
+    @NonNull
+    private String mEvent = "cpu-cycles";
+
+    private int mFreq = 4000;
+
+    private double mDurationInSeconds = 0.0;
+
+    @NonNull
+    private ArrayList<Integer> mThreads = new ArrayList<>();
+
+    private boolean mDwarfCallGraph = false;
+
+    private boolean mFpCallGraph = false;
+
+    private boolean mTraceOffCpu = false;
 }
diff --git a/bin/android/arm/simpleperf b/bin/android/arm/simpleperf
index 27ef88a..b84efbf 100755
--- a/bin/android/arm/simpleperf
+++ b/bin/android/arm/simpleperf
Binary files differ
diff --git a/bin/android/arm64/simpleperf b/bin/android/arm64/simpleperf
index 2197a57..706b41a 100755
--- a/bin/android/arm64/simpleperf
+++ b/bin/android/arm64/simpleperf
Binary files differ
diff --git a/bin/android/x86/simpleperf b/bin/android/x86/simpleperf
index ecd5f19..008a447 100755
--- a/bin/android/x86/simpleperf
+++ b/bin/android/x86/simpleperf
Binary files differ
diff --git a/bin/android/x86_64/simpleperf b/bin/android/x86_64/simpleperf
index 85b6377..1bc3250 100755
--- a/bin/android/x86_64/simpleperf
+++ b/bin/android/x86_64/simpleperf
Binary files differ
diff --git a/bin/darwin/x86_64/libsimpleperf_report.dylib b/bin/darwin/x86_64/libsimpleperf_report.dylib
index 109049a..9bee019 100755
--- a/bin/darwin/x86_64/libsimpleperf_report.dylib
+++ b/bin/darwin/x86_64/libsimpleperf_report.dylib
Binary files differ
diff --git a/bin/darwin/x86_64/simpleperf b/bin/darwin/x86_64/simpleperf
index 92c71fc..1c047a4 100755
--- a/bin/darwin/x86_64/simpleperf
+++ b/bin/darwin/x86_64/simpleperf
Binary files differ
diff --git a/bin/linux/x86_64/libsimpleperf_report.so b/bin/linux/x86_64/libsimpleperf_report.so
index fbfbb82..79f944f 100755
--- a/bin/linux/x86_64/libsimpleperf_report.so
+++ b/bin/linux/x86_64/libsimpleperf_report.so
Binary files differ
diff --git a/bin/linux/x86_64/simpleperf b/bin/linux/x86_64/simpleperf
index bc070a8..ea4b329 100755
--- a/bin/linux/x86_64/simpleperf
+++ b/bin/linux/x86_64/simpleperf
Binary files differ
diff --git a/bin/windows/x86/libsimpleperf_report.dll b/bin/windows/x86/libsimpleperf_report.dll
index 2478164..d22608e 100755
--- a/bin/windows/x86/libsimpleperf_report.dll
+++ b/bin/windows/x86/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86/simpleperf.exe b/bin/windows/x86/simpleperf.exe
index de6fd9a..a52e41c 100755
--- a/bin/windows/x86/simpleperf.exe
+++ b/bin/windows/x86/simpleperf.exe
Binary files differ
diff --git a/bin/windows/x86_64/libsimpleperf_report.dll b/bin/windows/x86_64/libsimpleperf_report.dll
index 3c57ab6..a04bcd7 100755
--- a/bin/windows/x86_64/libsimpleperf_report.dll
+++ b/bin/windows/x86_64/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe
index 593d104..9827a42 100755
--- a/bin/windows/x86_64/simpleperf.exe
+++ b/bin/windows/x86_64/simpleperf.exe
Binary files differ
diff --git a/doc/README.md b/doc/README.md
index f0cddd2..161fdc0 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -20,7 +20,7 @@
   - [Executable commands reference](#executable-commands-reference)
   - [Scripts reference](#scripts-reference)
   - [Answers to common issues](#answers-to-common-issues)
-    - [Why we suggest profiling on Android &gt;= N devices?](#why-we-suggest-profiling-on-android-gt-n-devices)
+    - [Why we suggest profiling on Android >= N devices?](#why-we-suggest-profiling-on-android--n-devices)
     - [Suggestions about recording call graphs](#suggestions-about-recording-call-graphs)
     - [How to solve missing symbols in report?](#how-to-solve-missing-symbols-in-report)
     - [Fix broken callchain stopped at C functions](#fix-broken-callchain-stopped-at-c-functions)
@@ -233,7 +233,7 @@
 or sent to email addresses listed [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/OWNERS).
 
 If you want to compile simpleperf C++ source code, follow below steps:
-1. Download AOSP master branch as [here](https://source.android.com/setup/build/requirements).
+1. Download AOSP main branch as [here](https://source.android.com/setup/build/requirements).
 2. Build simpleperf.
 ```sh
 $ . build/envsetup.sh
diff --git a/doc/android_application_profiling.md b/doc/android_application_profiling.md
index 259c121..f0e06c0 100644
--- a/doc/android_application_profiling.md
+++ b/doc/android_application_profiling.md
@@ -18,6 +18,7 @@
   - [Record and report call graph](#record-and-report-call-graph)
   - [Report in html interface](#report-in-html-interface)
   - [Show flamegraph](#show-flamegraph)
+  - [Report in Android Studio](#report-in-android-studio)
   - [Record both on CPU time and off CPU time](#record-both-on-cpu-time-and-off-cpu-time)
   - [Profile from launch](#profile-from-launch)
   - [Control recording in application code](#control-recording-in-application-code)
@@ -243,6 +244,17 @@
 $ FlameGraph/flamegraph.pl out.folded >a.svg
 ```
 
+## Report in Android Studio
+
+simpleperf report-sample command can convert perf.data into protobuf format accepted by
+Android Studio cpu profiler. The conversion can be done either on device or on host. If you have
+more symbol info on host, then prefer do it on host with --symdir option.
+
+```sh
+$ simpleperf report-sample --protobuf --show-callchain -i perf.data -o perf.trace
+# Then open perf.trace in Android Studio to show it.
+```
+
 ## Record both on CPU time and off CPU time
 
 We can [record both on CPU time and off CPU time](executable_commands_reference.md#record-both-on-cpu-time-and-off-cpu-time).
diff --git a/doc/android_platform_profiling.md b/doc/android_platform_profiling.md
index 797d640..21cf0f4 100644
--- a/doc/android_platform_profiling.md
+++ b/doc/android_platform_profiling.md
@@ -4,7 +4,7 @@
 - [Android platform profiling](#android-platform-profiling)
   - [Table of Contents](#table-of-contents)
   - [General Tips](#general-tips)
-  - [Start simpleperf from system_server process](#start-simpleperf-from-systemserver-process)
+  - [Start simpleperf from system_server process](#start-simpleperf-from-system_server-process)
   - [Hardware PMU counter limit](#hardware-pmu-counter-limit)
 
 ## General Tips
@@ -12,8 +12,8 @@
 Here are some tips for Android platform developers, who build and flash system images on rooted
 devices:
 1. After running `adb root`, simpleperf can be used to profile any process or system wide.
-2. It is recommended to use the latest simpleperf available in AOSP master, if you are not working
-on the current master branch. Scripts are in `system/extras/simpleperf/scripts`, binaries are in
+2. It is recommended to use the latest simpleperf available in AOSP main, if you are not working
+on the current main branch. Scripts are in `system/extras/simpleperf/scripts`, binaries are in
 `system/extras/simpleperf/scripts/bin/android`.
 3. It is recommended to use `app_profiler.py` for recording, and `report_html.py` for reporting.
 Below is an example.
diff --git a/doc/jit_symbols.md b/doc/jit_symbols.md
new file mode 100644
index 0000000..8d0a2a9
--- /dev/null
+++ b/doc/jit_symbols.md
@@ -0,0 +1,59 @@
+# JIT symbols
+
+## Table of contents
+- [Java JIT symbols](#java-jit-symbols)
+- [Generic JIT symbols](#generic-jit-symbols)
+  - [Symbol map file location for application](#symbol-map-file-location-for-application)
+  - [Symbol map file location for standalone program](#symbol-map-file-location-for-standalone-program)
+  - [Symbol map file format](#symbol-map-file-format)
+  - [Known issues](#known-issues)
+
+## Java JIT symbols
+
+On Android >= P, simpleperf supports profiling Java code, no matter whether it is executed by
+the interpreter, or JITed, or compiled into native instructions. So you don't need to do anything.
+
+For details on Android O and N, see
+[android_application_profiling.md](./android_application_profiling.md#prepare-an-android-application).
+
+## Generic JIT symbols
+
+Simpleperf supports picking up symbols from per-pid symbol map files, somewhat similar to what
+Linux kernel perftool does. Application should create those files at specific locations.
+
+### Symbol map file location for application
+
+Application should create symbol map files in its data directory.
+
+For example, process `123` of application `foo.bar.baz` should create
+`/data/data/foo.bar.baz/perf-123.map`.
+
+### Symbol map file location for standalone program
+
+Standalone programs should create symbol map files in `/data/local/tmp`.
+
+For example, standalone program process `123` should create `/data/local/tmp/perf-123.map`.
+
+### Symbol map file format
+
+Symbol map file is a text file.
+
+Every line describes a new symbol. Line format is:
+```
+<symbol-absolute-address> <symbol-size> <symbol-name>
+```
+
+For example:
+```
+0x10000000 0x16 jit_symbol_one
+0x20000000 0x332 jit_symbol_two
+0x20002004 0x8 jit_symbol_three
+```
+
+### Known issues
+
+Current implementation gets confused if memory pages where JIT symbols reside are reused by mapping
+a file either before or after.
+
+For example, if memory pages were first used by `dlopen("libfoo.so")`, then freed by `dlclose`,
+then allocated for JIT symbols - simpleperf will report symbols from `libfoo.so` instead.
diff --git a/inferno.bat b/inferno.bat
index 5818f98..d0dc6d9 100755
--- a/inferno.bat
+++ b/inferno.bat
@@ -1,2 +1,2 @@
-set PYTHONPATH=%PYTHONPATH%;%~dp0
-python -m inferno.inferno %*
+set SCRIPTPATH=%~dp0
+python %SCRIPTPATH%inferno\inferno.py %*
diff --git a/inferno.sh b/inferno.sh
index d30ee31..f6ab0c6 100755
--- a/inferno.sh
+++ b/inferno.sh
@@ -1,4 +1,3 @@
 #!/bin/bash
 SCRIPTPATH=$(dirname "$0")
-export PYTHONPATH=$SCRIPTPATH:$PYTHONPATH
-python -m inferno.inferno "$@"
+$SCRIPTPATH/inferno/inferno.py "$@"
diff --git a/repo.prop b/repo.prop
index 0f46ff1..5034b09 100644
--- a/repo.prop
+++ b/repo.prop
@@ -1,825 +1,890 @@
-device/amlogic/yukawa 0c40cd25d6f08c7b8edb78e17754556af77e5537
-device/amlogic/yukawa-kernel c6ac0f38ae40519c5b25a2e32906e5ffc7a66584
-device/common 02078b42f653112a53c0f9fb588c4fcc8dadb8af
-device/generic/arm64 1d9a2036fbf62bfc2bb3cd47693d567cea963528
-device/generic/armv7-a-neon 0603c0e02ea7e029892f24c541d0a2d64ce280d6
-device/generic/art 5a1bcd139cfd18fdb9b5a55ff5342afb5f6144f0
-device/generic/car 091b8ddde0bce4c3c419a6f08ca3456d5a69d08c
-device/generic/common 7244cc531ddeee436688ad1586c5d0d3c682eb2f
-device/generic/goldfish 6bafa756c702e79c46b93bcd11d32015ab2a9389
-device/generic/goldfish-opengl 53518d28a9dcec3ef56343ecc82a40fa1f671b68
-device/generic/mini-emulator-arm64 750d94f3e4880d4bbedd13fa655d23e92bd84a7b
-device/generic/mini-emulator-armv7-a-neon e2502de0ced83bd5e093f9d664c8f390538e25b9
-device/generic/mini-emulator-x86 05dc87d4c6f7b8b999326a3bda4171898bbba0f1
-device/generic/mini-emulator-x86_64 490cb75588a691aa14b712a90995b4d77b993958
-device/generic/opengl-transport 41184d014f34d48c2095cd90b1e10fe512aebcbe
-device/generic/qemu f7f60c2edef23f297cce117a6d3d01117d5e5628
-device/generic/trusty 90e72cbc5d82bfd1b99823892c13180957a7c712
-device/generic/uml 0fd5ac6bc9d2bbaf9570c7827907bbf2d45b1403
-device/generic/x86 4372f542d4b407923eec17d4c73f732da984f0bb
-device/generic/x86_64 3331a7c0550bcdd4d1db75797ad36333e3f9eb2b
-device/google/atv 41b1dd11dabecd7ad35dada8b117065bd18f4b24
-device/google/bonito b8fdc6e0823181d64fff6d58343cf0c20cf5defa
-device/google/bonito-kernel f0c465becead0f496248dd45f9abac38ab850fc7
-device/google/bonito-sepolicy b2c7c802d0e55092258566b02b64d6ac4fe07b15
-device/google/contexthub 04cf7b01565473b7b45d364e476e65b6263731f7
-device/google/coral 5a6c4a765c9e74660a73e105e798b90128c80d90
-device/google/coral-kernel a558d9ca8dd3f7f2145a17ffffe90ef19d8b05cf
-device/google/coral-sepolicy 639eea62c28937fc18600914fc364122e2bd57a7
-device/google/crosshatch 5122946b19535c501250d794b14b891179925a58
-device/google/crosshatch-kernel eb63088ec602f26944182020d4296fd28091cabb
-device/google/crosshatch-sepolicy 6f87500b6c1fa72e88d60a3e234bcbd8a13a3314
-device/google/cuttlefish f906d9deda1dc8ee681b65991ab7cab2cac5c65f
-device/google/cuttlefish_kernel 02229053da29c86c4e38d460f1616ebc9e46f3bc
-device/google/cuttlefish_vmm 76172d3e21064c9a633b00e06c3d5547419e9a56
-device/google/fuchsia 9bdf45d5d30fb325b994364805a192a34d714ec2
-device/google/muskie b7090d1ed5194805abed74b53c432a62602b8e0f
-device/google/taimen 75eefcca94c693efa418ede0ab0ebcdd371d7d24
-device/google/vrservices afb685239bfddb472bb66c26d4a1dfed3a5c459c
-device/google/wahoo 4924a1232eb092a082d486dd6fa7d1e965fd0b54
-device/google/wahoo-kernel f7c857d4f33dc0764bb15b183ea810d66d839da3
-device/google_car 2891132e493ffb7c71d25f0fe13138cb01a7b792
-device/linaro/bootloader/OpenPlatformPkg b5c73cd05555a5c6ccf2c265ef5c081024870db7
-device/linaro/bootloader/arm-trusted-firmware 5557a70bc93fd263aca4b8c7064db2942284475d
-device/linaro/bootloader/edk2 1a85c7931db142fbbc7a5f2f889e79d02cc65acc
-device/linaro/dragonboard ca7e8610239790a070fbdc5dc1f15f353967048a
-device/linaro/dragonboard-kernel 8e7ddeec9cb312fd862abc2b762ae8216ddcf6cd
-device/linaro/hikey 56ccb0c973feaf5df2956ea267f5c6f77aefae33
-device/linaro/hikey-kernel 436687127e40fe7d4d4981b192c8e47a69145776
-device/linaro/poplar e5e9a9d6639f371bda1541562230c7ff9e901593
-device/linaro/poplar-kernel db2c6af3d8ad1c5616c9e63e05e73879c683a510
-device/sample 56fe3e04f301c04810e8420be2b780e5b37e0f1f
-device/ti/beagle-x15 e384c725d4d2b364862dea3fe52a35d1539b61b3
-device/ti/beagle-x15-kernel f8bfb91eab96be571ba6fbc13c39e1f3e5ed2300
-kernel/configs bf7a106445e0f06a5a627809ff1449651f318182
-kernel/tests d8204c3d1bd85c39006d794b3061d9ba1c9e0a98
-platform/art c95e676c92a2e133beff23842539a616a0ef5161
-platform/bionic 5bb4f95f80c7bd59e2e4ae33be499464894ae27a
-platform/bootable/recovery f1967a3f35b570b8c138f2315bfc5adbcef77d3a
-platform/build af21c44dda490fd24a089d619bb69598c8a7171e
-platform/build/blueprint 62b05cc12486a490a5a6c199b345906a36090b5b
-platform/build/soong 23596bf13d40981525de21f89776ef7d8726e2b5
-platform/compatibility/cdd 2ab96fa2762e7fc701881059d63e968721c2ed1c
-platform/cts e249ac780139f4ca073da0b26208b6bb3da35271
-platform/dalvik 2be4e50c37fcc0da0c973476d5251861731b6f98
-platform/developers/build 4680a6ccbd70f79eeff98fa14fe781cbeefd1d46
+device/amlogic/yukawa 8c9c1ce22b09176f45f2505ff6933648a85aee94
+device/amlogic/yukawa-kernel 3faba3a82c55ecc3a0fc0a8c8bf9931f1ab2a94f
+device/common bfabb873680d4a7ad6b89022f07d2d2d44c538c7
+device/generic/arm64 cdecd8419d593653f21dd95dc6fac970fdf5c581
+device/generic/armv7-a-neon 795163a4809f1cc0a654b0360b4cc0e4396702af
+device/generic/art 7a7d3652f8656befcefcc209e979cede296bdc99
+device/generic/car 63499dd721b135acfb962706069150acd2c4f1fc
+device/generic/common ff952b7f8179aeec0c196182bba3e72f52aef8a9
+device/generic/goldfish fbaba93e107631dca24616cc20c166f15f6360c9
+device/generic/goldfish-opengl eabfa56bab486f05bcfad351828653540aa65461
+device/generic/mini-emulator-arm64 d31ac6ceeee4bb8384eb33efd30eed94ab547e57
+device/generic/mini-emulator-armv7-a-neon 09a6a5e7c17e038278ab16921f0ffc22ed15c634
+device/generic/mini-emulator-x86 ba7fb372d86d2759dc1b2cfe350f2bc6df9712c9
+device/generic/mini-emulator-x86_64 bbb4ca884cfe3669a4d4273f340d949a79e690d1
+device/generic/opengl-transport 95eb74502a8225c973caa6a0e4885a3c540d80ef
+device/generic/qemu c0de01f7be9a678510a8ff370f6af1212fd6c47c
+device/generic/trusty 1d21638841907c459b63a5fad6f4a5c3462b2bc3
+device/generic/uml 9c113ce16b4e0c7bfaab04292870ae3c44df62e8
+device/generic/x86 3809d2dced5ce7421e2ce074a977489977e58a45
+device/generic/x86_64 f393fb865452d99d0564cc80e84bef7ab726f378
+device/google/atv a4cf6dd224fa9b513f554e8d8469baf4bb8963b5
+device/google/bonito 1c125d5bed4041ff0f352bb7d169082cab913dcd
+device/google/bonito-kernel f022b8cefcb42bd5e9aeb39f81ccdcfeb3478746
+device/google/bonito-sepolicy 79b61579f095db50da27d2b11e730fa816145733
+device/google/contexthub 13c19cecc4424d8f21570314a28323bc67c5bd43
+device/google/coral f689e621b2994be0316779aeb8fce56ab1a2a10b
+device/google/coral-kernel 6a007776efe3a694e8f818760a2a633b4fa012ad
+device/google/coral-sepolicy 296408a0951f19837ba8f6cdc96c38c0431c6538
+device/google/crosshatch 4f867dcd5856cd019b49e3c7222cc28ab76e04df
+device/google/crosshatch-kernel 9a69e9d7f85ecebc1bb742fed7f5fbba7f439850
+device/google/crosshatch-sepolicy 6345542700430e8c00c99869e63c5b1532e327c5
+device/google/cuttlefish a76bb72fb07cfa8852cf868f5b527ce69b75773a
+device/google/cuttlefish_kernel 91f70f90879142bfdc098e0690f785a753299caa
+device/google/cuttlefish_prebuilts 1ecf34e8691539771ca11d47ecfa28fb0f753e2b
+device/google/cuttlefish_vmm d2c5c4addb100332a13b214d5869fea545c7e679
+device/google/fuchsia ddebab9591c480be1eac1f888c2ed29c0b028d02
+device/google/muskie c4fe3c0738172b22ec6bd79b23ca554dfe611a3b
+device/google/sunfish 11d968fecc819d1975abec6761baa1be2cb77df4
+device/google/sunfish-kernel 366e6da892496c61e5baed2d5f2c5a89395aced5
+device/google/sunfish-sepolicy 074c899cb5306031646560b83770f301ca4ed6ba
+device/google/taimen a53ad5c0d4aa7028bef9c2a7639ae8551b2496e9
+device/google/trout 755ffd15f064df8a604fde9f48283a9af226f5c6
+device/google/vrservices 3bdf3891f049d9451e38a3ed3587128a7fdb826f
+device/google/wahoo 17d4bbf0a8bb4573a63a682a3d38bd505b2d1ac6
+device/google/wahoo-kernel 8aa8be3fa77c12ac2702074087a7b47991175d42
+device/google_car 61fd8e0ba35e86716bdcb73f283edca64cd5a7be
+device/linaro/dragonboard 10a94181705b2269c7594f2cc02a0e40b903ba9e
+device/linaro/dragonboard-kernel ad0baf481bcb6120891b3a57c07e29378248aa57
+device/linaro/hikey e7ce2fca02cc4ef2c74ad7ff3a7fd47285c99676
+device/linaro/hikey-kernel b00931f21c7debf8702db91ee9b1f4d570f579bb
+device/linaro/poplar 1cc51102f4cdd691f5d09953a321973c98240890
+device/linaro/poplar-kernel dc5a5f37e19871ed67bb9e9209e7318bb3e6ad31
+device/mediatek/wembley-sepolicy 050ce8840703584b02630fb3fd073b8784a1ac98
+device/sample 7d827516f933dc2625228049a25d2e3a8d2bcb09
+device/ti/beagle-x15 6c4c6c1eb8d599b210aec4a9b535ca99852f7b8c
+device/ti/beagle-x15-kernel 8aacfce3cc5e2a17970c5af35cffeca6f5eed4b2
+kernel/configs 5871c9d012905d7cd1988a10416dbfe093ff421d
+kernel/prebuilts/4.19/arm64 d39df75729a50d97e7c319bd5f9d5839ea47ee70
+kernel/prebuilts/5.4/arm64 679d6fdc940a63d1d16d3a8c3aa3e64ca8bc09e0
+kernel/prebuilts/5.4/x86-64 6e26170fb904ceeed555d03e06f5a10e821d1fc4
+kernel/prebuilts/mainline/arm64 db0b00a23f8d174e74e93ef184da62f41eb1acfb
+kernel/tests c280fef3735b610f04445624271f551d5575cc84
+platform/art 10aa67293c84762540f714d956cb63ede3dc7290
+platform/bionic c52c09215365e86a86be83f4073af79b0d2a4e18
+platform/bootable/recovery 1a8a9f16b1ac2711d2002a34580e4c22b8642579
+platform/build 44ec004786cb1897df7586b7401023ce82c356e6
+platform/build/blueprint 5f8246f6f8a77f41ee105b5839f690e54b536714
+platform/build/soong bdcd6496744bb55b81125025d2b2b695498964c0
+platform/compatibility/cdd 3da18a229fce4d1651fc043d510c192c31e4ee99
+platform/cts 11ef08c6fa656d09b694420618888a4c2cfba4c1
+platform/dalvik 3bccf8e7ca319200358ff63f54379561c27a331f
+platform/developers/build c99220f588802d0b0dabe3a255e97891065587f8
 platform/developers/demos 03814c35b8ee0a1284c667556260124d97466b28
-platform/developers/samples/android b8dfc7e2999d40e1d3bbd7f7e2a3a17c9b38c99a
-platform/development e0863604d1cb2b0b8cf75312a21249e085ea5c2e
-platform/external/FP16 e84605c3d8ac7e36d3adab979ea2093160a40cea
-platform/external/FXdiv 7a38522c8debbb2a216ab39063746e5adb391f88
-platform/external/ImageMagick bda06dde11ab5bc47691043afa6203b227c8fdff
-platform/external/OpenCSD 1191cd7786e9340801de9f2bbaa062d9bc601cab
-platform/external/Reactive-Extensions/RxCpp 931cdf457bfda220631a597378d6964278869501
-platform/external/XNNPACK 2ab8e86e966f7f28f1acb58f827c48930d1df9fa
-platform/external/aac 9c7ea4ff4c186cfcb2400c46fdf4b5e2b460ea1e
-platform/external/abseil-cpp f194138dceced5005962a11ad5bda7f485f05282
-platform/external/adhd 6fac63a060336f95c76851fe8139c3e15c117830
-platform/external/adt-infra 737dd885cbb77fef6fdd63d539f38beb00f8406d
-platform/external/android-clat 8d679760e8a97c704adad3ba282bfc2729a69f1b
-platform/external/androidplot 29f357bed07228b4588a57d4e0849cba830edf3a
-platform/external/angle 25951626aab9e0218ff01fb77fc25e3338e6db1e
-platform/external/ant-glob 30656a2771dafdcabd11368fefb258b5c4a582b7
-platform/external/antlr 11b81ff1e8754eb8ed495c96d0695c21dd56d29f
-platform/external/apache-commons-bcel ea58cbbbf74d2da49d2eb04958a33eedf802baf8
-platform/external/apache-commons-compress 808546894132d2298f6d3ede7f2c00609bfa9395
-platform/external/apache-commons-math ddae33873656c5d762aa3428058d6355eab49627
-platform/external/apache-harmony 9c65d96592e13194cd9f42fca311a992de1c1aa5
-platform/external/apache-http fee9649ee53ee01414527be29a795abc1ed97281
-platform/external/apache-xml bc0f8d79bc94fa891d7c425d3fe9d2ad41017451
-platform/external/arm-neon-tests 6c104744018ad0fa50b10c6389a731b0ddb3eaac
-platform/external/arm-optimized-routines 21764384a46f3d9d966dee639694da9da13da1a7
-platform/external/arm-trusted-firmware 6275614e9d5b4cc2e9435b756e24447ef5b9fc5b
-platform/external/autotest 036bc8646ec608438d87ce3e0609125947224cb5
-platform/external/avb 65e7931862dc37394224e75f4963e70ce838f181
-platform/external/bc 53ff4b455fbe13b175ce1f18bb02531d61b69632
-platform/external/bcc cf1eabdd5ff0d2d71b012bb5f7b851b244108107
-platform/external/blktrace 30aec89bfe86103d4a8bb964c88e4cdb097f7c70
-platform/external/boringssl c4a183049cab9a4ed787826c5ad7bc6ca6d75283
-platform/external/bouncycastle ff58709d974b7721040b00401c1abb045d74e176
-platform/external/brotli d1684c71806c7986e21b09cd6c44e3182a822a90
-platform/external/bsdiff fb2a4d0ce3a188b74f1adbfa2f6399feffac468f
-platform/external/bzip2 ddc5601275ce9132fac7e84fc704756260b3b042
-platform/external/caliper 09f2c4a64481a3996cc519b0974cdfe2a01f6b68
+platform/developers/samples/android b0700243e9e3d90f56903d9b4b362a1207d4eaca
+platform/development 1c7e51fd95663b68e593ee5994536f2c253786c6
+platform/external/FP16 7681bf38cdafb11cee378ae6c951e1bc35ecf26d
+platform/external/FXdiv 8278a4b187c361260e09433a39c1f22dab29289a
+platform/external/ImageMagick 8a496f4f138a25d558207d2142bc23487cfd4baf
+platform/external/OpenCL-CTS 5dd0c02768ab422ac1bfcc6ce5fd0aeb12007e15
+platform/external/OpenCSD 0b0a96ca279c793ec9831b21be83a6758b3e3d97
+platform/external/Reactive-Extensions/RxCpp 29936b4e3c18ed660e6613989fd9b24e2747ed03
+platform/external/XNNPACK ee58504ee973c4647bde3ffd26e323fc04e7e1cf
+platform/external/aac 107436c336d73ea8a6837b844c6df40933963811
+platform/external/abseil-cpp 1b97406f4d5cb09179ef1ba5a263631fca8d77e1
+platform/external/adhd 3d29d325bc0cf67529a6424eceb67f2f60505677
+platform/external/adt-infra fb4938345b8640c51308cbd96799d876e6c9b7b1
+platform/external/android-clat 0219c468dffbf0f4197ce8c3fe317ab10d837b06
+platform/external/androidplot 78257c7236391d52d318d3321211c7f66edeca02
+platform/external/angle e3142fd358e91c99ab97ff5a6dda6e59a504f7a0
+platform/external/ant-glob 4ac0b4ce260d36c6c1c0c602e353ef47093a0c02
+platform/external/antlr fbec22862f60eba7dff9c1306efb8b4651a14715
+platform/external/apache-commons-bcel 96249b367dc5bc8046181d3e9d598c8b4274e1f9
+platform/external/apache-commons-compress 6a32acf98ccb2067e081b77536c32ddb58c23b73
+platform/external/apache-commons-math 8b6325a854bf42ab2030d901a5cb130e816ef1f2
+platform/external/apache-harmony 1a1d33970f0e281f55e8955cbf461fec19663b8d
+platform/external/apache-http df75f0d5ea81503192b1db4f518c86b56d6708c4
+platform/external/apache-xml 03d571a27e07548978171da1e16fde477d105ad4
+platform/external/arm-neon-tests a96f3148cb87ae056fe8180fa65653728c438b53
+platform/external/arm-optimized-routines 0d72a9ae6f9f598b8cdf69ca61a986772f4badc9
+platform/external/arm-trusted-firmware dbafbe823839843a2b200e4d5f82cd18eec707af
+platform/external/auto cabd5c79bdee3ecd8a7caf476fc6f2145431500f
+platform/external/autotest 5513186970c39eab90ac244b32d5263d437cdb1d
+platform/external/avb 49436965a34b50a0fe6546fecd6cdd09ff707277
+platform/external/bc f070ea70dce83b497a59bf83efd9207a090e92d8
+platform/external/bcc b4f33453aa61ce28f6344da71708042158024ef8
+platform/external/blktrace 616ceac28fe5854ae35c4e5017e5bb5ab06167e3
+platform/external/boringssl 1e6f192ba186589248d6589cfc497c18d7fbae93
+platform/external/bouncycastle e352d852da7ea815cebb770a2950d341c39acdb9
+platform/external/brotli 44b97204a014ed16eee9c9d9ddbda95bd68740f4
+platform/external/bsdiff 48228e4f7e5dfed68a3b2c2b1f6691feed75dba8
+platform/external/bzip2 d4ea32dc681f865207bfa5518471ff46ab56cbda
+platform/external/caliper 3164c38cca2f8d16bb1223926d52f628ed2de798
 platform/external/capstone c6ac3614c4deea1e903c0f16ec9852c3640e99ca
-platform/external/catch2 72fd765b49f8a65a64f4f4fae0f94d9da9742ef7
-platform/external/cblas e9dd0a060c186d0b79d6aab066119d20aec417d8
-platform/external/cbor-java bb4da02885049c4e4abf2141cd04f3b6bb4ea48f
-platform/external/chromium-libpac ab46e8700a4a3cd013fda5e693464e3982b9a2f3
-platform/external/chromium-trace 3d8b33687746b4c5cb05fcbcc3fa3d15130b23b7
-platform/external/chromium-webview 85ce20c7436441e89a95c1d882a6197f0a684f9b
-platform/external/clang dd4873cbf46acc3b3f13c72a3e0d967ad5173708
-platform/external/cldr b29605fadc63b1d28a0886edbcc5ff0fdd1376d1
-platform/external/cn-cbor 2802d42393f1f3d8802f3ee299fa7db9e55efe5d
-platform/external/compiler-rt a685e605285e43e520e648ff9a41bbb77e0a271b
-platform/external/conscrypt 7643498e6c971a463d3d84e56dd3330336211577
-platform/external/cpu_features 4d74591f6ce08fb9ad7b76b8661534ca9d1c6f00
-platform/external/cpuinfo 845415a974ea6e3046f924d51058480886aea8cd
-platform/external/crcalc 24c0e489f599a34649d01ff8207d17468b66050c
-platform/external/cros/system_api 11b12882bb32ffb778a02ef3fe9694f0a90a2240
-platform/external/crosvm 20e156f22a4b8aec441e1fe045807dd8e5a77899
-platform/external/curl f60098b7793fe7784d5c569c713cb65f58efe33e
-platform/external/dagger2 4c5a79126e53acb25632b037b4aed14f2b2ce752
-platform/external/deqp 17adf8868642d500356116ff7b046dd691706211
-platform/external/deqp-deps/SPIRV-Headers 0e2c42ddb19cf82b18a573a1d4d8c416246d5db0
-platform/external/deqp-deps/SPIRV-Tools 741ef635cd87916ca73ac54c854cbd89f1da0d04
-platform/external/deqp-deps/glslang 1bd352434c3ece177ff0d09d6ffba7a2b6a8b365
-platform/external/desugar b68bfdaebf7c19e0ff79a0ef37b5fddeea010017
-platform/external/dexmaker 89bf710a62a52e621d7ddb129c1cd037dc59cd5f
-platform/external/dlmalloc 564039af8fa32d498d612d61e47c0600c226bd75
-platform/external/dng_sdk 645c89e89760228f8cd8d49b0e5d0e4fe77674d6
-platform/external/dnsmasq 7f21b125effb07209b222cb742b9cc284c89cb2c
-platform/external/doclava 66e7f4b4958bdee4617343802bdfb315404fb344
-platform/external/dokka 5b01d559d5a68c5e52cfca430ac712233e59d9ea
-platform/external/drm_hwcomposer 3e3826a142c8681c88fce8525d1a7802df3d7ebd
-platform/external/drrickorang cebfce94d7fe5303638c9320f565108c72110939
-platform/external/dtc 72012eb618e5026b819aa16d67ff589c702466b7
-platform/external/dynamic_depth d1193afd3ab17d5038d21cece1751e5696777bb1
-platform/external/e2fsprogs 4322fe6ad38bfe905503df1d6015f4f22b823440
-platform/external/easymock e33d6720aad33beee63d75667a0b06a44a809552
-platform/external/eigen 1cb44ed5f3ef9a5280bbe2b4ecd01b9d3499bb6f
-platform/external/elfutils e60fde9cdb7ae4c4d00e5689712531c2cd412a46
-platform/external/emma 0362880c242bc0cb2b783a4ce58307b464146f6b
-platform/external/error_prone 339e800f15f5f51026ac8f352eefe9dff5a91178
-platform/external/ethtool 8edaba1a3e532a5eef6c15c5aa41d1fade5eba83
-platform/external/expat 50d1a5e05722ca26604545a370ff249108281d35
-platform/external/f2fs-tools eed5483d85bb4c5b3d50027803d5e36997a4a62f
-platform/external/fastrpc 2a14217bfc18e53bd919fe3afed53b7fee1a5a92
-platform/external/fdlibm 07ec9fec2edf4982870d80dbc5134b46a1cf34d7
-platform/external/fec 69cc2e4b8c4d103a01005d47e0763ad528015a57
-platform/external/flac 339aa04fb49724946a591bf9fcaac5360273c559
-platform/external/flatbuffers 496f616e8a098d41a95026ee4e8ad9e8c65a4699
-platform/external/fmtlib ab3b233769bb644f18e74a57a500973c37467f53
-platform/external/fonttools 8ec2fcc4bfad2b2ab556e1e4495ec5414eca00dc
-platform/external/freetype 8940288dbf470ed4ea17aa0b9fe50ac190533858
-platform/external/fsck_msdos 6e58ad141037756a27d0ee4030caa1effe60990d
-platform/external/fsverity-utils be07f50c9a9a0af139e3c6fde94c4734619f6c3d
-platform/external/gemmlowp 7c20c542e7d418cd42c50d65b58411d8338a4725
-platform/external/gflags 1e4864612164bbc7aacd7d8444a1e6e0c2536c21
-platform/external/giflib 6614d71c0d900b62caefee984eee84fbdcebf910
-platform/external/glide ab07e1bd0d9dcb237a9b28219ffd2b345a5a0032
-platform/external/golang-protobuf 3416bba2e6fd9e44fffd3407deeda6d4dabf75d7
-platform/external/google-benchmark fbe34f5815fdaf3d3058a89bd43eae6189d70426
-platform/external/google-breakpad 1ad96ae1fbe04a49a92ed6590da306ef23a8ab9e
-platform/external/google-fonts/arbutus-slab 94e20b861adb0aac03f64de2db36fc03d1d3f6d9
-platform/external/google-fonts/arvo 8f18c591f0f48b583d92fcd7c8d7bf12f05f3b03
-platform/external/google-fonts/carrois-gothic-sc 9168e912667d0577d469f80e78976b8b5bcf946c
-platform/external/google-fonts/coming-soon 1835f9c6eb1f07f0b725d21090aed24eeb10e926
-platform/external/google-fonts/cutive-mono 500bbf82565e7f5dfb3572b5bb779a2510aa4ff3
-platform/external/google-fonts/dancing-script 3e5103bf79685fa2df39238c5935c669d6738d14
-platform/external/google-fonts/lato 991433fbcc025b31c1d761ece62db68d32a21e9b
-platform/external/google-fonts/rubik 10bec15428281cfa63e214a06898405a9abeb257
-platform/external/google-fonts/source-sans-pro 9480081e0332e0aeb489f46b508f51d14b612cdb
-platform/external/google-fonts/zilla-slab d70a3384eae9ee9a00bac4f91d072f28175f0ea3
-platform/external/google-fruit dac7239b2dad491e8df0c9908516ed7a74a75e9c
-platform/external/google-styleguide 137d7daec5aa80d14b8e221402fe654bbf53f7ea
-platform/external/googletest 835580fa3e7dfa71db382918fc68dcfbd87d54ee
-platform/external/gptfdisk bf8b81a6aace4eed0b93bf56cbcd877d3be1a41f
-platform/external/grpc-grpc 9a78ebdabdf2d43a358f66d054a7c3810389f14e
-platform/external/grpc-grpc-java 980223d5b685accbe111899f9f8f3ab2a9d6ac9d
-platform/external/guava c549dc3a8a9768376a5d75bd34ab43f3b2eedf57
-platform/external/guice 9821c80a42661fedaf68b030f57290ef994fc608
-platform/external/gwp_asan 5c3312a214807d4ab43b139a8ea0414206ca1c42
-platform/external/hamcrest 536b438c8828b7c5a681faa3dec60f64aa95e400
-platform/external/harfbuzz_ng 9edd6200bf2ab1ff2368de12848a0a84bc9da3b3
-platform/external/honggfuzz c57e47cc5168e9272292c62974797210060d50af
-platform/external/hyphenation-patterns f78f5236ece42620bf68b242a7e8ae1bc34a42be
-platform/external/icu c4bef4e911b4ba13320000113172d445cda1e5f5
-platform/external/igt-gpu-tools fb41a04fcf8082526d9be3d45d3521d0b9504a63
-platform/external/image_io a1d6c0b09ae7e58d9273237d57d856ac99af4047
-platform/external/ims 4e2f0f78d9e674fd88021e888d9010f160e3a6d6
-platform/external/iperf3 9b92cad488e7338cc147faa0d335b9d8ca185dd0
-platform/external/iproute2 3e3140c947574aec554f6f59b9ab32bcbcc21e7d
-platform/external/ipsec-tools 56c653d10325defb7207442dee4622d8497408d6
-platform/external/iptables 8a9431a59eea8303f5eda9742fc401a7b7875db7
-platform/external/iputils 7ad183ef6dfe5f29063c74a53ec9a611554510fd
-platform/external/iw 62cccf1c5615fe86ac5b0f200e931fcb972e8a94
-platform/external/jacoco 3df1701b19da87d78f2360a4e3f7d7d4b07c9fe7
-platform/external/jarjar 561dbf24fd11374e4c070d269c96b824e8d0085d
-platform/external/javaparser 1e38edc5edcd7847a222e105fc0e476b9083df70
-platform/external/javapoet aa8ac864c3e92f5a5a889f56e9c6af824bebd815
-platform/external/javasqlite 107c8496143292e97348a478dc9247d7d78ec08f
-platform/external/jcommander b9afd7da2e665ce37b967a861bf5f19dcf46979e
-platform/external/jdiff a1819b1fef852109b6334504125c72f83b49273e
-platform/external/jemalloc 0213e09145eb76b6a713bbe202acf1a758fc73bb
-platform/external/jemalloc_new cb57fbe3db46f2c44862020900f9d2b918da5410
-platform/external/jimfs 483c974439afb703c8f0c41385bb0242b4ca2727
-platform/external/jline c9ccf772ec7d9ebdbbb59742d4d910e4130f754d
-platform/external/jsilver add9bda0e3c6ee079ba02e1c2fb98311278ebf91
-platform/external/jsmn f9a89a90d0980cd2330c348c45c8e7e5f5c66fcf
-platform/external/jsoncpp bfa0005fbb7ab47b7872de92c3fe873ff754bad8
-platform/external/jsr305 096ab47091ebdc8ec6b3ef08fed8e1828721c2d3
-platform/external/jsr330 c0be9bf05520045c83ab6f148b06c829797ba5db
-platform/external/junit 93bdf2371f08de94537546274715f00ea1f7dc73
-platform/external/junit-params 7d51fb6d0ad23afa115e41c6f180d3de6e762305
-platform/external/kernel-headers 8914211de1f562ebf5311cbd92153685baa9daa7
-platform/external/kmod 9a6be8a50f90559e09faf40565b8e95b520e26fe
-platform/external/kotlinc debe9c78cf7b19f39d7eb66da78a8de9dfdea537
-platform/external/kotlinx.coroutines 78ffcbc1a8743b072d1dee88b12c962b1d5c8f57
-platform/external/ksoap2 de3576526bbe995637ee47714eec77ab9caa1ae1
-platform/external/libaom 88307770d9a77d791e7422911e09735b4a4127f0
-platform/external/libavc 542f7cdaaa8f71ffaec2320a3ab9aec38cce2d27
-platform/external/libbackup 5be37a1f9f7a2d7df050b5887bd171728b3c0dc0
-platform/external/libbrillo f5060a6a6bf3e83d674b9fa8fd764975eb6779ef
-platform/external/libcap 0202ea31a89508352cc4a00447328ac7a3711109
-platform/external/libcap-ng bc0f02317d33bf961045c2550c1a41cbf7e65956
-platform/external/libchrome c9d467df7af1a09aed67695ec4c6c244d94019ee
-platform/external/libcppbor 8f841ec19fb73d6e50498a81c5aa6374afc5a326
-platform/external/libcups fb434de585bc209a389bd92a74518501eb2c4de9
-platform/external/libcxx 53b77d27a3689078385e7ec4027b5dacf6b5704c
-platform/external/libcxxabi 0c3459e692aceb0448f0cbcc5eb528a2926e1df9
-platform/external/libdivsufsort dd356c1174e1b232700def4e10c0408ee1c949c3
-platform/external/libdrm 4a3ee72582413b6fc49fa02208f64cf044d4720f
-platform/external/libepoxy d7cabfa213f0da5b7a7e5e46cdc059a23c4bbca6
-platform/external/libese f4e86f00c3d9a1fbf1c833227c2f116f91090ab3
-platform/external/libevent 6f6316dcf159ae15c2ab79e923a721a614e0eb5d
-platform/external/libexif 64d585fffa9a99d113cc1e618f7deb9c4f4bb38f
-platform/external/libffi 4847315b830582829ec9c58c1889ec579be7c884
-platform/external/libfuse 8cceebfc77eda26b1aca1daa44409d505c1fc203
-platform/external/libgav1 412d00d2f49523dedc7b3b4b09aec8fd0984932c
-platform/external/libgsm b1f954ed5f400c635171bf968fd8ab7e24fd4d47
-platform/external/libhevc 23806e6b51d3e326bbd17c4c6fc85c1b35a735b2
-platform/external/libjpeg-turbo 39d426920124d94df55dae9e6611ea64c41ce297
-platform/external/libkmsxx 24d45e00b76cdb3db7d9e5e5defd7f135ffa187d
-platform/external/libldac 15964a0d6fc0520d791aa0eca8c8c64e5327de39
-platform/external/libmpeg2 87d0171bb24aefbaec3c8a72a8a55592e4c2dbeb
-platform/external/libnetfilter_conntrack 7f14c0d8293247ed6a563308111281544577466c
-platform/external/libnfnetlink 62856f20e4ac8b53fbb3c43a8c498941fbc35e4d
-platform/external/libnl e5a6dd79eb20085d72e8621d53c10d505817c463
-platform/external/libogg f0b1d3909eea7e477a41e844c9b5cf1a19b1fe98
-platform/external/libopus da8db89b38064cffede0e9f575fdeb7aad1a87c3
-platform/external/libpcap be8bd1cf7f86484cb4fc01b983c786daa7e39c35
-platform/external/libphonenumber 4c3ac434242bc7e5bf97a52db4e29e4e00182a94
-platform/external/libpng f74acc8c77ebb0f88193a6a487dfa843ce602639
-platform/external/libprotobuf-mutator 4f8e4cf3ddc68dfb92828554ffb4f827448a0aa7
-platform/external/libsrtp2 8def5f93918aeb9243e12c91b9c35fd1c4649c4e
-platform/external/libtextclassifier f03f371518004fa3413d97d6a62d3d2bd8ff9e83
-platform/external/libunwind d1c53718a6adf66921ec5eae402559ae7ee5a27b
-platform/external/libunwind_llvm 7fd14c5cd8652e6fec38cad6739c6a34c7825ee5
-platform/external/libusb e6d7bfdb1f196e06a10226ccb88019cbbeb971ae
-platform/external/libutf 3dcd8d2f1a14f858f816a3506d6799aae66d6900
-platform/external/libvpx c0e829067d4fcdbe3c362711578f69c6af5f14a5
-platform/external/libvterm 47e38a1b8aae8f83dc8301c18b54f83df7563ea3
-platform/external/libwebsockets f068ee5e30f0df76aa7e9a262376a67ac28f2a59
-platform/external/libxaac 350a8c02b9120439aa926a314b7d6cf5cd68345d
-platform/external/libxkbcommon f829f30bebe9e7333f3371ddf38b1f3a3db56418
-platform/external/libxml2 1f3898bcb4bc3cf02ed18ddf0b31c786ca6fab35
-platform/external/libyuv fe77291897f7ee1d8d63a83edfdb6dd123d6162e
-platform/external/linux-kselftest b7d145b0c0f7f9a7f845aedc93b867b16e9f2ac9
-platform/external/llvm c5b4f8aa8ca77e9a28f327b273b7594d3f37621f
-platform/external/lmfit 503720c34f2ce6dd4d4b80ccae63def786496f1c
-platform/external/ltp 3f4578ba97f81062eda3df7902a4245accd6b292
-platform/external/lua faebb963447bcf2c4950080fe365eaa217898d7a
-platform/external/lz4 2f250c78dd5c1e366308879d37e6b12a19cd09cb
-platform/external/lzma 6417fc50c7a1f1341b153e22d6173f6ca7a8c3d7
-platform/external/markdown f5a80aaeab79d253f73708a4ab2dd4e843c88b16
-platform/external/mdnsresponder 9754fe65fc2b04008eda7301fceee9272dcb74de
-platform/external/mesa3d 201b877299179dbee1e3a7bce5967634d2be315e
-platform/external/mime-support 3605a6ee566a42648153cd0ce0cfacab3dbc6c0b
-platform/external/minigbm f3149b446122547619a9cc332db6906e7c48c364
-platform/external/minijail 40c7b2750c4a0bf15af3e31789b57e3a12b6f00b
-platform/external/mksh b6c3632bfac5a65bfab217f75e067caf96263b06
-platform/external/mockftpserver a97174953ccb290488070479da6a26fcf0f4273e
-platform/external/mockito 567de6d49558a10b5319ba3c16c8dcea1d16f1d6
-platform/external/mockwebserver 60ea50c13035ab4f94de796f2f71caf47b80306f
-platform/external/modp_b64 7ab1decb103d90f07d4ed05ae50f560d9bb1c1f2
-platform/external/mp4parser 1ca1c209e011e380213b9095a1bdf962da3f3416
-platform/external/ms-tpm-20-ref f8241f0a83cfb1ebb131c702d727c4cb438a26cb
-platform/external/mtpd 15b040accdf3f492022a5893f94ccc98e1830eef
-platform/external/nanohttpd 740021fedf08d12f86fdd58b60996402ad2c7c59
-platform/external/nanopb-c b67f1515e52367ac570ee8c5c9d6711ea283264b
-platform/external/naver-fonts 03ad9dff369c4a0f68d96d7fc17d63318ca5ac13
-platform/external/neon_2_sse 4cfe2d1d8b84b3bcd621d78cd51f068e05286551
-platform/external/neven 79a5b831a10e54986d23fcbf1b66df7913fbd06c
-platform/external/newfs_msdos 3849d38598820e47e9856ec85d642221baa975d9
-platform/external/nist-pkits eac7fc800ae8c62b5fd410783260dafc9c953696
-platform/external/nist-sip 593f5fc99488a82d5d20aa2509e09388f953548a
-platform/external/nos/host/generic 451a1ae7c8573b408a766182a361759803029222
-platform/external/noto-fonts beef4cd56319d9d505b8de7974b85193a46f5776
-platform/external/oauth db25c6c21f9fb75cc2ff1f5330c44a9a8f011ac4
-platform/external/objenesis 5787af647e24341333b9a188e05b14e168b3fc2b
-platform/external/oj-libjdwp 49d9a3b947316be655a81fee08999e90fe703db6
-platform/external/okhttp b7ce3525d0d941e3b2320d6f76411136da6f51a2
-platform/external/one-true-awk b1745dabd2086476fe90576f41f6d48c972b5e68
-platform/external/opencensus-java e075b4bb70200e65e047a9289a4f41ee1bad9f7b
-platform/external/oss-fuzz bd5820920bb75aa5f717064ac066165204c34b8f
-platform/external/owasp/sanitizer 7c25fb2a0c62e8c416aaeb880ec08cdfd8ce4744
-platform/external/parameter-framework 6eb8b2f9587d43742d090f61a5bd63f73e0dda71
-platform/external/pcre 745e64426a857b608ddcb9486f1f8af693e8f741
-platform/external/pdfium 48613c55220c23bfe398e4ba20f1b9c8f939a7f3
-platform/external/perfetto 503fd10b50a4f2fbe0ef4910df36eb6829be05aa
-platform/external/piex 4305fc6e427d1e827d2044d8bbff568ff426cb4b
-platform/external/ply 604b50d5b73e4377f7e9bcc75e95478c6b69fe4f
-platform/external/ppp 75db258c3db8724c3ae502dfff36898062e19182
-platform/external/proguard a99468bf7f66ea600351fa6876a681cf18af9d55
-platform/external/protobuf a3439f275b4ac9ab0f45bc4a04e18c1b1acd8faf
-platform/external/psimd 8e3e037c9fc6b7acec9235629db5b2a5b7ddf407
-platform/external/pthreadpool a3fedfeb54c306a71f022c554908e642bdbae206
-platform/external/puffin b5ecf4996ea877e2b77a55dc63c77dd1f7340207
-platform/external/python/apitools 754382e4f27c45ab0d19974cdfca451ca961df92
-platform/external/python/asn1crypto 2aa13518b47adf7b9f1eb2ec202bcaa5a1305f65
-platform/external/python/cffi be85081a88fc8c3cf2cc47d97e0ff8ac0c312174
-platform/external/python/cpython2 7e769cc3b859d072a97fbecbeac8a5c6ad6c61a4
-platform/external/python/cpython3 ae5192ac2f275826e483eb70ea6e7ffa43c2cc83
-platform/external/python/cryptography 810942aa02648a1291ba53c7d4d31344c28410d8
-platform/external/python/dateutil 2d1a91744dbf4da43e550dc023b88b95bf82acd8
-platform/external/python/enum34 02a95d180bb954158c81ec9a07baa13a2bdaf8ed
-platform/external/python/funcsigs aacec91577c70613f4bc089f5e4b6b2d89f85f60
-platform/external/python/futures 668e5ed540dcf7d445aef051d88a12d9a8099b9f
-platform/external/python/google-api-python-client c5b51b6c8042b9549a5efd56fbf206a7ba630c8f
-platform/external/python/httplib2 dc3a74effdca3790e5e52894e95207e54521b002
-platform/external/python/ipaddress 1f619a0b9640e4440e9f779981ce593376d41ee2
-platform/external/python/mock a4f3a317a307956775e7080b5508c5aca1962d0a
-platform/external/python/oauth2client 08cf668fbdfb2dfc3c3c8fd0a71f27e721feeec5
-platform/external/python/parse_type 3b83d2bbf7d5c035fae60ad20bcf85fbaf55b824
-platform/external/python/pyasn1 9b658af67564970ba2a2fd8b490550ae8248536c
-platform/external/python/pyasn1-modules 3ed6b678b682bf31ae65c3be98c25907ce4a43b2
-platform/external/python/pybind11 7adb098c13fb567e03419a6d5c06e903ad52b028
-platform/external/python/pycparser 24f97641b85cdee79fc6217d112cfac7f64c8510
-platform/external/python/pyfakefs 4d82b120f7d97f551b7bab514c8c240db5ed2377
-platform/external/python/pyopenssl ed6e6b7d320a19465905b53001767f5e9ac79c64
-platform/external/python/rsa 523d5d75971f96449868fde8f8a383ccea94ae19
-platform/external/python/setuptools c6ad92a80240d747bd9b9fbc040cb804a6f9830c
-platform/external/python/six 4b5a0a67045c9fa82829f72e3ca1bf8985953b49
-platform/external/python/uritemplates e0846d0ce11b1b36564b9e3d7f68739df100af90
-platform/external/rappor e1648dcdf79db957cca7ba5c655ee1caf3d873aa
-platform/external/replicaisland ccf68f3047de43dcff5fadcbcefe96b68d08c1a6
-platform/external/rmi4utils ac0d9c15d6bdda31fac8598f21548c1c183ef36e
-platform/external/robolectric-shadows 734a2902d159089d3c256858db9f14dd2a0c2d89
-platform/external/roboto-fonts d0d8a114a4fc760f668f19c531246acadd8b4596
-platform/external/rootdev 65bd03da4ba69faa0da318f957a083f6f9b971cd
-platform/external/rust/crates/aho-corasick cb9f5a249ca5811bb4df53e351e0a70842f94fa6
-platform/external/rust/crates/anyhow aa253f5bf34920b8c0fbbe04bfa45b59da6d4863
-platform/external/rust/crates/bindgen 13ac27fde01dfa77491d90751dd35710fda93485
-platform/external/rust/crates/bitflags c51d54629b2b09d6dde3c53d3da2f9e344c86a7e
-platform/external/rust/crates/bytes 7457df12a2eb70afcfa283968f7d1fadf123b0a1
-platform/external/rust/crates/cexpr 573e67cbde517c8c67ab6fe71fe81fc35b67cc43
-platform/external/rust/crates/cfg-if 5d73ec2453d18ea185ea21ee5c1da60537255775
-platform/external/rust/crates/clang-sys 1f45ac1e33c82eb2ab634520804ebf1ebd5936e0
-platform/external/rust/crates/clap a5d0c0d86295e356fde9dec84426b381c3aed6f8
-platform/external/rust/crates/codespan-reporting e439fdf4c61214c024b36a5ec956ba42e9cc7ee7
-platform/external/rust/crates/futures f0f940d386fa27d5cc6903480213779f3dc945ce
-platform/external/rust/crates/futures-channel b125a764ede842c14c009193f56eab6ddde762c4
-platform/external/rust/crates/futures-core 21901c55983e5d9556c379bcf2cf62cdbe1e0faa
-platform/external/rust/crates/futures-executor 27d506a60f55f468b6ca625f2b0db27df368db3d
-platform/external/rust/crates/futures-io 0d383fd068366584653b5fc77b9b32fd28a3f96e
-platform/external/rust/crates/futures-macro 7039f04f200f366eab2c882a7b1fc2928b718295
-platform/external/rust/crates/futures-sink b86131de62493cd3c2325a71d2c5eff240e6588d
-platform/external/rust/crates/futures-task 7af3721446c4376121c4a8fbc20b296aa976fd33
-platform/external/rust/crates/futures-util 69cebde9139a699f48b49de394afbbc051205e25
-platform/external/rust/crates/glob 36463de9e289d089fa31feebe9f3ef2a0d67dffd
-platform/external/rust/crates/heck b9c6c14cca18afa346c1fc036b90c626979a8803
-platform/external/rust/crates/lazy_static fba523263aa50b7807dbdc0322c4ba5da24a2ac0
-platform/external/rust/crates/lazycell 7272f68ca01edfafbcbb2c70e096b1ffdc12e153
-platform/external/rust/crates/libc e3e43bed01c3be2d72ec3236b09773b7c755a620
-platform/external/rust/crates/libloading 1c1d4f9ece9a2d22318259671a99ba3a16f3f7e3
-platform/external/rust/crates/log d148f11990aff74eb158bd3b69161751633a6d85
-platform/external/rust/crates/memchr ed312eba49a4a3db90274ae2115ed6608c2d3ce0
-platform/external/rust/crates/nom 39694bcc4c78bd88f2ed5415d05899a6c1a530f3
-platform/external/rust/crates/once_cell 6926929084fe2dad2c12885471b457ccc1e31b7c
-platform/external/rust/crates/paste a6267e4e8c9892bca5714b1668aa13b7459d8b3a
-platform/external/rust/crates/paste-impl 510d16f372b64884c3a413eaac2b6b75c26ef995
-platform/external/rust/crates/peeking_take_while 126426f20678c481c33ef765c7824b7811d9a362
-platform/external/rust/crates/pin-project 21d3fa795c67fc76aeda5775dbef7961618259f8
-platform/external/rust/crates/pin-project-internal 3df16d58227b7b77c136c32329fa17844f907f10
-platform/external/rust/crates/pin-utils ee26d07c4583b951af13a3d16db1e84dc24dac4e
-platform/external/rust/crates/proc-macro-error 93b1f0ef9a6eed60af45b4fbc4886b718a24f2d4
-platform/external/rust/crates/proc-macro-error-attr 9d3a11dc81c824ce9bbd3bba0dd5bdc8d6e9c0b6
-platform/external/rust/crates/proc-macro-hack 342e77b70b136fab56aa7c1e65c394c05bafc9cf
-platform/external/rust/crates/proc-macro-nested 98f7238b32baae3d866670b8cffb0411e91bd219
-platform/external/rust/crates/proc-macro2 6b381c3fced9c4523702580cb8c74083254f6428
-platform/external/rust/crates/protobuf e97eb59d5ef6d56df05edde7356c6310d9a2cbe3
-platform/external/rust/crates/protobuf-codegen 576a7f7dce357413fefb159b8fcb1540c1462162
-platform/external/rust/crates/quote 6ec26e635fca2aab681930dbac9a947e0088f6f8
-platform/external/rust/crates/regex caad50e8481d946e3eae0f12f9c7a025b65781b9
-platform/external/rust/crates/regex-syntax 7095120865d17d196f4906fb468aecd0e6d28a47
-platform/external/rust/crates/remain 1712c05a246371508bcadb49704d59724978ae8e
-platform/external/rust/crates/rustc-hash a0d91f2e836ba9c3aaf1e6064b2678b9fef12d05
-platform/external/rust/crates/shlex 4a1df538283b69c03c95626e27ba7c260120a074
-platform/external/rust/crates/slab 144cbed169d4f3902578ce9b769778c932bf7552
-platform/external/rust/crates/structopt cb442cb649ae8436bc80bc1955c2ba83d960d0a0
-platform/external/rust/crates/structopt-derive 71df68510feded6e618655da3fc45a120ed3a96f
-platform/external/rust/crates/syn 23d3c7dc6315e24fedb4a98ccabf31aa82c4ce19
-platform/external/rust/crates/syn-mid cbffc4ca6ed29ab02e9507c891c17dfb6b23a0bf
-platform/external/rust/crates/termcolor 36010963066b77297312dd9739d5b49dbbfcb3be
-platform/external/rust/crates/textwrap 63306dba15332334b755f8e22882c8188f96cf23
-platform/external/rust/crates/thiserror deee91e403b751dc683add63c3e6ae75de3c8ca8
-platform/external/rust/crates/thiserror-impl 9d1e484920fd82effd3f4cf4438b1e73edeb1e0c
-platform/external/rust/crates/thread_local c5c8a04104544a2aa9b827780f7fa213f810ae2e
-platform/external/rust/crates/unicode-segmentation ed985d4a5a866c02a41fc9a7585bd8ebee30ed2a
-platform/external/rust/crates/unicode-width 75ec7601c79e594edd0a4ccc03bf95bff579df4b
-platform/external/rust/crates/unicode-xid c7bba80d79db65eaecc98b6147ec2eceb4e77570
-platform/external/rust/crates/which f2f95748422b349a3f3ef4ea3b0b55faa4d4ea44
-platform/external/rust/cxx c46c875e902c1216836408be7e4abad616f886ca
-platform/external/scapy ca21c951f437a8e73f0114baa3c713831f4a4257
-platform/external/scrypt fb6181488401230abec3f013e5ac4241c9ea425b
-platform/external/scudo 5aec70e6f256626a56b1c43cb1df775218217f11
-platform/external/seccomp-tests 85ebbc21e98bfecdb55cc528b8c1314cbd9be42b
-platform/external/selinux 207f7c26eb139ffb8a71b32f6df4cd6f444d413f
-platform/external/setupcompat 1bd54b704162edde9b30ab5dae05215efb01b833
-platform/external/setupdesign 6aeaeae700b58f926ad02016b6e203eb7379eb50
-platform/external/sfntly 79a2c7b9b8ba795f2f99a7d6d3ab15ae23f38ea2
-platform/external/shaderc/spirv-headers cc38a6b19fb84957f68d83d9e499a421dc064058
-platform/external/shflags 897b80f3e0ad56bd6b23b4343af81115c6063492
-platform/external/skia 67ffe43bb92f53872c5bf3e3f0dabd60436ffe1d
-platform/external/skqp f79f518338cab87a278dddfb629ccf2f61ed58bb
-platform/external/sl4a 3209cdbce1de81a5bf006ee56c7353607e8bf2ba
-platform/external/slf4j 1f2700f85f1f1279eef4fdfacc62289dd5f1cf1a
-platform/external/smali cb8ec9b63e1862fae9f8bac08c09b93370279b93
-platform/external/snakeyaml 8bf1e6eb03904cbb53e25ec818c8eb901add174d
-platform/external/sonic 92eaca80bd223815ed92d805f2f79ee38eefa1ff
-platform/external/sonivox 2d09808cb464b1c1cee33345b11c7050f04d4e4f
-platform/external/speex 264bb1b93f3d337fc03a2a3344dbe96f5e2049dd
-platform/external/sqlite 2db0c8b6b1be9bc1fb04fab51987ff5027c8ee87
-platform/external/squashfs-tools 92bbc995ae45063f667806ca40bb7ecc7e36af42
-platform/external/strace 3cc9c55fd0da173bbd3858d799847b9363e5be30
-platform/external/stressapptest 6ecacc1a4c7d6a5a83702397e40db05886d367a6
-platform/external/subsampling-scale-image-view 1178bc880781c1dfeae1fcde254302326751c3a7
-platform/external/swiftshader 16f22a44f14791d48fbd76aa7cc5f20187597935
-platform/external/tagsoup 2f0e1370aa1649c21122f4110aac5662c7b5154b
-platform/external/tcpdump 7d9b6cbdb0a84e29c36fc00d421afdd87f01814b
-platform/external/tensorflow 010cdd7234b8610cd53898bcca49e55db670013a
-platform/external/testng eb6301c8f252ea70f5cb3bb7a6bf2e5284e5ef02
-platform/external/tinyalsa 82ad0d5bc8bdcac8882208168e069058b57322ba
-platform/external/tinycompress f3e99bf0492cb26164ac84b7209ec6a69d442576
-platform/external/tinyxml 4763d31b4562814052cc6f204e5882db71d0e004
-platform/external/tinyxml2 687e97da2add1756aa7900c4511979250a81b322
-platform/external/toolchain-utils c334c17ab036dabc26f6ecd7f94911cdc177f5a2
-platform/external/toybox fdec73bc8be78496487ac910889cfad27e356acf
-platform/external/tpm2-tss 25a4dda833eef979e21a8a0a106d0338e8f40682
-platform/external/tremolo dc5498dc4dd7ca4f061489a4b6680a85c9a0e04f
-platform/external/turbine 01daa5e13894ca44f3f7a1a382cc23fdfb69b7cb
-platform/external/u-boot 7bad0fc8795901dbc85c5a09d623d5be827158eb
-platform/external/ukey2 0662ef3ba28a27fba39a197765f2b06b4330676e
-platform/external/unicode bf4c25b32dc63f8c1c0e38168731451de25801d3
-platform/external/universal-tween-engine 03ff9c10524a2f85a88a76b7beb6d1ed8a3797c3
-platform/external/v4l2_codec2 00b6e0dc0831a53c9786a2ef881779f783e5e0d5
-platform/external/v8 023e4f7bdd3315ff9aec8c1a224f3fed0e2fab83
-platform/external/vboot_reference e91d7dc37a52dd48baca23643f63a14f0ff9b0b7
-platform/external/virglrenderer c56892b49a8da5fd0018d72faa80f08b43511179
-platform/external/vixl ebab9c170186596591a979662777755d6d33f79b
-platform/external/vogar 0ef9e68c51f5a8bb03c82fe77809b63f8fa5a6a3
-platform/external/volley 75ee2bce2da356284b9ca4517d7943d99fe88186
-platform/external/vulkan-headers 2a6c620ac60146609e6bc275d6dfb8a0c117b982
-platform/external/vulkan-validation-layers cdcd7416b3fb7a3cd462a54a648fe3f9c45f6a36
-platform/external/walt ce689cfaf1aa663e20d7014581dc9839a0b59daf
-platform/external/wayland d5ddd47e5847aac6e30bddcee382939a5cd3c326
-platform/external/wayland-protocols af1e20758aaf5f3d2e1be64ea987197d5e97a1b5
-platform/external/webp 83a53600fe7dfb003f23ce6a2ec4ed739de0c166
-platform/external/webrtc d073eac205f5b5784a7b243c827a66c1869dc522
-platform/external/wpa_supplicant_8 bce45452a60f914bbb780a0e5a95b80fb23b389b
-platform/external/wycheproof 4582cc36f0a8c8988d11303154002a4dc5db7b9b
-platform/external/xmp_toolkit db15d623ac15b077818bb16006d6d12ec72e131b
-platform/external/xz-embedded 05ae78a111282cc7f223a8af64c1b4e96b027226
+platform/external/catch2 3b0dcf5f26eb42163c764cc5051b24b88dd14fc1
+platform/external/cblas 55747d9c66c14d8161e55f13f4c1d7ceb12ae8c0
+platform/external/cbor-java 0fc2912115c5842c2333c984120788897fd66139
+platform/external/chromium-libpac 53553c76ab38e0dcec1961dbb8574b179d688027
+platform/external/chromium-trace 66fc8c57b5f6ebcf28e29c9ac923a5026f624a8a
+platform/external/chromium-webview 955e110fb5bbc3013d1ec2bb9e345c30315525fc
+platform/external/clang 327cdb28dc607a4d793dcb0ba1b1be8074f5dadd
+platform/external/cldr 271d56f7c922e8d2a3e59d37db9f3ad8eba80f88
+platform/external/cn-cbor 9bb97b5e6e4df26426c133bb64c82d835d462cdb
+platform/external/compiler-rt 323e9ec72cb2ae1dd7e3b5c16f418a12efd7e89f
+platform/external/conscrypt 015a69dac4e225ed0e896983ac4551ff2a98e1a9
+platform/external/cpu_features 143ecaa10050350f202927fee6cc9a9f4b7fcb76
+platform/external/cpuinfo 719cd585b3048c448e67149981afaca58eb54861
+platform/external/crcalc df9173308a90db6dedf13c683c74841ff94205fa
+platform/external/cros/system_api f3c2da293a82314b3c3e589c938fc78427b9f48a
+platform/external/crosvm abfa732e99bcde17c4ed47db1995ed7212bf39f8
+platform/external/curl cea809fa0d1deaf2081925a3eecd64841983025e
+platform/external/dagger2 51c0b36a4708fc9a8facf43305a4234b7fd8c6e4
+platform/external/deqp 9bfba2e3a296be5e29d0811d81b7fd6148dc54db
+platform/external/deqp-deps/SPIRV-Headers a9be9da651c68c65bb4412f3f65eba141fa3dfb2
+platform/external/deqp-deps/SPIRV-Tools 6130ef76154b58593651d4c94596cdabd09214b0
+platform/external/deqp-deps/amber 5f595ab800cd99bc8285c8f18589de2774807dfe
+platform/external/deqp-deps/glslang 90b6ad27b8743582eea6b57fcddcda49b24707e2
+platform/external/desugar eb7f1fd13bb2e0e3401653979b44b2b56aeb4f63
+platform/external/dexmaker 05962d6cf307cdf6ff9af2f6b11ce0181290789f
+platform/external/dlmalloc 7d906e13def8005c908a64910ffec4bca69a560c
+platform/external/dng_sdk 203a9f1733cf76dd8650c96ba9e6e95119781348
+platform/external/dnsmasq 66fae634634b8ad4a4c741022b3ce549fe3d20bb
+platform/external/doclava a6a5fa1cbc815070d02d71e4756e040b909fbe17
+platform/external/dokka 9e6aa109266e6eeda29ceba6736a3434df36c874
+platform/external/drm_hwcomposer 65c5b2d8ac0374a2258e623b72beaa685420ad15
+platform/external/drrickorang 89eb480072264b6c964aa4b22d5ac34158f537c3
+platform/external/dtc 4133bc611dccdc30f74831444d929e8eabf42961
+platform/external/dynamic_depth 80aa0472d39c38870492130b760debe0738f0d51
+platform/external/e2fsprogs 42a0d89fb1a37d6521c99e421db699bee68eac25
+platform/external/easymock e7a581f1d8031b240af901e05fd42f557ef60e35
+platform/external/eigen 80c3e13f6f5edd6df34348123b5ec9643d5a5205
+platform/external/elfutils 6def07f8482527a82e7294144eedcdede15a063d
+platform/external/emma f5e13d2068239d3b960250316cfc8a131827aaeb
+platform/external/error_prone 10e53766be56e41cc089d85b91d7e38698446a5a
+platform/external/escapevelocity 96f3f2506096bbd22a6d6269b4a1cdbb2bbc64a4
+platform/external/ethtool 1e1f47dc4c5cd79f9fc418dabe1189e4927706ac
+platform/external/exoplayer 2072b8f4b6e426a55b0d2d17cdb30b9f3b0414fd
+platform/external/expat 75c355d86c7cde336253ac1eef7aa523f0607e50
+platform/external/f2fs-tools 1d632db0d436234b52ce47d465c5b132bfeab364
+platform/external/fastrpc c0dd55c35d6c9bd6b8429f818995c023df77b5a1
+platform/external/fdlibm 5cdbb55d6233cba9fd6db4d07f3b7937f53b7bea
+platform/external/fec 5bd7ad0799528f7f559888b764bd3976651f9cbb
+platform/external/flac 676dd051d11aac005f16bc06e62d8492a9b9d110
+platform/external/flatbuffers e4569da7a350ce94334cce97fd8a38f0f22a3288
+platform/external/fmtlib eed331d76d699668f758d0885277be4fb0ec29e0
+platform/external/fonttools fbb58040e09be6c20f5bc088596614e4851c7e45
+platform/external/freetype b1d11ed7edfb76793b9315e790069124307302f5
+platform/external/fsck_msdos 309e95e5370ee5fbd630bdb2cb05b6e82af25cbe
+platform/external/fsverity-utils 00d17ba98d8a6b58d79ee387c9e12eeb70468cbb
+platform/external/gemmlowp e858aaa0da8e779204dfd707d2a4cabc5bb40309
+platform/external/gflags 0bdafeab6087b4f4ebdedc5594a50bd58bce24f9
+platform/external/giflib a0432a20ca899aee733632a4aaba83c1bbeddd4a
+platform/external/glide 5788ab36dace0abb49734fd9f1e734f89165b72c
+platform/external/golang-protobuf cb6c30579500e785dd6750aee595bafdebdeae3d
+platform/external/google-benchmark 7736ad9b03bac04f2ecb438398e5060707290416
+platform/external/google-breakpad cf2654be4b64f6f067dad65cb16d5991dd697fb3
+platform/external/google-fonts/arbutus-slab e636e80907da35e20ac2331667582c39b457bf43
+platform/external/google-fonts/arvo fe6c883e08c3c82110b989edb5ab93018539817b
+platform/external/google-fonts/barlow 84ff062f40d253f14d5cf1ae5c10ba491c0adaef
+platform/external/google-fonts/big-shoulders-text 5465480bb897d316cc19284fa26786fb4fe6cc01
+platform/external/google-fonts/carrois-gothic-sc 92c1c737f4a2b2dffe01549b57fa28f8d941f548
+platform/external/google-fonts/coming-soon 0d949bd1586bc6902c21925a2f6ffbaa3041c3ba
+platform/external/google-fonts/cutive-mono e12b866fc23fbed5c3e05aefb51c67993233e905
+platform/external/google-fonts/dancing-script 32d1ff325a49eae54275ae19fa6b73d4af54d130
+platform/external/google-fonts/fraunces 5049614ff37a7804b55d5df21846111bc5bb883c
+platform/external/google-fonts/karla a337a3f60621d6260717bd5ffc66fabb3dc33811
+platform/external/google-fonts/lato 84ba2422f3e9bc7c3c260d317456f4ac3ba43ecb
+platform/external/google-fonts/lustria 334801e9f9268b10feace8ac924bdf5ef191062e
+platform/external/google-fonts/rubik 2171a48e9bc467ca2de7ea15943f6b3a8381ff51
+platform/external/google-fonts/source-sans-pro e0bb86a580a92bce21ecee6508c8e0b01f8416eb
+platform/external/google-fonts/zilla-slab 18fc6935b26fa2f00f3dd92a8e8798620a908768
+platform/external/google-fruit f70e2d72b2a69f7014b783c00dffaf366a2bd98f
+platform/external/google-java-format 2eaf4fe87a22d885af9443f2c5cfadded90c0694
+platform/external/google-styleguide 19761eaac053d1fd4c13ea16b1e622748474162b
+platform/external/googletest d7d86a78d2422756159d9a59f9cd0adf6af0205a
+platform/external/gptfdisk 2c57569cd759c7e2c07ceb3b017906cfdc798216
+platform/external/grpc-grpc f1463cc60eb745bb92c34a4686b7507cf4af42fa
+platform/external/grpc-grpc-java 1dc2718bb0e943ff109e00b80fec51288caeeb49
+platform/external/guava 7556395ed45ef7b32209303ed02bb33b9891a69d
+platform/external/guice 70031f702d91a92717c42432a77393a905e5c7ec
+platform/external/gwp_asan b9b8f005e9e72f243d4501e522ef1c12fe956e6f
+platform/external/hamcrest 731a53476d33829e83617830406069246e5c2a84
+platform/external/harfbuzz_ng a43f11655814dfa05865790c60880984fa813c87
+platform/external/honggfuzz ab79b6f0c3690ae4f5f8e39545c9a344551dbe1e
+platform/external/hyphenation-patterns 71bf81f7c2b0ac22d754db1403ce65cb3b478ae4
+platform/external/icu 3dabe509f9c9fe369414d0993ead5017507659a3
+platform/external/igt-gpu-tools 7ec61375ea55892e96de0958613435fe01eaefea
+platform/external/image_io 6b04996e09f961f9b6a950a6f64f461b8376b3f6
+platform/external/ims 53d689f5ee417e9b38f20abfdce62eafb2b780cc
+platform/external/iperf3 aeae13d3a2386bded4e4db886681d28e71c5d118
+platform/external/iproute2 2d9ee34f0111057ee87933f0da23828d3d60c004
+platform/external/ipsec-tools 8a572147f2c44ec21700af0a3a951965ca65a8a4
+platform/external/iptables 6ad6b905ee4ebd14d9c7cc8340d163ba03d06505
+platform/external/iputils c8f87342a4ddda3e63f5e2e65a46566e317b79bf
+platform/external/iw 4bb411d8d4d9d56ee8ff2b7a5207e75217d2ce00
+platform/external/jacoco 6bea6fd2f08337b23700bd469830b2c110c30f47
+platform/external/jarjar 10a01483dd366b7af1ff2f368dfd9cb42d15d95e
+platform/external/javaparser eff75e1ee0c1262e630ab242dd78f1a384aebd15
+platform/external/javapoet 9cd8c3f8b611c91fec4ab39f2ac77c67a7b69752
+platform/external/javasqlite 47d45647568978afb9b44fea5abbdd0148dcb21d
+platform/external/jcommander da076aff2b2d18844c1c5e9faf0001d1071f077e
+platform/external/jdiff ad5755eb114e6635468d8d8b795f649f7ff09a14
+platform/external/jemalloc e5f91906e5250a4be00f4b441b792ef116ef55d8
+platform/external/jemalloc_new 80c721f8f91eb8070b5c5faa746152361074c2a4
+platform/external/jimfs a1a30a4894edae85d96d99208d1ce17387f65b89
+platform/external/jline 58d8268c084760be3e57b4dcb64abe27c87e599f
+platform/external/jsilver 763bfe459649bbdd64e0e6c5658d5e9925fa1484
+platform/external/jsmn 354fc7d3cb2396223c042639d084d982c08cf9d4
+platform/external/jsoncpp 0d0f93ea56eb7d0bb018f6b848de6c21283633a4
+platform/external/jsr305 8b95fe0bb851b6e6cd8fc138d89b6466b5116480
+platform/external/jsr330 4d92139b91558b13679d50333553eb82bad6f21e
+platform/external/junit a7a1babbf019b2e0354ed95467b9fc61fbca1857
+platform/external/junit-params 25dc469ee8c140bcfebed05621a1b39686dd3080
+platform/external/kernel-headers 6f365ec3f13d3dfde3d99181920148d14da803ce
+platform/external/kmod ba992bc2608ec3d2f72f5bcd4e3913c9fefe6e4e
+platform/external/kotlinc 11c325a6f968ed6fc44d77aed2b89886f9741a36
+platform/external/kotlinx.atomicfu 785fde14d41d70f9dd1838e1c938be4e5d3f1a72
+platform/external/kotlinx.coroutines cd098d9809af744f17c0c9a2f2c1517d5e1db2eb
+platform/external/kotlinx.metadata 1968473bdf95bbf5c32e248f29584a26c34122ce
+platform/external/ksoap2 14000c844a5a4d6bdae94ebcdfa35bcbc2e85190
+platform/external/libaom 864b83d3d636c7599abbca4fedb522061135018b
+platform/external/libavc e7444ec9f97b3df43ac6707a2ffc2887078bab70
+platform/external/libbackup 0a8a34ded9b44e37be4c7f1b46952e2a715555d6
+platform/external/libbrillo 69b3cf519a0b80285466da877c58ac743cc164e7
+platform/external/libcap 7d7c2e01027489b157f2d60e2f400b47f227e70c
+platform/external/libcap-ng bfaca4b37757861b398fe77d113263f028a68347
+platform/external/libchrome fd76edbd793bf29d8c521e2676fdfd7dd4a61686
+platform/external/libcppbor 3d9e61e31aa2d6ee02ed7e25cd4ef5f0110f521d
+platform/external/libcups 560e69cc72f281686dddc406ccd8ffc3788e4f43
+platform/external/libcxx 51384326d0e202c5247d9aa2338f93566ec41845
+platform/external/libcxxabi 602541c92788660dfd3289e1c277ba1e4802dc89
+platform/external/libdivsufsort ee6ea86d49da18379fa1495f3abf09ed947cb47b
+platform/external/libdrm 430ab03e0eb3336cfb3c7b27f6aab314bc536d20
+platform/external/libepoxy 6da9697aeb615f3880e60bd3aed84409f3b32f4a
+platform/external/libese 8c175aa3ac0d37b2b071bb75878772a6bb46b2f7
+platform/external/libevent 8ae87648e8d4694b52477fd9979624b91e88d6fd
+platform/external/libexif 6b851dd965733ef47e65f852d712fa339a4046b4
+platform/external/libffi 21ab66c6c9f617328d909e55935c22c1bc26e149
+platform/external/libfuse 6f85a1880a36e82bfb2bbd44d7a8b83f435a6af6
+platform/external/libgav1 8db54cecb410619a9ee55012a2f61633f5b9d0f2
+platform/external/libgsm c08c3a484bd7fc1b1e50814c4dd4fdccfb707ea3
+platform/external/libhevc 0c44b09a0e93a5120d4142d7fcfeccfb6a072123
+platform/external/libiio 8fcb4fb5c580bfd9121dd8ddb93d4eb907d23f9e
+platform/external/libjpeg-turbo 648da2670ec7fe7cb922b6b47a1b60d89168ca6f
+platform/external/libkmsxx f9d397407e23af97e6e45fb932f4767b904753b4
+platform/external/libldac bd78dc0edd81ef4a49a88ce135c6550ab8ac6973
+platform/external/libmpeg2 db6a1b563f4fba4764a04fe3dbe321d0e8b957d9
+platform/external/libnetfilter_conntrack d6b2c4b0a017ca5d5998ce9317b5d7bec31fbaac
+platform/external/libnfnetlink 682810cffc58fcd35d8dc9ada2ea6362a3c4c9ce
+platform/external/libnl d4f4137290d13c39b7ac8a73b14e0085a9580862
+platform/external/libogg 8a5af6303513234fcd9878a1b53e7ca600dc6505
+platform/external/libopus e74de73faeea235ab5059a2428f6650b8445b375
+platform/external/libpcap 3b830c19bcef4e8781982f8ce8af407ff3f71ec6
+platform/external/libphonenumber ee1e2947a32a3ac63af84df1e615eca4eddd4a57
+platform/external/libpng 38b4167c02d7d209863dd51ad6808613144175c7
+platform/external/libprotobuf-mutator 24ac0e01d243bbc66d6f9b05dda7c88c85af5f85
+platform/external/libsrtp2 e2814ebc00b6eb17a444e2d73c7bdd6f0e3187a2
+platform/external/libtextclassifier 675280c27dd9c5e1c51995b2bf79765f942b5419
+platform/external/libunwind 542237062e217a681bdf745618e8ca3e40a7b62e
+platform/external/libunwind_llvm cc82f5cc3eeded37bd4d6a0299b278fecb6e322f
+platform/external/libusb bb42b6df51423d6204705e3b9bde2ee8f3fcee47
+platform/external/libutf 23245fead741576dd1f4ba9c2919070c2cb08c7b
+platform/external/libvpx 649b6237186d0be68ebcefb7c8cc1cbc9750d4b0
+platform/external/libvterm b6b1410a7721e8abf4c5a441eb6b54bda3227d12
+platform/external/libwebsockets aeeef00842d122c73c73910e20646716eecbe3d6
+platform/external/libxaac e96b3b6bf3244f06ada1ea3641c2d1bbf388e810
+platform/external/libxkbcommon be591a3089f6d6696372a4507f7b83281750c306
+platform/external/libxml2 66b805c51a45e8edf056eacc1045f7f783f11cfe
+platform/external/libyuv e1b972086413e17b3cbb9efd37044390473017ed
+platform/external/linux-kselftest 1d4837b204da3b1c93dd8f905d04aa48274a4fed
+platform/external/llvm 157aa43fac25bd28b554609a88980263cd224184
+platform/external/lmfit edc92525fbeaa6063355690c9a5ca4d2dce9b536
+platform/external/ltp 67c31e735880e102c50c74b4c89e723e32fb73a9
+platform/external/lua e4896fc08188b8aa7c8d5f866eb819f3064e9ee5
+platform/external/lz4 c6041cd418e6ea6cc8d0292f57d93e1a56893a56
+platform/external/lzma c19a44dcc48d14f7ca951f03879e6f564567ca11
+platform/external/marisa-trie de0059f8ec0e4c74c1c40ff46749006a53a17bc4
+platform/external/markdown d77432fcc01e8fe485818d830f4a03b1d28fb28c
+platform/external/mdnsresponder 296bd9dc65a49e62589500ab4f5ef9fa82be141a
+platform/external/mesa3d 61aa899307818a5e40f5889b2731de0296a81999
+platform/external/mime-support 98fcce8f64809fdd532c23e35de5b02d415efea0
+platform/external/minigbm 025f392eea3adfb1da038f027ea15ddafb48bfc2
+platform/external/minijail 51e11bc7d6e0963cc9eed94b3c3aead503d082a2
+platform/external/mksh b712069e9b964a6c5b011597d54b8384e187123d
+platform/external/mockftpserver af0f9a14d73913c39b7721e47fc6f7310495736c
+platform/external/mockito d91e94797ad492d9ff311fc6e49d5c0721d5dd84
+platform/external/mockwebserver e5e34e4baf4e971d5e0cb6aff500d2b4a34b28da
+platform/external/modp_b64 925848fb6d97ab68ce93e803ec27658f2e336bb2
+platform/external/mp4parser 81f177bf829b78636762206c274361d61a8a37b1
+platform/external/ms-tpm-20-ref 387eaf967094406e04a0a520b3e2825ca32d5811
+platform/external/mtpd 42df221abefc676a8ff87756f054bd16b5d7308e
+platform/external/nanohttpd 89d03fbc3a03e216f936c40403dec7928a7bc94c
+platform/external/nanopb-c f51a04eab34b52aae64e53274ddd4b38b9b08b34
+platform/external/naver-fonts 2333ea92ea2543a206e527090cbcdfffc1e4690e
+platform/external/neon_2_sse e706794880b9df3568d261496999c409d7605296
+platform/external/neven 8d186172264620fae7ae0b04c43bf1186b34d709
+platform/external/newfs_msdos 16197f35852b9431ed7d1f0e48583d877557aa2b
+platform/external/nist-pkits 047e6846d9572355f4a6979a8b7b1f571af6ccaa
+platform/external/nist-sip 8408e969ff5317ac3b11863a7c1b6f2dd91e1045
+platform/external/nos/host/generic 98c72e8b738756f56c6cb56dcccab42963d6d1c0
+platform/external/noto-fonts 334a6f908838584f0b2a87f8def6f8603d7ded42
+platform/external/oauth 0c13606fabcc14a21ce3afe71d27aa2a9586ae3c
+platform/external/objenesis 7e747dc495fb76917cdd0306e5c2ab4065d17e6b
+platform/external/oboe 576ad20c53d35a17c0a96b05dda6b61d77783ff3
+platform/external/oj-libjdwp 2f6d72270ea492537426570be910cf67e6edae8f
+platform/external/okhttp 845a8a412d1b27edf85bfbd48526336e7670aacd
+platform/external/one-true-awk a1d4a19f646a23e50dcb87a276f04ab3831800d2
+platform/external/opencensus-java 03f3dcf41573b1c33e5fed3eaf2647ba5745d2a3
+platform/external/oss-fuzz a96023505d031c183deeae32b5621a13fe607e3f
+platform/external/owasp/sanitizer c80c94c41d135437ea6fb136cb8c2c70cc0ca419
+platform/external/parameter-framework 1a16a3bfb3f15566cc75edf0814984b15445b486
+platform/external/pcre 586f7c64fb406f7d2ec57ccee2912742781058c3
+platform/external/pdfium 984f1e3fc63de874ffb430f11bc2b2d0cc9529b5
+platform/external/perfetto fd36d8253148bdb90bf51eec86633c37df741029
+platform/external/pffft c4c822919db68fbe747baa085edcc8f921da6c07
+platform/external/piex ee0d420ea824858ea804a8305f8d0c2db93cfcf7
+platform/external/ply fbb5c30ef950ca8ab09ec812db687365c245f1d5
+platform/external/ppp feb05190781965110738f4d6fce5b7b91aa79ba9
+platform/external/proguard bfd27569ca8423c6021e8f20031d9e207c47fbde
+platform/external/protobuf a23d98844bb11463d45aea11b23558e28122f911
+platform/external/psimd 9c0612722c520045d77a1f1fde4532ac366a32b4
+platform/external/pthreadpool 3962e16f61bcfa18da6f140be3d499a8b4da31cd
+platform/external/puffin 8dc30beaf89ed40393bb70c9ae3042fdb5c5e260
+platform/external/python/apitools b6ebf5703d9390d7b9e0b4ab096ddb98d36776e7
+platform/external/python/asn1crypto ba75bf2183e150d8afa5d96038b305ecc7ef98c9
+platform/external/python/cffi 108f866fcc4acda79e270dce25ed0292e9148312
+platform/external/python/cpython2 bd63c96c6562fa192cac2242cba360fbae9ee77a
+platform/external/python/cpython3 79dbbf79ac3d8e9760c167ca54fb0e8533ecdeeb
+platform/external/python/cryptography 2bf54d3cce3cf4b9fc84b2c18c466e3215dc322b
+platform/external/python/dateutil 02278f99442ed0e5e5ff60fb7bd172f9839543a2
+platform/external/python/enum34 8257e0c1dbece2676f27e643bb31aabd1436d716
+platform/external/python/funcsigs eeb1f753c675b881b5fb9cbce85d490d5b44f206
+platform/external/python/futures 2b3088570e802b72e7a5a3667d63d3f6cd58412b
+platform/external/python/google-api-python-client c1905c5800a8db08cbc1b52e5b87ec5d9d58a041
+platform/external/python/httplib2 e984ccec08a8ec335c399be77e91c2ec75c4f6e9
+platform/external/python/ipaddress d1dce0a770f5af434c09ec5fc6ea6c82726b08b7
+platform/external/python/mock 8bd6ec22beea9d1f10460bb5f63c99b1e2337480
+platform/external/python/oauth2client 874441428f26cbf115abebe466d5bfb34592b06f
+platform/external/python/parse_type baf7fe553fe3526e5c1db840312c43cee28bc59b
+platform/external/python/pyasn1 f61453ec4a0dba4f9d4affdb43384361ee862b6e
+platform/external/python/pyasn1-modules efb14e07aca6b64646035523302f272df91ec48d
+platform/external/python/pybind11 fae8ba0a8a170cacbd1ccdda869a38b62cacbd37
+platform/external/python/pycparser 6611631e3ed755e06c9e9386c576db64e00aadc5
+platform/external/python/pyfakefs d1f84511ed143becb5b64db02ff4580e9a86448f
+platform/external/python/pyopenssl b33139cb5f4848338300784dfd712a7181fb47ea
+platform/external/python/rsa 44427cd8625e2fd3cdbce4cd1a5db899578980ab
+platform/external/python/setuptools 2d846291d5bc6c8ee7e49eb819c38ef9c1768c14
+platform/external/python/six 3ed3140082fac23ba79dd367c274ad9ecd1e95d2
+platform/external/python/uritemplates 2c7f274d2cc3ff58f98b4568428aa194888517c0
+platform/external/rappor 5729b0631d5a84ab5bb45e759c491c9ba7a1517e
+platform/external/replicaisland 13c8b5110f617e86eff8178e1df581e9d3a5b572
+platform/external/rmi4utils 04d398fc0eb89e743d3dc6230578f560f5df0423
+platform/external/rnnoise 55e770b812fd96e0206101cbdef29e79a2201b3b
+platform/external/robolectric-shadows 15fbfb09b48107723939599d1a8d0043d3f1c1cc
+platform/external/roboto-fonts a188c39cc6bd466c9109ae8850bc68dc8cc722ba
+platform/external/rootdev d430a590f4a052dbc8969c6fd8381e9e79799c60
+platform/external/rust/crates/aho-corasick b2eb2c523a08df27e5fbf4a0514e4eb406a2cae7
+platform/external/rust/crates/android_log-sys cd5ce38a36a53e8e10b3a0e1b8e004081d901589
+platform/external/rust/crates/android_logger a97b8ba25b48ed271cf800d61e8071f1cc277c1f
+platform/external/rust/crates/anyhow 8337e6b42ace22c5cdedbe9f21a2c214beb49d25
+platform/external/rust/crates/async-trait 440fbf48bcdb26ce2af6c4b778fe9aef3b9b5982
+platform/external/rust/crates/bindgen d7f2c07620260fda6b7916ef4fc82e81c2a6432c
+platform/external/rust/crates/bitflags 4663c33a495ce114d228fd297ed9d7ac6b495f8d
+platform/external/rust/crates/bytes fdbcdcee92e2bce978c2083c299ea4bed15a2589
+platform/external/rust/crates/cexpr fc818b6bef7688d94f0412c299d55a6e23c82a5d
+platform/external/rust/crates/cfg-if bd60501987ef2067f9f8c977da4937e4774f53e7
+platform/external/rust/crates/clang-sys e609595009e30cb8d26b76f6caf2a56e572b6fc3
+platform/external/rust/crates/clap 26daec721c13cd3cd4bb4eb21975a9d144493716
+platform/external/rust/crates/codespan-reporting 71fed3a7155f8d573836418aa4999c4c6d7ebf78
+platform/external/rust/crates/env_logger a38de48a7c2cccf6990a8d1cf9b41df529930aba
+platform/external/rust/crates/fallible-iterator 4a19a103af41c102de8dcb69e8c17ab9396c601f
+platform/external/rust/crates/fallible-streaming-iterator 66830acc37f7494fe78e4f5898208253b60566cc
+platform/external/rust/crates/futures b2b54bd67fc5953322f13d792c772645ff4a0844
+platform/external/rust/crates/futures-channel aa6af0e8582c3d65ed082b54573f75c85596dd57
+platform/external/rust/crates/futures-core 20d1906e08161d05e2c77922dc286b17721536a2
+platform/external/rust/crates/futures-executor a42fb40c6367adb440433dcc4a20e8c921e3fc6d
+platform/external/rust/crates/futures-io 172f432ec595138a1529a474e267c4d09ee2fa2e
+platform/external/rust/crates/futures-macro 3a0f16bc200bf5f0f36cb299074037938f4eafea
+platform/external/rust/crates/futures-sink cf4287e2875fb97b26da8a056141a0fbc08ab4e1
+platform/external/rust/crates/futures-task f174127c43d55f05a44053b1a2385f1cc80f939c
+platform/external/rust/crates/futures-util f344b17bb93209cb89accac7bc92049889989e70
+platform/external/rust/crates/getrandom edf9cad512520f3952a261667dadd024da96b780
+platform/external/rust/crates/glob 35cd02b0422abe94b7e16000ae6a0848aeb2d911
+platform/external/rust/crates/heck ae87ecbd7df3d6c5cfb1501dc1fabf024facdf7c
+platform/external/rust/crates/itoa 2afc73a9be89b47c2cbd52afa599054a202f4169
+platform/external/rust/crates/lazy_static 3c9ae032ba293a4797ff35ec6044bd3b40b16287
+platform/external/rust/crates/lazycell 7d5f9e0827a306f5d69c3d07e1e77e5f7fc5c83f
+platform/external/rust/crates/libc 4033ce121e6e3d12d79ba5e8ef638a41d63e555f
+platform/external/rust/crates/libloading da0587f5dcbbee974b1e76c4d6456c725368b7c1
+platform/external/rust/crates/libsqlite3-sys 581333aba79f58ecb80c196306f61e0a493e6bbd
+platform/external/rust/crates/linked-hash-map f0697012c76da3cf68ba4aa3d01817b3745baa10
+platform/external/rust/crates/log efccb4e49ab7110bbd83a5656680f05754ac8afd
+platform/external/rust/crates/lru-cache 508004de4c76f4614c394f0bfcd4e1337bae5946
+platform/external/rust/crates/memchr bc302c6dd42dbac7b733cb3709a10005b6cdcff2
+platform/external/rust/crates/nom 2bf794dccaee28d39b6886cc5a91af2ff30baf32
+platform/external/rust/crates/num-derive 09d12ffac45e0763b56db8e7985d57c6fbc97167
+platform/external/rust/crates/num-traits 262e392075c38f562cf75fa900310cb8cccfc569
+platform/external/rust/crates/once_cell 20560038e84f5b3c5709002dff464d309d390695
+platform/external/rust/crates/paste ad83e417868dd09e2f85544ef8ef268e5a8a81fe
+platform/external/rust/crates/peeking_take_while c2784562cd20ac763a9fad45be2b73a1dc5804b9
+platform/external/rust/crates/pin-project 76d3922e69d62ef5858ac6fa69823b076454405c
+platform/external/rust/crates/pin-project-internal ec3591c40d5401566603ab3d366d68dc1f4d3938
+platform/external/rust/crates/pin-utils ac905e56c3e50161ceb6cf624003938242479c25
+platform/external/rust/crates/ppv-lite86 b99e446fe4c019cb558d1c86619af269acaa754f
+platform/external/rust/crates/proc-macro-error d83dcd7f30efb30c5f84c1855fcf407a9ecd70f7
+platform/external/rust/crates/proc-macro-error-attr 8f64267f9fca9ce0b3a73f35176e2b582108ab19
+platform/external/rust/crates/proc-macro-hack e95f85565de7d237c9aea7b79534e05971b8daf5
+platform/external/rust/crates/proc-macro-nested ec1a57081382a0610ec15eeadfe7090a04723162
+platform/external/rust/crates/proc-macro2 06696acf77e69a76133726ba4f588f6d71b809b0
+platform/external/rust/crates/protobuf ea9e05400ab288f1e9ba0263a43f0d23542b5be5
+platform/external/rust/crates/protobuf-codegen 60cbc575299312b60d0902700aa4992c80e6d0fa
+platform/external/rust/crates/quote d25c820116550999ee04e85ff6296542267ded07
+platform/external/rust/crates/rand ae67e3d59244d06cfba0f1a153460aae4794fcdc
+platform/external/rust/crates/rand_chacha e758c49ef225ca51e8994a8c36b1d2200a74665b
+platform/external/rust/crates/rand_core 1a8592bb5f5e8de7ad217019721bbcd332f3853a
+platform/external/rust/crates/regex b509bf6711f14050c20ce937aff3a8c6e1c275c3
+platform/external/rust/crates/regex-syntax a011d685dcad7984418e27afec70d5825fb663d4
+platform/external/rust/crates/remain 628d0bac83464cd0f71094ce33129837aec5fbf5
+platform/external/rust/crates/rusqlite 870e268b89744813be27b6e476d8d1cca19770e9
+platform/external/rust/crates/rustc-hash 769ab80e9ed620083a5731f98f8931deb96f6747
+platform/external/rust/crates/ryu e73919417d95597483998b400f5686321c5573bb
+platform/external/rust/crates/serde fce86309c763ce3efaa34056d619d8227d48bdfc
+platform/external/rust/crates/serde_json 3db4b7e6028fd80151696560a2b1854528d0d96f
+platform/external/rust/crates/shlex 0209cda079b7f91945ed7261a38ccbbace4ae440
+platform/external/rust/crates/slab 266fb76b1cc5586b453db096bdd3d5b13b506829
+platform/external/rust/crates/smallvec 5e11e692f14f62a36782a11debe969e94cc6486b
+platform/external/rust/crates/structopt b3f45b7dd1ee7e33def0e8ac196b78bd43530dc4
+platform/external/rust/crates/structopt-derive f5ff14fba3d979b31248aee8b7e41567ba5d7077
+platform/external/rust/crates/syn 7c47db1c7798f18450fd9ab7750aa3f4661fdd3c
+platform/external/rust/crates/syn-mid 7ac04651fb8cbef885d5cd8dc01bb7b681c02f48
+platform/external/rust/crates/termcolor 720683a3dc53b482ce8e5b952d47b0987be7218f
+platform/external/rust/crates/textwrap 1fe49f8a2e44c64b5f78c2b3d0348588b8f10130
+platform/external/rust/crates/thiserror cd4cd02e5b9e51c16a81bedbd76f7a1e59db767f
+platform/external/rust/crates/thiserror-impl 0bf78c6fbc367e31a14ce8600750265aecc3b193
+platform/external/rust/crates/thread_local 7d6c59c000410a1a21bb46b838961aaed637e906
+platform/external/rust/crates/time a83bef9eecf3dd9196bb561eb04da52515cac9ff
+platform/external/rust/crates/unicode-segmentation 4f4059e755a239c1d34b9db846ee6c670e48741c
+platform/external/rust/crates/unicode-width 36361d919bb95c4552e45bbeee10bedf6b2cb195
+platform/external/rust/crates/unicode-xid f9b89297d0245e3e41cc3f0302dcfd6460afe39f
+platform/external/rust/crates/which 8046fe49cc93e71a1c3828a726f892445f82c798
+platform/external/rust/cxx fa3e07574e0200ca9d9a6a9fd2416dbc1d980d9e
+platform/external/scapy 616eaaacea62e778220aae61f3d8caa848946b74
+platform/external/scrypt 582ad504407e7819a1cad76e22baeea322a85375
+platform/external/scudo 68e969e837d827a2f837dd0d92c64e4714bea283
+platform/external/seccomp-tests b0fb6a61e50d4e246db8e98b323475a3f8455728
+platform/external/selinux 4269deaf78b84824149c25cfe79b4988e20e1c98
+platform/external/setupcompat 7f1668c1d05748b6f917f4b453153f2757a1c0de
+platform/external/setupdesign 8822274a63555177517c4c61dd4dfddab8d66117
+platform/external/sfntly d85ae65ce7214042a2fc9b500bf71c4df476e3c3
+platform/external/shaderc/spirv-headers 1dce409ea7fdbda280f9cb9aea1eb6c5a4e5be1f
+platform/external/shflags de61a8175f5c62d14bc988583cc6b8408e1498a7
+platform/external/skia 6f63b8107fc8f3eb7da7a6d80992c2d3d2b4cc1d
+platform/external/skqp def834ecc705ff44dd18ada7d74e1a89eef9d52b
+platform/external/sl4a db47f7ec8bd9d5553e204dfd0a0f030a8a76b74a
+platform/external/slf4j bb3284dfa42bfd78b4970b5a6e0018c59cfbc445
+platform/external/smali c5154dd4457b8c078ee90cf533564cfbed353b28
+platform/external/snakeyaml 76875e9894d8a60c48ebf68b05b17648b351e931
+platform/external/sonic dfbc52cf3f85d3c5af425d3c58ea0c48ce5bbf05
+platform/external/sonivox 8117fdcb56b95f91a92b4682fb5ea786a26958c8
+platform/external/speex 355bfc5dc044db74362b7e6b80b103c375e3fd07
+platform/external/sqlite 07a16757a0d50eaec1d596a405d79166bd859995
+platform/external/squashfs-tools 7bc773dae4bf4cbc2d3e0d3740228d581e8f92d4
+platform/external/strace ef09dc4af70cd58c9445b2b8f556fce16791f0c3
+platform/external/stressapptest ac780abc1d1fba854d80c3f02dbaa300c416a390
+platform/external/subsampling-scale-image-view ff074cf32c8d6f78e3bf11e62fd909fca407f050
+platform/external/swiftshader 99dc76e9a62567e5415ec8d19d6083c293fcbc23
+platform/external/tagsoup 78c14b033493ecf7716c4e989daf1707733db39c
+platform/external/tcpdump c6c14b36c564ccaef176af8614d8678210890fa1
+platform/external/tensorflow 2edf5d2ece1770ff03660ccd9561a120a0199f5a
+platform/external/testng 39cbfb145e713c4ec21464925821a0a503777f6c
+platform/external/timezone-boundary-builder 671355f22a1368e27b8c588bfab35abf30aab0f0
+platform/external/tinyalsa 38ac7dcbcf412b3a5f209e1f758003019f286752
+platform/external/tinycompress c881761306c3d2817744b3d4ab4ec64c41c105a5
+platform/external/tinyxml 67200ff421dfae5989f93972420abf4b25de0ed2
+platform/external/tinyxml2 bebb0d5f23817b97b2c00de64d206af901b87c83
+platform/external/toolchain-utils 2b8938f6e5ba5859296112fbf8836ec67efea66f
+platform/external/toybox a146ed3466f1b8d8a4762d6515c5e71c6ef99bc8
+platform/external/tpm2-tss 324a4d0c4267fa10214d89e9363496c36c91367b
+platform/external/tremolo bca741b8618cc6ad59b866ade34b289373d96dd9
+platform/external/turbine cbad21212bc4bf2ca34b31d25954182611e4af59
+platform/external/u-boot ba8f7192c46a020b5ff64e80381c6be5a80e59ab
+platform/external/ukey2 25b4f17885660ee0ad25eb2960e02619417e8538
+platform/external/unicode 33f16f30cccbce0f4a778792917cbdf571b8e796
+platform/external/universal-tween-engine b76325e6da37b326da41e9e453fd672dcdec4950
+platform/external/usrsctp 9ee7800197beccd82b60769bcc08d26521fa8d60
+platform/external/v4l2_codec2 99ee515bd99fda35b5a57aef2344cc2c98a31d07
+platform/external/v8 83fb77e931473f29b5e0aa395e260bddbcc792f7
+platform/external/vboot_reference 9ea0d069cf756cd0074c0154a20a96c22f2cbaa7
+platform/external/virglrenderer a3cb1d6541f87e33aade80b1474417f69eef3490
+platform/external/vixl 9508a1e2e8304e89160195a6b0cf0a44231b4ffa
+platform/external/vogar b66a0b33caac70787246565d7e01fe516921e641
+platform/external/volley 2cf5c7d9dce85d76e0aabcd4e0f762d06771cdb5
+platform/external/vulkan-headers 78820eed14bbc945d53c5f76fee142d72763096c
+platform/external/vulkan-validation-layers f27ab97332df49e6f789ca10371fc051da96f8e0
+platform/external/walt d810cc62c8c7de52ad14639d7e7835aa249b4d28
+platform/external/wayland 761a3b7bce33d3116b0881a6735486c37ff975d4
+platform/external/wayland-protocols 9b9a26861b7dd37cfeefc1782ecc32fa9573651e
+platform/external/webp dd421d039ab9f24230ef3abd23cd648b283290da
+platform/external/webrtc 43f84d31ab73cc59b00f24ba29866ff6c1d875f4
+platform/external/webrtc_legacy ee39397c26fab8b841542078e728918d1aa85bc9
+platform/external/wpa_supplicant_8 df4113c79022a51879c4ed38ed6110d5bdbc3c8a
+platform/external/wycheproof 2c2625b64c634eb0169880bee107bb4cf181c446
+platform/external/xmp_toolkit a8b9f1e4ada7cb362be2b4377523a44ba6918c7b
+platform/external/xz-embedded c4c5d077e92921a3a95ba810cd550d40d8d827fe
 platform/external/xz-java c704abb9d4a6aec8e1a557b1365509d34578d2c2
-platform/external/yapf 662deb32281814ea617589ec4dffdac208a9022a
-platform/external/zlib 9cf0ade127a26e91b57961f98bb2e50e40efbf10
-platform/external/zopfli 953cf89d9b4e89bf3944a7911bfee9a8d807394f
-platform/external/zstd a4ed914e95d04a233a7e737988abea0959394157
-platform/external/zxing 5a4097b4cc9bcab90e4a1633623d63bc8923fc82
-platform/frameworks/av cf2a3a9d77c3010146c09c8955796c54ece63be4
-platform/frameworks/base eb3a55f95a6a951f6156eebb2e94541dbcb22fc3
-platform/frameworks/compile/libbcc 1ce729253430fd06fc67f9b9bd20c65f44434811
-platform/frameworks/compile/mclinker bd2fd0d4f563fe6dc5f2bff8389bf8568c894a6c
-platform/frameworks/compile/slang f3520665968c1027380be3f70228dc43bdf9c357
-platform/frameworks/ex 1cabb832cf2a4bc85905839497063fcc4fbedacc
-platform/frameworks/hardware/interfaces 5f37272acb286aac8919170e75c4f8019b33e9a6
-platform/frameworks/layoutlib c8536c1f4e1865beb03f0494b67540d1e7261cd1
-platform/frameworks/libs/native_bridge_support 532cbffd1dfd48ec12dec2b4aa2f51e1f55b61b4
-platform/frameworks/libs/net 41151217852b97b131926225c525623cdc7ec20b
-platform/frameworks/minikin 48eac93b9825be9c2bf87eb894e98e78e20a3d14
-platform/frameworks/ml cf55de646ba512836c30b260019f6ac5291da820
-platform/frameworks/multidex 97e400a12d9931ca28bffbff0b719efe1e46bec8
-platform/frameworks/native 1a2b171557883a41db4624dc5ff340ba8729cd1f
+platform/external/yapf 745636d679b15e065e19534e86ddebdf6e9c8cb8
+platform/external/zlib 2354c36e5d9f1d29eb62370054b1f7015a3a30e8
+platform/external/zopfli e4ccb19ed70eead11646fe3701ae7517ac90e118
+platform/external/zstd 546ed146d2def0732062eb99b29e26f69809f6c9
+platform/external/zxing 6a4778a4e088e38945d931cc4e52b35b13d3216e
+platform/frameworks/av 7d4e38c7ed481c4dcb7b49acb16c27bb8130e4f1
+platform/frameworks/base 5911bf03fa08dfeceaa486d244b7c6a693b20d9d
+platform/frameworks/compile/libbcc 52817d48dd4ea4640fa809004d702a2203df3afc
+platform/frameworks/compile/mclinker 06c9ee0468c0880515641fb7e7a1155aa9f37a9b
+platform/frameworks/compile/slang 49dc3cb5c8bb1e8d130a58c483eb70cc86a43b6b
+platform/frameworks/ex 15e5254eb927de67ea00711db01add7d13edb71a
+platform/frameworks/hardware/interfaces c713f0cce5db9fc77d12b27452ad7d9cc1ddd2f3
+platform/frameworks/layoutlib 3843cb6998b763ee2dbb548c4faae156bd405ab0
+platform/frameworks/libs/modules-utils a52ddf58acf465dafb9171107791f7b1cf9ff102
+platform/frameworks/libs/native_bridge_support 1f3d99f3a50b96004ef59c368918a181cf1083e1
+platform/frameworks/libs/net b36dc4c633c4a93548841747ea74def9f61c96da
+platform/frameworks/libs/systemui b7729559a5c81309062bd882e526a94e4b113408
+platform/frameworks/minikin 28ae124077b0d1f7eccf477755f174c8eb008615
+platform/frameworks/ml 435500ac9c9dcc01a298e329d6a527d3d18a0790
+platform/frameworks/multidex 241431804cb3abc8bb9e05fd4ca7e03aeb290364
+platform/frameworks/native 55696ef62f06264052913db2ceaea6deb3c9604e
 platform/frameworks/opt/bitmap d27bcc0cba561c829bacd25ab0c057ac957ec87d
-platform/frameworks/opt/calendar 599da8cf33eae48256b824b7e080ef80d694e727
-platform/frameworks/opt/car/services 3b2c67e59be97e8a2c43d4c62f34bec452faefc9
-platform/frameworks/opt/car/setupwizard f853fe4515c8761ed897f2fad03a662894200417
-platform/frameworks/opt/chips f99a616343940b68375ee91eb0f188c1bf43c2bf
-platform/frameworks/opt/colorpicker 91cc1175b23195d1642d248f6bf47c7d030ac4e7
-platform/frameworks/opt/net/ethernet 5611a0c3a0a211da5962b55597f84dcac1bba40c
-platform/frameworks/opt/net/ims 8d72bbf4f19db1b26fed485a8c0ef7ed06262363
-platform/frameworks/opt/net/voip cb43108f73b0c80321ec27faf0d6df01114d6ca6
-platform/frameworks/opt/net/wifi 356717822962f6df3a98dfb1c16f25ebbbf60139
-platform/frameworks/opt/photoviewer 6139679d1c86bb1c1e011cc08b1e6888eae75aed
-platform/frameworks/opt/setupwizard 26fd2070bdb4ce21fbf77842badb8f4f9ce457aa
-platform/frameworks/opt/telephony 55fd86db2cfe9855d0d085e8fadd094c101f8522
-platform/frameworks/opt/timezonepicker d2d1e7b826126a2543d1da4dac638344f5dd1cdf
-platform/frameworks/opt/vcard df80c5deee0b25ca59669e268bb2df6e9c0558d9
-platform/frameworks/rs d09e75845b679bae31e6f1b5c0be163b3c0e3170
-platform/frameworks/wilhelm 7b38c1374280f1c546e9c7b98cf299c605cbace4
-platform/hardware/broadcom/libbt afc47a0bcbbee732eba879c0a079d0b2c2d7858f
-platform/hardware/broadcom/wlan 120337b0fa080865da18d101df0497b9ec66790d
-platform/hardware/google/apf fa8030a4ca37dcb7003199bf0edf65cf83d4d29e
-platform/hardware/google/av 9bbf78740b1db69c61acbc98bfecccbbf9805fa7
-platform/hardware/google/easel 18cb3a0bf06e12bdb401896c7ef96e7475a957ff
-platform/hardware/google/interfaces 3a92e893e53214f88efe56cac205a0cc9a453f4c
-platform/hardware/google/pixel a54c018edaf4e13b1446d85ddc0c7da70ab2fff4
-platform/hardware/google/pixel-sepolicy a3af99c63f21e27cba689f811c15c2b10f638fea
-platform/hardware/interfaces dda7a54c1287b29796262e3756e1363fa95d3b1f
-platform/hardware/invensense b7fce877eac2519faa46087ef42044003f82f4fd
-platform/hardware/knowles/athletico/sound_trigger_hal c41f7f69709aec209ab356149abbd36adef4508c
-platform/hardware/libhardware 6e409ce924eb050ae18e474004f82456c8f0c0ad
-platform/hardware/libhardware_legacy 6ae68436870402d1e9bf829e15ef20c583f9adc4
-platform/hardware/nxp/nfc d4930e9cc0a16f1986fd47fa6afd0c402add55bf
-platform/hardware/nxp/secure_element ad26d72a1ed1566dbaebe0f8fd4a8506b33fcfe7
-platform/hardware/qcom/audio ab5b4767d5673c26fbe2538cf44479b15e75f058
-platform/hardware/qcom/bootctrl 4176b34dd17f1132c5501ca7d4f2780aae08368f
-platform/hardware/qcom/bt d557d5081d0d5d6de3363add3c90372e8a0b01cf
-platform/hardware/qcom/camera fc017f32398064a5628432b0644ab5e480b54a0c
-platform/hardware/qcom/data/ipacfg-mgr b630efd1f17ba91ea2a225abafb17b3a45a9fec0
-platform/hardware/qcom/display 2f19a6e13e5abd8879f1f66152a0f6fb939b77e0
-platform/hardware/qcom/gps 735b308b2fc86e9d24101ddca75bf6b5710390c8
-platform/hardware/qcom/keymaster 7381228a81acd9ccd05915d72e1d873382dafc39
-platform/hardware/qcom/media 1b7d5e85c9685c5d5a00df86376ef4fa01af2969
-platform/hardware/qcom/msm8960 c25a431842a26b5756b58a9d4a42c776e0457ba2
-platform/hardware/qcom/msm8994 8e0383f6f41a2c49461f381c8d066ea21b20c674
-platform/hardware/qcom/msm8996 c1b483c685331ecc414ddedbba9367c7143d47fc
-platform/hardware/qcom/msm8998 8f4e9d5b67799ec733818db9325de21cec21a11c
-platform/hardware/qcom/msm8x09 611137f13567e69c597ade9df1d44bee44f56fac
-platform/hardware/qcom/msm8x26 85c1a5282ae28663335e55ce96a4c0487de6c578
-platform/hardware/qcom/msm8x27 8ff5c0057cbdecfa09410c1710ba043e191a2862
-platform/hardware/qcom/msm8x84 582b414269d8472d17eef65d8a8965aa8105042f
-platform/hardware/qcom/neuralnetworks/hvxservice 157d3b52c7c7c15426d6f945853e385b5610e834
-platform/hardware/qcom/power 4c2f283f15bd88594602626b7e0eb6d6ac4cfadb
-platform/hardware/qcom/sdm845/bt a2d59926f48b02abd355318e8a242fa8c1e8c104
-platform/hardware/qcom/sdm845/data/ipacfg-mgr 85b36b854463fdcccc1e3e26d024fc60f52e52a5
-platform/hardware/qcom/sdm845/display e7a0ff60fb9bb8fe734ee6bf7d14ac524dca396e
-platform/hardware/qcom/sdm845/gps 6a05efb9522e66cc1aea8aefbf22736eb5216c07
-platform/hardware/qcom/sdm845/media fdac973008d4792dceba1bc34fbc8aa4e8f423fa
-platform/hardware/qcom/sdm845/thermal 570c779af5269ca4e4311cd2361a22b1df13af95
-platform/hardware/qcom/sdm845/vr 62eec8b043690dac0a7764dd664d569fdcd3b60c
-platform/hardware/qcom/sm8150/data/ipacfg-mgr 140403d32ded00f61412e54868b98151af3031da
-platform/hardware/qcom/sm8150/display 9ce7e57b20fc20ffc07fa09276eaf69685437d46
-platform/hardware/qcom/sm8150/gps 060d96a50281bd47872db576744729e78bb83f01
-platform/hardware/qcom/sm8150/media 0e3d2b6a22327b4417a2a33c1825a704d56efe8b
-platform/hardware/qcom/sm8150/thermal 8c84329a85bdd4a55a019ce765001e34425731bb
-platform/hardware/qcom/sm8150/vr 7ce6913d933116e6f15c1ed4666e234fcf77bee8
-platform/hardware/qcom/wlan 855609c1c783146779de89a52a40bbadcb7c0496
-platform/hardware/ril 7e3aa76670adc826902f815467c19bf8e9e0b724
-platform/hardware/st/nfc 85b1b80b64c93d6939d97c4d82e1025370b34bb6
-platform/hardware/st/secure_element 38ddef15606eb47d7125e0d9d011956971844cef
-platform/hardware/ti/am57x d54d233cee1b80d03d9629676f041b0e389e75c5
-platform/libcore 5edc37763df3b7816d41637fa6949f39dfbede28
-platform/libnativehelper 71547fea698a1662b0ae55984efdd85e12594916
-platform/manifest 052a3c7823b1d56e92c9cf94f6059a9ab2bff375
-platform/packages/apps/BasicSmsReceiver bee4824b22a3d80251731b0b056e020bacdb9099
-platform/packages/apps/Bluetooth 43fdf912ea42a8f14ab3c926968b402143afc3d5
-platform/packages/apps/Browser2 1bd9a57e3012294e9ddb48d3f094445e25ad7333
-platform/packages/apps/Calendar 3b91eedafb7ac50d062c0bc0b9b3d58802fc855d
-platform/packages/apps/Camera2 e525e122ef19e1d535dfef653b375572bde83711
-platform/packages/apps/Car/Cluster 0f3757a52f6455e010605d05feaadd5d8d56c0b9
-platform/packages/apps/Car/CompanionDeviceSupport 68538c52302c4670060cf68120da97c17f925158
-platform/packages/apps/Car/Dialer ef064a1633fc064184944b89b10ac1df06b9a82b
-platform/packages/apps/Car/Hvac e27727ffb5c0774a875192ceb3e0eeeb1ddfe4dd
-platform/packages/apps/Car/LatinIME cadae35f1e902c7506674b77890a51bafd5545f5
-platform/packages/apps/Car/Launcher 48c1103f1f368c104171a8cdf5e5949ee00fdafd
-platform/packages/apps/Car/LensPicker 83605c2eaa0f3ad0784c746e58c75b5e4dfd4ddf
-platform/packages/apps/Car/LinkViewer a92d59c0d48b3c66ba735013266bb674d9dcfd49
-platform/packages/apps/Car/LocalMediaPlayer 35283c5b1057ee1f230cc506971a7611ab6953d5
-platform/packages/apps/Car/Media 7b5e5ea1be72cc39fe42e04d03a3b63caaf71853
-platform/packages/apps/Car/Messenger 7214cc3ea3e39b7f4631aa5d361bc3aef04cfde4
-platform/packages/apps/Car/Notification 05d588b3c6abff73f48ddd30e1e454f6bdea6fe3
-platform/packages/apps/Car/Overview 48b5c71e67657ac2813d4f947d7c8dac97dd5f4b
-platform/packages/apps/Car/Radio 3ceadea50e67acdd6883f938667ed6c9dd262d46
-platform/packages/apps/Car/Settings c271dbd109507428bcf439cf61c606c5245a71dc
-platform/packages/apps/Car/Stream 1000556c2b37fd44951dbf4e82fa30dbdba03c04
-platform/packages/apps/Car/SystemUpdater 6eee4f0b7623c0e43f37d38b677dd37bf283bb00
-platform/packages/apps/Car/libs 6c8b2bbca1a3d288c796e68df10a7fb2843d8675
-platform/packages/apps/Car/tests f5aaabf7f85f8dd4aacc369cad0cd35cdcd09ebc
-platform/packages/apps/CarrierConfig 2076de8a15c81c6412512a6d4a12d88d7b5a0096
-platform/packages/apps/CellBroadcastReceiver 1a42e06d6244ac9a37583aef1aedc0e166760359
-platform/packages/apps/CertInstaller 70412af562dd37954672e3661034b641e556fc34
-platform/packages/apps/Contacts de49ec783384b00cbe7d2e912d0a686aa7f08065
-platform/packages/apps/DeskClock 8a18af31b35c41ac690809edd76a63c2baf19bea
-platform/packages/apps/DevCamera ab94eaad3e9db13903da1481571c74af6716f06c
-platform/packages/apps/Dialer a7ae9375311ffbe4c952fc82679e16e0876a0bfb
-platform/packages/apps/DocumentsUI 0773de2d9ee919057a96fc1f3de1ab5f70a3b677
-platform/packages/apps/EmergencyInfo 08a3757e5d7cd1c133845600aef0d3d627fde4f9
-platform/packages/apps/Gallery 6c032bfbf45e2586ff97d55a5b95efd1b28db3c0
-platform/packages/apps/Gallery2 c8691868ee7add4e1d5fce64b4205322575fe078
-platform/packages/apps/HTMLViewer 4e2fe43eaaf51f5dafddaafb5596fb36545a8179
-platform/packages/apps/KeyChain 6d0a99c343be262b30355c6a490d6c2156e614c0
-platform/packages/apps/Launcher3 670403d0cefcd16d666b215ef26cdeecca162f40
-platform/packages/apps/LegacyCamera 841009c7d9303c164352e75bf5e909cf2167bcd8
-platform/packages/apps/ManagedProvisioning 2d9d298e0ba5c8c834c62baa73f2fbc6bd24574e
-platform/packages/apps/Messaging fcf8cb8fc0aa3f32627ccf89aff0856d9e3a9408
-platform/packages/apps/Music 93f2bdf54308d8a7c937a86cb5422f35f80a5ed0
-platform/packages/apps/MusicFX b2f7e37d281f07f8dfa0ede243ba2953c2e1cc6f
-platform/packages/apps/Nfc d90ee782d395bbeadc1397871b162392a32e38e4
-platform/packages/apps/OneTimeInitializer 29b2a66a523cef6e90b983a060544e140d5e184e
-platform/packages/apps/PackageInstaller a3e505b45bc79db44b03692bee4cde1700f97de0
-platform/packages/apps/PhoneCommon 871be50e88bae41455b43ffee41eb3361f131a75
-platform/packages/apps/Protips 9599c1c1f63a7dc2b0b7c2de170590d8f55d7a3b
-platform/packages/apps/Provision 9b45e984e8cc6009bf1cb391bebc1f48c16c6759
-platform/packages/apps/QuickSearchBox c11f001ced6dcccbdeec779a0133ef8c00db264e
-platform/packages/apps/SafetyRegulatoryInfo b622b66321aee04cde6a992bfbb923421afee33c
-platform/packages/apps/SampleLocationAttribution 1afecee8a3c7a8816d315f15c871e47d8fff891a
-platform/packages/apps/SecureElement 952575b6c0bb76448e1bd1b3c387872501a5f583
-platform/packages/apps/Settings 41c47308944a97fd85eb491b5dae162c46735812
-platform/packages/apps/SettingsIntelligence 88be54c173cbe86d10d8bbd663777d56efda4ac4
-platform/packages/apps/SpareParts 9d86884bc2defc3fed1a1913407d9d66efd6cb93
-platform/packages/apps/Stk 860dac334b8360226c59594581e97911d8678682
-platform/packages/apps/StorageManager 960918a53f121e1baf8c9f3bd03062a33ce51bfc
-platform/packages/apps/TV 4dd88eeee5d1dbe259814528b27e5b2e357206b6
-platform/packages/apps/Tag 9d67ec2e9de81118a225bdf6e76c1ab86c0f0327
-platform/packages/apps/Terminal 4e53952b1010afa6b2c67e9b29b26a567980bac4
-platform/packages/apps/Test/connectivity ed15cef87031a316f9b20c4c3e008ca019835954
-platform/packages/apps/ThemePicker 5364d1e5f4c6dde9ba8ff93e51193a15eab3b749
-platform/packages/apps/TimeZoneData 79b2e53aef1d1339a0ad17db224694c8fbaaeb2b
-platform/packages/apps/TimeZoneUpdater 487b83b8c360c61637c9fed07144c1a705731cd5
-platform/packages/apps/Traceur 4227ad49eae51ed526119a2357ba9c3aec08f2bb
-platform/packages/apps/TvSettings 012de76092e9d1d21e98acc2641ee44b97e72a0b
-platform/packages/apps/UniversalMediaPlayer 202183d676a29ccec626f1a6832ac2269f29b0b7
-platform/packages/apps/WallpaperPicker 1efb4e33304c452ba3b90fb45b6d1d7b94d1a2cd
-platform/packages/apps/WallpaperPicker2 e2a8d992f7f4dc76355d6095f78eeeb7af4ca544
-platform/packages/inputmethods/LatinIME a94e78dc79b8a4e90272688c7e7f917ffc5933d3
-platform/packages/inputmethods/LeanbackIME 5ccf7a988d4178bf6dad18044f821c5c95dc9237
-platform/packages/modules/ArtPrebuilt 491a40e7de77dac8666f05aab45e6e71e57ceb49
-platform/packages/modules/CaptivePortalLogin d8b5293bc6fa8103836af373b94a3047ea38d5a2
-platform/packages/modules/CellBroadcastService b830991310da519a244aeea01ab2ca3ea1b803ad
-platform/packages/modules/Cronet ab9829bd72bd1caee7c72a247ae8f99114552bd7
-platform/packages/modules/DnsResolver 8508eaf887de989ca5621b2d5274b2835831b6eb
-platform/packages/modules/ExtServices 48801567d56ca58d5cfe05130028eb85c75bd1f0
-platform/packages/modules/IPsec a27f3f1ab7da6a32a6fe1ee0beb5347fd6c9e49f
+platform/frameworks/opt/calendar bdb003d0beee54518e0332fecac19d89a97253e1
+platform/frameworks/opt/car/services 679cd6bbf2a32506c2129ffff62ff007f82890fc
+platform/frameworks/opt/car/setupwizard b3f1846fb8b4784eda408bf55c92957d25985800
+platform/frameworks/opt/chips ad9990c2a88c6160e25447ff7b74e58baa5001a4
+platform/frameworks/opt/colorpicker 2a77850175572e8f0890c5f938e11c6f2ffd7fb2
+platform/frameworks/opt/localepicker 686c483147eb27a1d67e1f6ed9695dc8404a80f1
+platform/frameworks/opt/net/ethernet 60aaaa1939afb2ed3faec8d7e686ef7be6fc2da6
+platform/frameworks/opt/net/ims fde82195dca37db9f9f134fdb9b8a5bdcd6ae733
+platform/frameworks/opt/net/voip 702ff51894bf9fb1c7deb44c2dc934f65b611632
+platform/frameworks/opt/net/wifi e932b4034073c99d3052377410edeb044a4aa527
+platform/frameworks/opt/photoviewer fc6610f10240575803ac9190dd2682dcc6310185
+platform/frameworks/opt/setupwizard 273706ef1ad9a7161915ba380b85e97ab6f58930
+platform/frameworks/opt/telephony 9dea8918719a5370e9117f7a5aef231ce10233c6
+platform/frameworks/opt/timezonepicker 0d0b8a1d5e4bee0db8cd3f7e6ca9db728a6939f4
+platform/frameworks/opt/tv/tvsystem 6aeeb92a0a967b2590d4c0b82cc3b1eccb302863
+platform/frameworks/opt/vcard 94b50a469c41eaa12813d154a3ebad850bd199db
+platform/frameworks/rs 6125c8f2fb73fa1ad865d8c57e95eea5409902c4
+platform/frameworks/wilhelm 2d327fe2aaaaf0c1f563e308854ff422b1aa41fa
+platform/hardware/broadcom/libbt e12436bdf36ef3da6307da7fea76f4b6321174ce
+platform/hardware/broadcom/wlan 5a310f9dabe8adf82889c91e4c46ae2eaf54888a
+platform/hardware/google/apf 076f6f05cb2794e23e16b9946fef8d524cc6c4d1
+platform/hardware/google/av 2a649215dabf2c242edd2952e2aaf5bcdd83cf99
+platform/hardware/google/camera f999c9ca5d5a32e3986d9e038627930f92d8354b
+platform/hardware/google/easel d4f7a0a66d56d0df426bb71608a897ade832f40d
+platform/hardware/google/interfaces d243a272bf913326169096336d5a912c62db3743
+platform/hardware/google/pixel 80de045af9145c7d67185894bfebb78186eb3586
+platform/hardware/google/pixel-sepolicy 31f34e1c8385cbec5d07767b83fe19f0c0155f6b
+platform/hardware/interfaces 92f1c4b830d00ad988f54e34fc18d114f6b52611
+platform/hardware/invensense 0e497d91e039aaac4dd3822c8636b52551e616af
+platform/hardware/knowles/athletico/sound_trigger_hal 657f5f40d4d3989355e485fcb908d2929df19310
+platform/hardware/libhardware 3e2909465aa53560f446d6f0ff0c4fb35ef2fd81
+platform/hardware/libhardware_legacy bc0b4d00f2db8ede89a4704bae1cc16b13b2a0d3
+platform/hardware/nxp/nfc ffec24ab1894b7ca073590d2a6c8907b3074f7c4
+platform/hardware/nxp/secure_element 65c6c4c83de34e574db1141b72443b92ea210adc
+platform/hardware/qcom/audio 2a54c865b2e79979f3594ef858060dbb7fff52c0
+platform/hardware/qcom/bootctrl fcbcb2772064649e118924180276f6a0f51ca855
+platform/hardware/qcom/bt ce7bb0fcaa04ce15c64ea76d871f139084fbfb26
+platform/hardware/qcom/camera 234b16dd3d68d10039fa3b21c59344426092f24b
+platform/hardware/qcom/data/ipacfg-mgr 200f0f36a2edbb036401cb598669b3241debb5fb
+platform/hardware/qcom/display ee872f8c3ec9494f6805fa2531575ef782c298b3
+platform/hardware/qcom/gps 937a7daf5ca5dd163cc9554e909b7bf753b7d9f6
+platform/hardware/qcom/keymaster 441e7836d52a3c4641c2aa65ec8d1df1dbc3108e
+platform/hardware/qcom/media cb5b87f38f4d5931828aba9c8354348178ca175f
+platform/hardware/qcom/msm8960 80e0ef404737569b918fb425fab0e9cf58c2c7a4
+platform/hardware/qcom/msm8994 010041cce8a2d48f4c82cf166aafcd8db3c676f9
+platform/hardware/qcom/msm8996 e525699440bc58f338c2f8813f3cf234ad19ffde
+platform/hardware/qcom/msm8998 3f3eda0738a020629314240265a7b950a5f68d44
+platform/hardware/qcom/msm8x09 29a886da0c76d298b21eea8ec588c85fb1e74978
+platform/hardware/qcom/msm8x26 5eb5f6d5f06b6450efa6140b4a901e8574f273ae
+platform/hardware/qcom/msm8x27 cfe48d6757b0013f53629740c422e0536335510c
+platform/hardware/qcom/msm8x84 05c050d31b998e40e63db74cf3dbf7b56338b512
+platform/hardware/qcom/neuralnetworks/hvxservice a04fe6bca6611dbe2d3f433193ad4b2402185f70
+platform/hardware/qcom/power e1877054c4f60c880d4b0244834bff02185c299b
+platform/hardware/qcom/sdm845/bt 0a11ad351eb098b84a82225cfca61f5c3265f860
+platform/hardware/qcom/sdm845/data/ipacfg-mgr 3e449bfa4622763f47d19e70b8c6bdb2c182e8de
+platform/hardware/qcom/sdm845/display d37ce48aaa20e19e1a0df98b22e7b850e555c8f6
+platform/hardware/qcom/sdm845/gps 59b91f01eee4b31084d839fbecb502afb34c120f
+platform/hardware/qcom/sdm845/media 384ffc4d206afa261ed98bff0d506140b97b5084
+platform/hardware/qcom/sdm845/thermal f9f26de5aeffa7fbcfed8ea2545bc320354a71fd
+platform/hardware/qcom/sdm845/vr 7e64bb374c87f688ee9f11850bc0cf8ccf8e3b71
+platform/hardware/qcom/sm7150/gps 7b6654092435393e883d91a85573869fd124d72b
+platform/hardware/qcom/sm8150/data/ipacfg-mgr 3bb87d3b63873a28ce69ddaa7bcf7680f2fed227
+platform/hardware/qcom/sm8150/display 0aa462327fb390c16dd021ffa795b3ac819cc592
+platform/hardware/qcom/sm8150/gps 0ea3f4b660fca64325f6f37b9f141da46114a96e
+platform/hardware/qcom/sm8150/media 410167d0f1b5b4ac37b5487229d21dafadfcb9da
+platform/hardware/qcom/sm8150/thermal e61118b0de176c136b5fc663b2be8fee20317790
+platform/hardware/qcom/sm8150/vr 84cf8b9b2f15baa5bb6cdbbed0a887bea192c446
+platform/hardware/qcom/sm8150p/gps 2dcbb1efacb66e4ac019458a44640505b7b9b9c4
+platform/hardware/qcom/wlan 8128ca0b2b93a5b40f2e1ef2bc318756f0962b0a
+platform/hardware/ril 758ba501b8d68878a11901010dc2c7fb40217672
+platform/hardware/st/nfc a80165fcec5d466972fc6ae20a41e0cb6c8db6b8
+platform/hardware/st/secure_element da0bff0c70f00e07ae61d1cbab0bf7e339535d8c
+platform/hardware/st/secure_element2 e41aba2c2cf151c7a31ba4c01eb686091495ce6f
+platform/hardware/ti/am57x edbc24545ccbbaf4193cc05f477f14b7200d416f
+platform/libcore 325f9cb4052ca15f14374a4e6f48b74c1e9d9c26
+platform/libnativehelper ef9b4fec89644f323ae7c785cac092cf7c51262b
+platform/manifest 5b9607d2c7268f9d1ca1e5e5dab7c59f3935fb17
+platform/packages/apps/BasicSmsReceiver 9c03c90ededa046e070544884fbf9ad1afa32f22
+platform/packages/apps/Bluetooth ed3b24d6dd2a12c2ab1a1d841956120efcd247bf
+platform/packages/apps/Browser2 8337588e39a029a84d39c6c79ea8515367981167
+platform/packages/apps/Calendar 2888988806676cb48e41c430985a1b22b4497e8c
+platform/packages/apps/Camera2 923b35fec26d11efc652fe38d6db5153b3acdb56
+platform/packages/apps/Car/Calendar 042753d3abc998c5412ca32ade07ea0c3fcef0a0
+platform/packages/apps/Car/Cluster 085f6686c3169a5a3e4e6cff5d3b7e8ae57b92ff
+platform/packages/apps/Car/CompanionDeviceSupport d803b6b88382dd3b02b7908fcbef47c6a126169f
+platform/packages/apps/Car/Dialer e1dd88ed505f132dcc0eedb7ebf01c0c96773f08
+platform/packages/apps/Car/Hvac 45b5903b2aa1f9eb55f5f81b19e4b867dece0d39
+platform/packages/apps/Car/LatinIME 3eb584014b879a81b0c51026f4ccd5f0260741dc
+platform/packages/apps/Car/Launcher 309ded76753a7439d18957a761073305da601350
+platform/packages/apps/Car/LinkViewer 2ab1f0d059d1833a12728e234225d7bad1cb5a08
+platform/packages/apps/Car/LocalMediaPlayer 50beb3d3e481614ed19a7c30ae273cd3c099885d
+platform/packages/apps/Car/Media 23c193c65651458854a9f8dde027cbf243e35feb
+platform/packages/apps/Car/Messenger 7e94dc94e6cfceaf549adbff5c1da454034346b5
+platform/packages/apps/Car/Notification 6a0937e87f9c0783402effc9a0525ad52aafa716
+platform/packages/apps/Car/Radio a193f68c73731e310e28b89e07027afb96465393
+platform/packages/apps/Car/RotaryController d013e96dea93d7b07c8a43e562e0929d28608ce3
+platform/packages/apps/Car/Settings f0482f59d89bb9c5690477dee9fdfab7fac9fe2b
+platform/packages/apps/Car/SystemUpdater 19bc977e7c50571a314a894ee579a378da43470d
+platform/packages/apps/Car/libs c983c6fc35d79bdba92bc113092502333cf8207a
+platform/packages/apps/Car/tests d17a6f3d045d3073a48eb7c4e29fa9df15e100bc
+platform/packages/apps/CarrierConfig 941dda30bd824e1c08b8f952a36a187a4767ce4a
+platform/packages/apps/CellBroadcastReceiver 1c68296990e49647722b0d7c7fde39e611bf2828
+platform/packages/apps/CertInstaller 49f86aa441ce5afff5c6c3183dd3490e9cb20e2f
+platform/packages/apps/Contacts 79fd2ddcca4ea10a12b8642be08ccb2f03df4979
+platform/packages/apps/DeskClock 78954a63283008729c1607086816f58b5aaef224
+platform/packages/apps/DevCamera 6e2f7a78bc4e620473aa42cfadde15b316109526
+platform/packages/apps/Dialer 6d7e85404f59b94d022fc992f56724b2939ae65a
+platform/packages/apps/DocumentsUI 8901676ba22654eee6594de4b72191d0d7aa6e02
+platform/packages/apps/EmergencyInfo bd1c61e6f91561c24da7268b06399e2271ab389b
+platform/packages/apps/Gallery 63340fab0920c17873e7f2f64ba858a921bcc525
+platform/packages/apps/Gallery2 56fd36b0fc3bf5aa7549f5982ce4c2fbb296cbe8
+platform/packages/apps/HTMLViewer 9dad6ed6e7d7944828efb22db6d5400f16237ac2
+platform/packages/apps/KeyChain 65c216e1ff589bf89e7f0c629ae3455fd98867f6
+platform/packages/apps/Launcher3 aefb883720108130c5e0431d8883328b1e6c18ce
+platform/packages/apps/LegacyCamera e8935c236c3004f5657ebe4d7f347667dd6692be
+platform/packages/apps/ManagedProvisioning 9e087734ad141ab799f16a205308aebba57a98f4
+platform/packages/apps/Messaging ce2b19ebc561793193bf9226615f26fbbcd97efb
+platform/packages/apps/Music b238b24627e8aa17acdd08098aa5c58e2916429a
+platform/packages/apps/MusicFX 8d43f4fe2d5f0889a8994a3c8bfe79f5a99c6328
+platform/packages/apps/Nfc 51f674e92e2a1b755d39d2731c50bea10db60ba9
+platform/packages/apps/OnDeviceAppPrediction 6aa149a1aac77c32d0949ff20ff3a934651ed14f
+platform/packages/apps/OneTimeInitializer dd87a44a99eeabb31524896ecb91ae7104dc0825
+platform/packages/apps/PackageInstaller 600d728ded913cb90c4cf30dd882a1acb143f7a5
+platform/packages/apps/PhoneCommon 7ace5ff91bc8429463ed9913ec071d0e1aef0827
+platform/packages/apps/Protips 4c4cf6ab9402dc7803f487882b81384d8da73acf
+platform/packages/apps/Provision 5fed9f67c8a3e33fe0a6ce4c28ca775a0db212a8
+platform/packages/apps/QuickAccessWallet ffc7f9b92083559b56fab15582df6f8838b0354f
+platform/packages/apps/QuickSearchBox e734f338b2c32e0dfd114b2e771a8930a421221e
+platform/packages/apps/SafetyRegulatoryInfo bc0052737d44d6dad746d82d09823ef438a6bf99
+platform/packages/apps/SampleLocationAttribution 774f3efdf6ed8498773f24f45c2583dae0bcc339
+platform/packages/apps/SecureElement 6af5a6d5f27f918df33c5a8abefed81ba136ad4a
+platform/packages/apps/Settings 6618a8d3d75c18727810785b5020608e6a888bf3
+platform/packages/apps/SettingsIntelligence 5a7566c3b127fe1020eada2a92b09625df4757bb
+platform/packages/apps/SpareParts 9eab3e42f358df0b7ddcff2342635d05350209c8
+platform/packages/apps/Stk 2d95f4b6e4d5e35431968e6163fa5ea577428174
+platform/packages/apps/StorageManager 7eca9ec8e966df13b84e702b4c698318a57e4b8b
+platform/packages/apps/TV a2500b14c333dc7c1d5686d2a405e2ed2771060b
+platform/packages/apps/Tag a75fa552a9042d566018436f0c14f0ecd43724b2
+platform/packages/apps/Terminal 0a05c119584b7e0fa9ad6214d8d0cf5db95f2bcd
+platform/packages/apps/Test/connectivity 2718ecf853883b165927cdb56bacb2fa444631ae
+platform/packages/apps/ThemePicker 5442078746f4442e7ff41ccf3c5300275c37ff61
+platform/packages/apps/TimeZoneData 18a7fb286470e752a903f3db2e7ab7e0d6258327
+platform/packages/apps/TimeZoneUpdater e01aa48787384a1b14b3961c64242307014f8d91
+platform/packages/apps/Traceur 9b83adde23a13cba3e82a5fbdb1121f1a6be9825
+platform/packages/apps/TvSettings a4f1526c0f954759372f513ca424c32473cc8ed9
+platform/packages/apps/UniversalMediaPlayer 7368638f3e12a5ea690d54eb5a21b5d28ba0a97b
+platform/packages/apps/WallpaperPicker facdb1c3a942593210979051cdd55a95892a8f8d
+platform/packages/apps/WallpaperPicker2 6ebdf15c178f0d6fce6d9890ec0890492663bf42
+platform/packages/inputmethods/LatinIME 4219b818c9bde70383d5fee104a67df0f4a534ee
+platform/packages/inputmethods/LeanbackIME 226823be2f3c2f84063ecec66d12f109c84a9c48
+platform/packages/modules/ArtPrebuilt 8566bd75cfa84c25ba08f58cf3fbb86ca3435284
+platform/packages/modules/CaptivePortalLogin dcd5a8190cef162e4bc11ba021dbb710fb7a374a
+platform/packages/modules/CellBroadcastService a214b672771f01aa0da7f48ff4aa922b7a6f5cdd
+platform/packages/modules/Cronet aa2dcaa988706f51ed32b38015384b9e063cb958
+platform/packages/modules/DnsResolver ed0b2293033052a35aff87a47781acc23aa66d33
+platform/packages/modules/ExtServices 527cfb50166a0a3911cf1a99eacd2168ab607e82
+platform/packages/modules/Gki f4c2d7151cb455ab15e96bd33fb48d6f03045d3a
+platform/packages/modules/IPsec 1885dec024dd902d5bffa505529d8009545a7492
 platform/packages/modules/ModuleMetadata b37f569f59a5df33940c385d264b29c45e7d2785
-platform/packages/modules/NetworkPermissionConfig 2bb38f817513cc6e368a6a5e3f66274da499b9d4
-platform/packages/modules/NetworkStack 839fe09901fb2d34dea4a07a5d2697a51b89a3aa
-platform/packages/modules/RuntimeI18n 7685d927ed8a7cb6596ba115b2d53e028885a459
-platform/packages/modules/SdkExtensions 8ccac3c7b0c7b350df9c46019fca933e7019edc1
+platform/packages/modules/NetworkPermissionConfig c9886b32210e4bb5dba3140d5dec1e8496ed84ce
+platform/packages/modules/NetworkStack 182926c6b0c5ac88e3561db9414bea3b5de0b966
+platform/packages/modules/RuntimeI18n 97340b3a606d452e0d375e82e5c27a41641bcf24
+platform/packages/modules/SdkExtensions d57c684ff137246e3179e80edd2f375d32c56c33
 platform/packages/modules/TestModule 3523a2f0f9b12d4e60374af63aae14f75a2b4c10
-platform/packages/modules/vndk 8a98accec2aaf5abbb3cd3e08c1d741712141d57
-platform/packages/providers/BlockedNumberProvider 2a04a18177692714f4b01ed00c50bfd3d92a2ae2
-platform/packages/providers/BookmarkProvider f5868c9cd61ae5ac06cba9b9d8ecd42b4993cd2d
-platform/packages/providers/CalendarProvider 9c6c04815976d72762ca99dca8262717ba758051
-platform/packages/providers/CallLogProvider edc423429801e2a8f87bd6f5a1dc64f511eaca9b
-platform/packages/providers/ContactsProvider b21367752ad48ff9d7fb1e95fa6576b2760fdca4
-platform/packages/providers/DownloadProvider de065832a3cb4e30fecaf25870fe14f9f425bad0
-platform/packages/providers/MediaProvider b28a44d989b769fa535a403be525f3c8ca891c51
+platform/packages/modules/vndk 315a4fae7243c95bd5c84d48810cc352088de591
+platform/packages/providers/BlockedNumberProvider b28e9f8592aa6bb75217eee1dcb97b853ba98561
+platform/packages/providers/BookmarkProvider ac776566d74dc56fe88421e9267e93aff402c1d3
+platform/packages/providers/CalendarProvider 2eae6b0edad007e6a0c21a8a6d68dd90985e658f
+platform/packages/providers/CallLogProvider 56e7a76918455926dd7564bb1cfffd79d01924de
+platform/packages/providers/ContactsProvider 8e55b7dd0b511ca3a9a19e2d9e9e1ca34ea0875e
+platform/packages/providers/DownloadProvider f7428b87aef77c0f754daa58443456e346e304ce
+platform/packages/providers/MediaProvider df191a83a571278e782031b0e2e4ea2b3e880035
 platform/packages/providers/PartnerBookmarksProvider a0536f962762afc202b13d923c97ece805640b9a
-platform/packages/providers/TelephonyProvider e45eaf6fc644e0256d424a017a648b361f62a95e
-platform/packages/providers/TvProvider 722ce223028c00c45532d43b8bf49303bfa7f5c7
-platform/packages/providers/UserDictionaryProvider fe2348ef18c18e075cbd57f173e466f357c5db15
-platform/packages/screensavers/Basic 304a69a215e85c0c858140b75e259f20c1b57049
-platform/packages/screensavers/PhotoTable 30b445917bead28f91889125b5e9fc357cce43c3
-platform/packages/services/AlternativeNetworkAccess fd3240a6710d1bcaae070504c53b3a59a34cead4
-platform/packages/services/BuiltInPrintService 85549b95d8a05290a6d2f495026963fd7ad2d93e
-platform/packages/services/Car a07cd8b4f4baa73c7771bd5cbcd3d82c02bdd969
-platform/packages/services/Mms 9d6250ca910540faba7b5144e3b9356fe27bdd0f
-platform/packages/services/Telecomm 47d927e1db11fccdd0199f45041e13478c3becb8
-platform/packages/services/Telephony 4f6e9b2c1ea6e00f4eb0cba7f809fa833bf5fa12
-platform/packages/wallpapers/LivePicker 5c80917526a0eae9a0a21d1925b69b6cb4e970ea
-platform/pdk 09ba3deb2cc7a002a1a12f678c36240b973040c9
-platform/platform_testing 3b772839eda55b08d1d6536abad9daf33ca41895
-platform/prebuilts/abi-dumps/ndk edab697f1f4c7065421d00f7d0f0711ed31f18f5
-platform/prebuilts/abi-dumps/platform 2d4a8dabf836d225f40f77021433fa2857c222d4
-platform/prebuilts/abi-dumps/vndk bb83887996d6d26fc82a310c991671f65dfcfa3d
-platform/prebuilts/android-emulator f3decb3218c9d561181f7a2472931cdde909c7b4
-platform/prebuilts/asuite f8e675fb09a3a6deca5485067da4e28360dc0278
-platform/prebuilts/build-tools ff85fb97c54d79b923fbf38947c7915d70f20ba1
-platform/prebuilts/bundletool 3de1ee173eedfeddfe927a7102e456d3945c8e82
-platform/prebuilts/checkcolor 14564ba8628ae1c3e0e7081effe1bb9f58f2a15a
-platform/prebuilts/checkstyle 0552fcd3fc35fb1c80a8f9a9e7871c47070804f1
-platform/prebuilts/clang-tools ffe4952cd4cbcfaff2a4a90a7b9f00cdc8105764
-platform/prebuilts/clang/host/darwin-x86 f3d20fac237b62d539570dbfbf4eb49d5e511d68
-platform/prebuilts/clang/host/linux-x86 32eeb34d6b3672f084422de573d82c1d4f59330c
-platform/prebuilts/cmdline-tools 1fd33729ab2f6214d038ec136fd1cc2234085c64
-platform/prebuilts/devtools 13049787c4f9722f5509a859df823e71307b429f
+platform/packages/providers/TelephonyProvider f6eecad92930327830cca84bb83fdc3d1f8f05a2
+platform/packages/providers/TvProvider e79ec2feb5f438893b0c554f19b348305a20159b
+platform/packages/providers/UserDictionaryProvider 0dd37f18400b53b8b612b4101e1f7199a3ad96b3
+platform/packages/screensavers/Basic 1e7a7e6e986e044c6feb1d20a4649269ca6cb970
+platform/packages/screensavers/PhotoTable b3af25a7985ad3fa11ed497e892bda866b6cd0e0
+platform/packages/services/AlternativeNetworkAccess 5f409667ed7602e6cd114a6950037f99cd35c12d
+platform/packages/services/BuiltInPrintService a78f1b969bd7ac1899bcd54fc326e954058bd4db
+platform/packages/services/Car 149735fb78a5550d9098077752496ac9b8304e7a
+platform/packages/services/Mms 7f11a90bb0a89646d9b60b4e8b8bf9667e42c311
+platform/packages/services/Mtp 2ad695e9d83329b8e20f285b35e273fb0b14cda3
+platform/packages/services/Telecomm 00a1447790f918274f784f3d0c1fc12ca9e3bd62
+platform/packages/services/Telephony 8b8447751cab091acf57d55af5ecac8dcb6a68c0
+platform/packages/wallpapers/ImageWallpaper 0a1680f07b09889c7642a775b6bb69d1b27f9b09
+platform/packages/wallpapers/LivePicker e08fd61aee7c8b39536f291419b832030ceef9e4
+platform/pdk 24cc3ee769ce149e487f893bac274992be97bcaa
+platform/platform_testing fa1d13fe6ad3c256b6191ba0eac55ff49b157aec
+platform/prebuilts/abi-dumps/ndk a135ef7c9b71eabe1528bb559d775ce9032ba665
+platform/prebuilts/abi-dumps/platform f4c398aadba7c3f7cb8b697cc819acceb171a9bd
+platform/prebuilts/abi-dumps/vndk 313c3e71f9cec0ef06599793fd4a06098c3c4dc5
+platform/prebuilts/android-emulator 02cc4388e0090f20e8cdbeea312ad88634961d4b
+platform/prebuilts/asuite 6620fffba91fc9de10f0cb36e4f1e6d9e85e01c2
+platform/prebuilts/build-tools 047a09617ee4642083a9dfc3a93451e88a63e97b
+platform/prebuilts/bundletool 3793ac92cf2078e75e908be0e849bc450ba262a5
+platform/prebuilts/checkcolor 1c614d5e37ff273df251665c985b114ae86d54da
+platform/prebuilts/checkstyle 5006398468053d9dbd3a30acf9780ae38b3a6437
+platform/prebuilts/clang-tools 28acb51045121f9b67cd3bb8fda1246f1079f2af
+platform/prebuilts/clang/host/darwin-x86 b4a35f756748bfefb4bc94a7588181a735af0dce
+platform/prebuilts/clang/host/linux-x86 b047606da557183f4247816428de1b7db5cb6d61
+platform/prebuilts/cmdline-tools 9c0f405d97989ae9b359b344feedc07a811a9b46
+platform/prebuilts/devtools e60e2ac20eeaa2eac82da9ed75579e12d91a527d
 platform/prebuilts/fuchsia_sdk 20304b0e0a0380b823a5ca910a7a0aab8a975bc7
-platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9 b95525a7cd0c6fd998101979c00325b377b80a5b
-platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.9 454619cdcd0d624e822708b3fc66d4560a17aa6c
-platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1 59b32861e075615ca64e0a098d7a2b9c63e51d17
-platform/prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.9 4aba9daf78cfbbd56ce7ef4bf90efa936a2c0fc4
-platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9 ab14fd73b8dce427a06c9d0e34cfedb0a99887cf
-platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 89751c2edfb3461387212598ce388b5e1d66fd03
-platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 04ae9167e65482affb0666e7909cb4abcd4bc5cb
-platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8 010002478e8d3c7d8480dedeac37b177ea3b14d6
-platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 34e4923728652c370b1ba6623a7f2f0f97ad7d9f
-platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9 4f8cca608e97dee67c9f39f18f81dcca3cb0ee31
-platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9 dd5f73618ceb80be5139c626bf744e6718aabbc7
-platform/prebuilts/gdb/darwin-x86 d66a079f3d076225408ed5c218354868b108375c
-platform/prebuilts/gdb/linux-x86 680898765d8aed8e48839f6573826b6b44c03580
-platform/prebuilts/go/darwin-x86 7269fa8e6938c32f30c26b8d41829c58907c8f0b
-platform/prebuilts/go/linux-x86 caca4292d574d704631c6feb2467c20e4e692e40
-platform/prebuilts/gradle-plugin b75658b280c7161c29951894cf537388b6114a06
-platform/prebuilts/jdk/jdk11 9d8790188d75f129e67024d8a1ab5408e74738cf
+platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9 44f555f919dff10bc7f0899562bcdbbc4039d7a6
+platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.9 e3b51d7c9f132758c74ea543981f0779fb771ec0
+platform/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1 a5be49675023c2cf1e24840b21001178a3a0b393
+platform/prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.9 22d3daf7da7099f04c6389034fd5195ee41db658
+platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9 6a64975a2ba91575b8d233ca277f21a441eaf796
+platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 fe07392022f15630ce943e5e7e5a583868a1c228
+platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 18fd643186e04f7402c0d66184885eace37c75d3
+platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8 682395cba6ff47880c11236b924a985b1cc4b58f
+platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 b7efb73722a551607996c06d6ca43b6350abc088
+platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9 80c5833fcb2ed16748e3e91e632eb4a2373a1911
+platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9 7fd3d4d87d72ad8d9e0c4550df2696d6021dc6c2
+platform/prebuilts/gdb/darwin-x86 a23459f98c697a74229705832c574039f633a221
+platform/prebuilts/gdb/linux-x86 cefa0269ee3a79860e3bd629edce2723fc0db43c
+platform/prebuilts/go/darwin-x86 d1a5b6f4cb9e114e0aed0a3ba66f8a5144e2f797
+platform/prebuilts/go/linux-x86 2a875b420b154479254726367fbbebdaf9c97aa5
+platform/prebuilts/gradle-plugin c8ca97e288b038c00d0b9690eca58a553142b592
+platform/prebuilts/jdk/jdk11 f6d596a4fae4a307ca2ffd730ebfa88afb4a564a
 platform/prebuilts/jdk/jdk8 ebff3bab14fad9aefec53f8c1efa436be119ee80
-platform/prebuilts/jdk/jdk9 fd1ca96f4126b57ff4ed642d84893b519df3cc13
-platform/prebuilts/ktlint 0fe8a2d4292770f067bbf436971a3304968acf59
-platform/prebuilts/manifest-merger 967d062d6be542b72e0dfe35890e2ba4abd8103f
-platform/prebuilts/maven_repo/android 7b25a08d6e627d81c62769460cd9947910b19e97
-platform/prebuilts/maven_repo/bumptech 11948421fbe8b8a74218715c77822dce97d70fb9
-platform/prebuilts/misc fba683c5f3df0405da3faa7783ea1b2141946ed8
+platform/prebuilts/jdk/jdk9 87279ac5c03bf84c9a8d36e12e9508ab2736371f
+platform/prebuilts/ktlint a22375e765615061f51397e944270fe6fe8d766c
+platform/prebuilts/manifest-merger 987c677fe046f0553f8f1fb52961ede484b97beb
+platform/prebuilts/maven_repo/android dd52ad05c8c4b1e6f8d5a4e2d20264b958eb6051
+platform/prebuilts/maven_repo/bumptech cb4805fca713f7467ec1e40eaf418cf0f4034258
+platform/prebuilts/misc a925b1d6916e649aaf4f3c97f8e6e3b645f219cc
 platform/prebuilts/module_sdk/art 0a68152386e56eab7fce3813aca01301e197b17b
-platform/prebuilts/ndk 0765528f37875c128677be03e2bbae2dfcabdc16
+platform/prebuilts/ndk 411b788e65740c25481766d09b3dc37bf7b91a5e
 platform/prebuilts/python/darwin-x86/2.7.5 0c5958b1636c47ed7c284f859c8e805fd06a0e63
 platform/prebuilts/python/linux-x86/2.7.5 93bbb3a3bd580dae06a6b90c820a90bad2395bdc
-platform/prebuilts/qemu-kernel 7eac794b9ec237c30f3424b6fdedc43c3b2b33d6
-platform/prebuilts/r8 c7974dd5c06da931ff2e87526c099fecead1de88
-platform/prebuilts/remoteexecution-client 8a269369e985a70912f1a67ff48649de1c089c36
-platform/prebuilts/rust eb9d8939a6db7f32f7833b8d3c146830e2786909
-platform/prebuilts/sdk 2536ad3094459a0d353d8b6e9ced3bfbd98e69fd
-platform/prebuilts/tools 770209d89dfb672704b37c933c042744ad7e3fa1
-platform/prebuilts/vndk/v27 e80d3e9eb1fa57e25eaa89f682e92eb8672879de
-platform/prebuilts/vndk/v28 20b09a4953aab18a7d9add47db850935b1513bf0
-platform/prebuilts/vndk/v29 023d541c76fdad896ec72cd2bbdafc558bce6f27
-platform/prebuilts/vndk/v30 fe7fcee02ad528d1480f3cc112866953bc51f080
-platform/sdk 73c94ea8ebf29f6ae2e5e613b94ab963427a6e3c
-platform/system/apex 9a3fc347ee08d0542448be0d3fa16ad969dfff5b
-platform/system/bpf b3a178a2b8d1ecca0e3fd9fb2d81d577d11d19ad
-platform/system/bpfprogs 8831a64b6c0a20cb464222c61ce3131ddf6543ff
-platform/system/bt d09553f6e4975914aa7d6f81b3e6e2ff97c08059
-platform/system/ca-certificates eeb703a1611448ce66a62ded6ff46b6c436b55d6
-platform/system/chre df81f1caa807d0b48574e3fe24e622c962eebf77
-platform/system/connectivity/wificond b051fd632d2ff47f9f3e3c5555f6a9218807f9e1
-platform/system/connectivity/wifilogd befdf9fff21286954682deedf4ca9497728514eb
-platform/system/core 0fd75a41bbf8733b6d9f55407a3b8fb2efbdfe67
-platform/system/extras eda26859dc5d5933714751b675d0f731bb35b4c0
-platform/system/gatekeeper 7b111ea0c383c5568c66379fdfec905f4c9db3d8
-platform/system/gsid 0d1e9ad613f253bd92957258eb4848558a5b1df3
-platform/system/hardware/interfaces b28f43c77ca73d15add922bf81a73e76c1ac6e2d
-platform/system/hwservicemanager 05b28f66cb1e86b69b75ed282182207ec505b5a0
-platform/system/incremental_delivery ca675c735d0cc1852a73a4933d5beeb785019ee6
-platform/system/iorap 8c602f4192877e6903c6150c7f60850f6e3ae1a8
-platform/system/keymaster 9c82b3843534c8c54246e110db0d6b3252a54a59
-platform/system/libartpalette bb6c111f4f46ba931d16597314c09e440290bb11
-platform/system/libbase 0d81d48a633f2679b5614f6c76133ef8aaaeb99e
-platform/system/libfmq 21caf53b1dee1368eb3fa36f41419fe1993800e7
-platform/system/libhidl 1a09a1f5d9ddea23d3123725259f1fb00e42d71e
-platform/system/libhwbinder 0d81e73e26d761c4858f6130bcfd9cdc2271099a
-platform/system/libsysprop e15deb4176384394ffeda20805a27103ae11c53d
-platform/system/libufdt 9da73eb3f295e8a5a5004077138509fe48ba2962
-platform/system/libvintf ab243da66abf76eec9a77f7fc4c5456a52212dde
-platform/system/libziparchive 990f7cb871d70c77f1c92bec179da86332d8b7fc
-platform/system/linkerconfig ce5ce066244cf4f6c27ae8713e14d12b7a5b2e6c
-platform/system/media fb4ddbfb855eb4f13eb1454bebc06fc3150ea394
-platform/system/memory/libdmabufheap 4632599bc1524a08cc2d947e205107b9da1bf086
-platform/system/memory/libion 56255086af0258150a3451de99192ed46095dc34
-platform/system/memory/libmeminfo 287c1dcf1dcb793032f68340883551a0c9847a90
-platform/system/memory/libmemtrack 839323878b7bfdd5e33f65dd92e9bb5575e572b5
-platform/system/memory/libmemunreachable 5977ec023097a78ae2bca1722bcd3f7cf3d9b45f
-platform/system/memory/lmkd 4cb44926b16ad5a71dedf7b1e152141122e44508
-platform/system/netd 7f975bb6445b6307df3ae7352af07c86249322e3
-platform/system/nfc fea01d1f1affff66f20c600ba79b0bc593118d4a
-platform/system/nvram f9fb6faa887385d69e7b02d5bf13686cc3e9cbd7
-platform/system/security 7daaee7dae214c3a28e29a2800775e6c851ef151
-platform/system/sepolicy a85f1ecc9deb523a9ed6c326ce6ec04189d05c11
-platform/system/server_configurable_flags 4aa283de9fd14c204e4b962af8a552d30187ffe2
-platform/system/teeui 76ce0d464161148fe2fbb2475e0b6be9a4cbf42b
-platform/system/testing/gtest_extras c4a97821748b830af8a85e61bc470f38b41e1a66
-platform/system/timezone d364aaa5a80da74ff9042c389cfdfdd07835e477
-platform/system/tools/aidl a5fd2935094c35521a69d7fa38e6e734d9a10333
-platform/system/tools/hidl e11f50441636cfcfdeee414843d14a690c484596
-platform/system/tools/mkbootimg 6d3a4c0f856f1cdc9cb35641620d495b1f247f85
-platform/system/tools/sysprop 678abfc9dd7a4fd707e9511236ddf926a9fb03ac
-platform/system/tools/xsdc d220de7036b8ab17f79e7efa58c8814c5c6d4873
-platform/system/update_engine 3ec1be922ae6ac2f757efb4a7d2953cc03fa0caf
-platform/system/vold 06b1686af697c07b6219fc5bfba043ec24fb5352
-platform/test/app_compat/csuite a82698d20c210475ffbb9add00cc8502dc012abc
-platform/test/framework 6b4469cb3931b91e8fdce0ed3c4d77b5e6b346d9
-platform/test/mlts/benchmark 2fd775f1107d5b0871685077dbed9c691dbdc4b9
-platform/test/mlts/models 420391aec9319a5668f6c9a8c962e185402bfbb0
-platform/test/mts e42435542c719650d5ca5959dac300d53f572200
-platform/test/suite_harness 8f4998e452e97a0fc4acd06989bbb3d24798588d
+platform/prebuilts/qemu-kernel 75b4d2ebb1a8effde359b76bdca84728836da6b4
+platform/prebuilts/r8 43ba0c802aee6b29486e118b255665aa26970836
+platform/prebuilts/remoteexecution-client 5652e973325e1be3472c2a55e66a937747573917
+platform/prebuilts/rust daef9702c50c2f08910cdbe1eb272331785f56ce
+platform/prebuilts/sdk db69493bf14cd10adf995a50b8e4be0163e92fa8
+platform/prebuilts/tools fdbf98b0a38e23927379c49680041fd8b549aace
+platform/prebuilts/vndk/v27 50c56e6529151c44eefe125771134cd05845d111
+platform/prebuilts/vndk/v28 3aebf27c86358b93c1e47762853ac168ff66e58f
+platform/prebuilts/vndk/v29 a04fd6962c06673dddb2996ab912eaf9e5257d6b
+platform/prebuilts/vndk/v30 59725d212e1c7a8e023126cc0fa14ec3c9946082
+platform/sdk 784887dc5b11935ce7ac209c7faa740e437b3188
+platform/system/apex 07190a2242d0776942bc995130ed47ac47429fcb
+platform/system/bpf 81edd7fbfbc2b6fb691425db1e28690ee98fd9da
+platform/system/bpfprogs e273e2111297ea9bc30680662e986a118e703868
+platform/system/bt 91ad95c73e90d5171349f624224b7a3a01c07a9c
+platform/system/ca-certificates bb64e2f696ef82fa82dbd0fe2c301ea3bf441ea8
+platform/system/chre 30c1a566fbb3b5cbeadeee0e150db37e293a1244
+platform/system/connectivity/wificond 6738732e77132c626e40d779732e7e34c6eebc41
+platform/system/connectivity/wifilogd e2d11d222e74bd0e3db1c61e1a142bb777689c43
+platform/system/core 42bd7145cd6a61f7b90a957ea6843e1005ddd8af
+platform/system/extras 83c55b4ee60cfed0559d802f1a98bbb42a7c7a7b
+platform/system/gatekeeper aeb0545fb655663a9826fa7a1356a85c0ff8a4c0
+platform/system/gsid 4b52581450df929bc2638243cba6f0456d0c3270
+platform/system/hardware/interfaces db1cfdb5c55370325cabe30bcc7dc7e2840069e0
+platform/system/hwservicemanager 4240d595bfebbf8a13835b7a7032bb9f42660712
+platform/system/incremental_delivery f72537943743792c06d6cb39f346dc962f8def4b
+platform/system/iorap 973239567fa299ecdea5e223dd1d1d45caf0a559
+platform/system/keymaster e73cf1ee48fe4449b54763f070e63a59e534a76d
+platform/system/libartpalette 58ff2eeaa72dedacd5550fa44ee20f5dedf915c0
+platform/system/libbase b5d1896438d1587114e7a686f64103a7979ab275
+platform/system/libfmq 0a10edc0cc983531d0d9de03cb33b65a0c772f48
+platform/system/libhidl b0c8d4171f7be9d6fc2d0984ca68b99a32478dbc
+platform/system/libhwbinder ff5872b50a6c31622651911ed924366910d3cd9e
+platform/system/libsysprop 258d2b34a7352a77b5d74935dc7c5e8cd6a84948
+platform/system/libufdt aa82f362bb437eb104385b1f2ca096aea5f899be
+platform/system/libvintf ba2055285ad9f4529b8c6bc93033784af5a54cf3
+platform/system/libziparchive c68b59176eb10d000b5fdde73aaab68b64323d3b
+platform/system/linkerconfig ab925fddba98f96a8f1e9f37e8762f903fbcfa61
+platform/system/media 10a1720d048f05e31b7ab831ed3aacae344c0c3c
+platform/system/memory/libdmabufheap 432d4aafb2be05d64335750bc10f7c56f9819083
+platform/system/memory/libion 0bff4b2e0df391caf4c501252f517d82e9fe305a
+platform/system/memory/libmeminfo cbb80979da36e2e09adf2597f9f520b8ab9e60b9
+platform/system/memory/libmemtrack 0e22cc82bdbb3432777c9f0713d5f9b59b9884ad
+platform/system/memory/libmemunreachable 74efd810f4e72e33f34943b826e69b39ccf4ef06
+platform/system/memory/lmkd e9990d794b1846839eac31d8a8013fe30bfd998a
+platform/system/netd 6a4fdda568ed1f6c34e7043203f6d7689b5e0ae2
+platform/system/nfc 8a4dd919601827808b8fcdc4b3f1ec791324443e
+platform/system/nvram 92934b0c8bccd9381f7142e558dd3c6f84454dcf
+platform/system/security 692a26a15d6312a0673372bee8aa168384887f09
+platform/system/sepolicy fb49ab202c5cf74ba8afa326de14c6488d8808a6
+platform/system/server_configurable_flags 7dbf3843453ebd5eba07408f808dde4734474703
+platform/system/teeui 2b5bdd960b6d599b69a40b317aa22e9cd24d4d82
+platform/system/testing/gtest_extras 9e88ef37cf522248becbf5aeeb704fbd942cb7dc
+platform/system/timezone 6c543c297791d941a451ea76224733c1f7319355
+platform/system/tools/aidl c82649b04bc3e8f18c4011c8d02decc88b3d4f10
+platform/system/tools/hidl ee18c00cba0b591106b65955fc5c94ecd7b83ec9
+platform/system/tools/mkbootimg 90dc7bcd8995ea7ea1348bfc34e2192554fba511
+platform/system/tools/sysprop 8753a08c4bc986104090fee747291c2608c16c76
+platform/system/tools/xsdc 9fc228ddb6c11be9847538fab7bd0b5e340bcb80
+platform/system/update_engine bfb1a7493683639cd29a83122143700cf031c2e2
+platform/system/vold 6d3b117d1e26a7c8a4344bffeb9636b9e8e058f8
+platform/test/app_compat/csuite ef78f97ba293591bd52ebba4502167be50c4249a
+platform/test/framework 1fa695b61aca56db8b75ace1058a5cdba4e3d24f
+platform/test/mlts/benchmark 9d8ebde36ed8e11f63e722afe7591fe1cc733e50
+platform/test/mlts/models 0399c2f4663943dd3ffac7fe9e6ba26fe9c343c0
+platform/test/mts 1a2869906a91fa5b0abe58c5380db583404485e5
+platform/test/suite_harness 5525a39cb80afc08a8d05615adda0c6ce08788bc
 platform/test/vti/dashboard 9f2c217836240213fdc9c38fb8e4ed60dca7508d
 platform/test/vti/fuzz_test_serving 92bbe4107e18344e675d200955112f647262fbc9
-platform/test/vti/test_serving ca189bfae9340fbaa053164ef880d4731748dcfa
-platform/test/vts 4785a38cf9a32e5588cd0cb4472dd0f0c0f327c1
-platform/test/vts-testcase/fuzz c01aa525c9e1fc086d7353c0d090dc2ade9b1929
-platform/test/vts-testcase/hal 3c09b6b91cf7058dd33da0d1cf42f0a003cf7f4e
+platform/test/vti/test_serving cc0603ede69819ef3bf8492908618a107923ef18
+platform/test/vts 565eec4c811dd3d2acda611619774eb06e4394b4
+platform/test/vts-testcase/fuzz 749b4eeeeef968ef530dbcd33145d779981a063f
+platform/test/vts-testcase/hal 7ed096e8a00b817edcef01e7ecb35a900e850a3b
 platform/test/vts-testcase/hal-trace 3782d14cb8ca24996b199e175525eeea47758632
-platform/test/vts-testcase/kernel d1e5fb42ac0dc7e8949abc76701e29e34e0d2fdc
+platform/test/vts-testcase/kernel c8d34da070a6651613549de70cd544be2602e500
 platform/test/vts-testcase/nbu 3539c326022330465e5ba2f1c4a4b31559457a87
 platform/test/vts-testcase/performance 6dc641f76d5f74c6483fdc322607601f0893ada0
-platform/test/vts-testcase/security 094050b5720a2c9962e05d67f3e66cf4ab184cfb
-platform/test/vts-testcase/vndk 72bef5b6d3f46eb29c00531aa4cca5c86d2b7f71
-platform/tools/acloud 48ea231c7bdf6243c75d16d27fdab71d98e6c53a
+platform/test/vts-testcase/security d10a405dc3789bd9e688efd51620f260f72e17de
+platform/test/vts-testcase/vndk f3d6b93a16527a9844e94b623ad18423d77f3e5e
+platform/tools/acloud cf4379018290463c4c3d4ee362ea548691033246
 platform/tools/adt/idea 02ea205354eee5ce730a544f812753316782e87c
-platform/tools/apifinder 804b91c703e5630bfc1fc6f8faef31557e718649
-platform/tools/apksig 7044ebae7833f09bd5830a6445ac085ca5b61eb9
-platform/tools/apkzlib 54dd1c459f2aee7116a70b1d64a2cd98c39ef57c
-platform/tools/asuite 396511bedbece09d43ef62f5ab7e7047a216e479
-platform/tools/base 852373a4da2b305b47485242393a292bf9ae2d00
-platform/tools/build a1302d446c227add1e4e762894469c627b3a7610
-platform/tools/currysrc 51e6a8d5824b67daa4c820a4471363ca07915259
-platform/tools/dexter f2835c4445657c50540b68d5f8a4df38c2cf1a97
-platform/tools/doc_generation 87fc1dfc54e040273cb46a1ac09ab9cd74adfa47
-platform/tools/external/fat32lib 30a9479da5cb76211a9c8268d6d570f6f199856f
-platform/tools/external_updater 4595d1726dabac9f6d27a558566df6ec5fb9438e
+platform/tools/apifinder aa549a367e668dca40afa4928f060b91550bdf4e
+platform/tools/apksig 0f46cdc826fb2b53df2dc63dbd05b4b16303d26f
+platform/tools/apkzlib ce27bf835057fd81a3ffeaec0e0541d597eb1a72
+platform/tools/asuite 31ac693dfccf93dea67f338d819c21a9beacb76c
+platform/tools/base 05590cea66d0c1031d50418d41c8c2b3ea904bb3
+platform/tools/build 6b1bb180690cf463f31b6c1dd0a92e704713bb5d
+platform/tools/carrier_settings d5df5059aa81adeafc29a397beeeaedb00ac38a4
+platform/tools/currysrc 18b741dce70a36082a954e0ad6dac85a7ccd8b90
+platform/tools/dexter 7c0ba60533e23b2c95500547611c551bc3073426
+platform/tools/doc_generation fc76ea841087a21954034c2447f0571658e6d12b
+platform/tools/external/fat32lib 76976c880303bb3a9b571dea92c1052851db9657
+platform/tools/external_updater 9a914fe0e767691de4025d939fabbe4fb873cfec
 platform/tools/idea 9b5d02ac8c92b1e71523cc15cb3d168d57fbd898
-platform/tools/loganalysis ae42e327c8627a6fdc85feddd97a4a4024540c38
-platform/tools/metalava c5c807fe244a52083492a969fd3256cb4bedaaaf
+platform/tools/loganalysis 6c308bfcd9ffceb8115260d3423de5c7487bb716
+platform/tools/metalava ff7dc60832318867d1f3187b8dc1dda9460ab377
 platform/tools/motodev 69989786cefbde82527960a1e100ec9afba46a98
-platform/tools/repohooks f4d46179e6c44fa858e7ec6cdde62f0ec77a5b30
-platform/tools/security 43bf211a0b29da58389aa9360f03836be5093739
+platform/tools/ndkports 9cbe542a21e2074077f6dee8d430cdbcfefc1ee7
+platform/tools/repohooks 4aa54893178f58d2ece67ce0adb4cee933b23f39
+platform/tools/security e1d3bb4a8984d5771ed6797b0740341f5fed3e74
 platform/tools/studio/cloud 58f06e77e051fff3903adabca7acdaa9dd12ec2d
 platform/tools/swt 8996e71047a2bd11efee46ef14e02435ab5fa07a
-platform/tools/test/connectivity 4b56d6f8a96050bc7dc7831095ae6033d3b6e450
-platform/tools/test/graphicsbenchmark c0f44058ba519902d378c297fa952e672ada0334
-platform/tools/tradefederation 4b3874b0b66b9e26f9c9eb6049023409a3d73152
-platform/tools/tradefederation/contrib 8872765a4a42308a57a9664f719955236bc8bcdd
-platform/tools/treble e00d4cac79d582ec1cc2261b4e95cbeada5a3330
-platform/tools/trebuchet c07b1561b22668956448c276652bbb4be991e08d
-toolchain/benchmark 703693a4286c8dede6442f0feaf871fcb171eba3
-toolchain/pgo-profiles b085fed73a6606265d74da4cc9784bea78924fec
-tools/platform-compat ebea8283a2bfc6a178250277267cf1d6b7a1af4f
+platform/tools/test/connectivity 406248495cbb7c13554c64852d44bd1480382f09
+platform/tools/test/graphicsbenchmark 916c73de40b3982918fbb92a5b687bf6d138cc67
+platform/tools/test/openhst 12eca1bb79b84e4ae80f31a8a84a307ecdcfe372
+platform/tools/tradefederation ad55088cc0d780443910930e34f4af157d3cd0d5
+platform/tools/tradefederation/contrib a4523b579a1565af69fdc584505e4ce37bc98552
+platform/tools/treble 90765aa406e8cefcdb1f7f8f7040c68254714722
+platform/tools/trebuchet cd4942d71cbcc3ac117d71c9680ddd0a72d7ef1c
+toolchain/benchmark aa314a18a332cc3dbcba3c21fe013cc6d9d796b6
+toolchain/pgo-profiles f7cb89f44f758510b238f5530cbfc733974914d5
+tools/platform-compat 518ff60f50997e269b488c47bd1e5907339abccc
diff --git a/report.py b/report.py
index ae99e25..f453d56 100755
--- a/report.py
+++ b/report.py
@@ -192,8 +192,8 @@
 
   """A window used to display report file."""
 
-  def __init__(self, master, report_context, title_line, report_items):
-    frame = Frame(master)
+  def __init__(self, main, report_context, title_line, report_items):
+    frame = Frame(main)
     frame.pack(fill=BOTH, expand=1)
 
     font = Font(family='courier', size=12)
diff --git a/simpleperf_report_lib.py b/simpleperf_report_lib.py
index 3e677be..2b99602 100644
--- a/simpleperf_report_lib.py
+++ b/simpleperf_report_lib.py
@@ -83,12 +83,14 @@
        elem_size: size of the element type.
        elem_count: the number of elements in this field, more than one if the field is an array.
        is_signed: whether the element type is signed or unsigned.
+       is_dynamic: whether the element is a dynamic string.
     """
     _fields_ = [('_name', ct.c_char_p),
                 ('offset', ct.c_uint32),
                 ('elem_size', ct.c_uint32),
                 ('elem_count', ct.c_uint32),
-                ('is_signed', ct.c_uint32)]
+                ('is_signed', ct.c_uint32),
+                ('is_dynamic', ct.c_uint32)]
 
     _unpack_key_dict = {1: 'b', 2: 'h', 4: 'i', 8: 'q'}
 
@@ -102,8 +104,16 @@
             an array of int values, etc. If the type can't be parsed, return a byte array or an
             array of byte arrays.
         """
-        if self.elem_count > 1 and self.elem_size == 1 and self.is_signed == 0:
-            # The field is a string.
+        if self.is_dynamic:
+            offset, max_len = struct.unpack('<HH', data[self.offset:self.offset + 4])
+            length = 0
+            while length < max_len and bytes_to_str(data[offset + length]) != '\x00':
+                length += 1
+            return bytes_to_str(data[offset: offset + length])
+
+        if self.elem_count > 1 and self.elem_size == 1:
+            # Probably the field is a string.
+            # Don't use self.is_signed, which has different values on x86 and arm.
             length = 0
             while length < self.elem_count and bytes_to_str(data[self.offset + length]) != '\x00':
                 length += 1
diff --git a/test.py b/test.py
index 43966f0..d39dd2d 100755
--- a/test.py
+++ b/test.py
@@ -72,20 +72,15 @@
 INFERNO_SCRIPT = os.path.join(get_script_dir(), "inferno.bat" if is_windows() else "./inferno.sh")
 
 
-class TestLogger(object):
+class TestLogger:
     """ Write test progress in sys.stderr and keep verbose log in log file. """
     def __init__(self):
-        self.log_file = self.get_log_file(3 if is_python3() else 2)
-        if os.path.isfile(self.log_file):
-            remove(self.log_file)
+        self.log_file = 'test.log'
+        remove(self.log_file)
         # Logs can come from multiple processes. So use append mode to avoid overwrite.
         self.log_fh = open(self.log_file, 'a')
         logging.basicConfig(filename=self.log_file)
 
-    @staticmethod
-    def get_log_file(python_version):
-        return 'test_python_%d.log' % python_version
-
     def writeln(self, s):
         return self.write(s + '\n')
 
@@ -102,24 +97,19 @@
 TEST_LOGGER = TestLogger()
 
 
-class TestHelper(object):
+class TestHelper:
     """ Keep global test info. """
 
     def __init__(self):
-        self.python_version = 3 if is_python3() else 2
-        self.repeat_count = 0
         self.script_dir = os.path.abspath(get_script_dir())
         self.cur_dir = os.getcwd()
         self.testdata_dir = os.path.join(self.cur_dir, 'testdata')
-        self.test_base_dir = self.get_test_base_dir(self.python_version)
+        self.test_base_dir = os.path.join(self.cur_dir, 'test_results')
         self.adb = AdbHelper(enable_switch_to_root=True)
         self.android_version = self.adb.get_android_version()
         self.device_features = None
         self.browser_option = []
-
-    def get_test_base_dir(self, python_version):
-        """ Return the dir of generated data for a python version. """
-        return os.path.join(self.cur_dir, 'test_python_%d' % python_version)
+        self.progress_fh = None
 
     def testdata_path(self, testdata_name):
         """ Return the path of a test data. """
@@ -127,8 +117,7 @@
 
     def test_dir(self, test_name):
         """ Return the dir to run a test. """
-        return os.path.join(
-            self.test_base_dir, 'repeat_%d' % TEST_HELPER.repeat_count, test_name)
+        return os.path.join(self.test_base_dir, test_name)
 
     def script_path(self, script_name):
         """ Return the dir of python scripts. """
@@ -176,6 +165,11 @@
     def get_32bit_abi(self):
         return self.adb.get_property('ro.product.cpu.abilist32').strip().split(',')[0]
 
+    def write_progress(self, progress):
+        if self.progress_fh:
+            self.progress_fh.write(progress + '\n')
+            self.progress_fh.flush()
+
 
 TEST_HELPER = TestHelper()
 
@@ -186,23 +180,65 @@
         self.test_dir = TEST_HELPER.test_dir('%s.%s' % (
             self.__class__.__name__, self._testMethodName))
         os.makedirs(self.test_dir)
+        self.saved_cwd = os.getcwd()
         os.chdir(self.test_dir)
+        TEST_LOGGER.writeln('begin test %s.%s' % (self.__class__.__name__, self._testMethodName))
+        self.start_time = time.time()
 
-    def run_cmd(self, args, return_output=False):
+
+    def run(self, result=None):
+        ret = super(TestBase, self).run(result)
+        if result.errors and result.errors[-1][0] == self:
+            status = 'FAILED'
+            err_info = result.errors[-1][1]
+        elif result.failures and result.failures[-1][0] == self:
+            status = 'FAILED'
+            err_info = result.failures[-1][1]
+        else:
+            status = 'OK'
+
+        time_taken = time.time() - self.start_time
+        TEST_LOGGER.writeln(
+            'end test %s.%s %s (%.3fs)' %
+            (self.__class__.__name__, self._testMethodName, status, time_taken))
+        if status != 'OK':
+            TEST_LOGGER.writeln(err_info)
+
+        # Remove test data for passed tests to save space.
+        os.chdir(self.saved_cwd)
+        if status == 'OK':
+            shutil.rmtree(self.test_dir)
+        TEST_HELPER.write_progress(
+            '%s.%s  %s' % (self.__class__.__name__, self._testMethodName, status))
+        return ret
+
+    def run_cmd(self, args, return_output=False, drop_output=True):
         if args[0] == 'report_html.py' or args[0] == INFERNO_SCRIPT:
             args += TEST_HELPER.browser_option
         if args[0].endswith('.py'):
             args = [sys.executable, TEST_HELPER.script_path(args[0])] + args[1:]
         use_shell = args[0].endswith('.bat')
         try:
-            if not return_output:
-                returncode = subprocess.call(args, shell=use_shell, stderr=TEST_LOGGER.log_fh)
+            if return_output:
+                stdout_fd = subprocess.PIPE
+                drop_output = False
+            elif drop_output:
+                if is_python3():
+                    stdout_fd = subprocess.DEVNULL
+                else:
+                    stdout_fd = open(os.devnull, 'w')
             else:
-                subproc = subprocess.Popen(args, stdout=subprocess.PIPE,
-                                           stderr=TEST_LOGGER.log_fh, shell=use_shell)
-                (output_data, _) = subproc.communicate()
-                output_data = bytes_to_str(output_data)
-                returncode = subproc.returncode
+                stdout_fd = None
+
+            subproc = subprocess.Popen(args, stdout=stdout_fd,
+                                       stderr=TEST_LOGGER.log_fh, shell=use_shell)
+            stdout_data, _ = subproc.communicate()
+            output_data = bytes_to_str(stdout_data)
+            returncode = subproc.returncode
+
+            if drop_output and not is_python3():
+                stdout_fd.close()
+
         except OSError:
             returncode = None
         self.assertEqual(returncode, 0, msg="failed to run cmd: %s" % args)
@@ -222,8 +258,17 @@
             self.assertTrue(os.path.isdir(dirname), dirname)
 
     def check_strings_in_content(self, content, strings):
-        for s in strings:
-            self.assertNotEqual(content.find(s), -1, "s: %s, content: %s" % (s, content))
+        fulfilled = [content.find(s) != -1 for s in strings]
+        self.check_fulfilled_entries(fulfilled, strings)
+
+    def check_fulfilled_entries(self, fulfilled, entries):
+        failed_entries = []
+        for ok, entry in zip(fulfilled, entries):
+            if not ok:
+                failed_entries.append(entry)
+
+        if failed_entries:
+            self.fail('failed in below entries: %s' % (failed_entries,))
 
 
 class TestExampleBase(TestBase):
@@ -269,9 +314,14 @@
             os.makedirs(self.testcase_dir)
             os.chdir(self.testcase_dir)
             self.run_app_profiler(compile_java_code=self.use_compiled_java_code)
-        remove(self.test_dir)
-        shutil.copytree(self.testcase_dir, self.test_dir)
-        os.chdir(self.test_dir)
+            os.chdir(self.test_dir)
+
+        for name in os.listdir(self.testcase_dir):
+            path = os.path.join(self.testcase_dir, name)
+            if os.path.isfile(path):
+                shutil.copy(path, self.test_dir)
+            elif os.path.isdir(path):
+                shutil.copytree(path, os.path.join(self.test_dir, name))
 
     def run(self, result=None):
         self.__class__.test_result = result
@@ -321,7 +371,8 @@
                         period = float(m.group(2))
                         if acc_period >= need_acc_period and period >= need_period:
                             fulfilled[i] = True
-        self.assertEqual(len(fulfilled), sum([int(x) for x in fulfilled]), fulfilled)
+
+        self.check_fulfilled_entries(fulfilled, check_entries)
 
     def check_inferno_report_html(self, check_entries, filename="report.html"):
         self.check_exist(filename=filename)
@@ -337,7 +388,7 @@
                 if m and float(m.group(1)) >= entry[1]:
                     fulfilled[i] = True
                     break
-        self.assertEqual(fulfilled, [True for _ in check_entries])
+        self.check_fulfilled_entries(fulfilled, check_entries)
 
     def common_test_app_profiler(self):
         self.run_cmd(["app_profiler.py", "-h"])
@@ -552,6 +603,10 @@
                       self.package_name, '--size_limit', '1M'])
         self.adb.check_run(['kill-server'])
         time.sleep(3)
+        # Start adb process outside self.test_dir. Because it will be removed after testing.
+        os.chdir(self.saved_cwd)
+        self.adb.check_run(['devices'])
+        os.chdir(self.test_dir)
         self.run_cmd(['run_simpleperf_without_usb_connection.py', 'stop'])
         self.check_exist(filename="perf.data")
         self.run_cmd(["report.py", "-g", "-o", "report.txt"])
@@ -1043,6 +1098,20 @@
         report_lib.MergeJavaMethods(False)
         self.assertEqual(parse_dso_names(report_lib), (True, False))
 
+    def test_jited_java_methods(self):
+        report_lib = ReportLib()
+        report_lib.SetRecordFile(TEST_HELPER.testdata_path('perf_with_jit_symbol.data'))
+        has_jit_cache = False
+        while report_lib.GetNextSample():
+            if report_lib.GetSymbolOfCurrentSample().dso_name == '[JIT app cache]':
+                has_jit_cache = True
+            callchain = report_lib.GetCallChainOfCurrentSample()
+            for i in range(callchain.nr):
+                if callchain.entries[i].symbol.dso_name == '[JIT app cache]':
+                    has_jit_cache = True
+        report_lib.Close()
+        self.assertTrue(has_jit_cache)
+
     def test_tracing_data(self):
         self.report_lib.SetRecordFile(TEST_HELPER.testdata_path('perf_with_tracepoint_event.data'))
         has_tracing_data = False
@@ -1059,6 +1128,22 @@
                 self.assertIsNone(tracing_data)
         self.assertTrue(has_tracing_data)
 
+    def test_dynamic_field_in_tracing_data(self):
+        self.report_lib.SetRecordFile(TEST_HELPER.testdata_path(
+            'perf_with_tracepoint_event_dynamic_field.data'))
+        has_dynamic_field = False
+        while self.report_lib.GetNextSample():
+            event = self.report_lib.GetEventOfCurrentSample()
+            tracing_data = self.report_lib.GetTracingDataOfCurrentSample()
+            if event.name == 'kprobes:myopen':
+                self.assertIsNotNone(tracing_data)
+                self.assertIn('name', tracing_data)
+                if tracing_data['name'] == '/sys/kernel/debug/tracing/events/kprobes/myopen/format':
+                    has_dynamic_field = True
+            else:
+                self.assertIsNone(tracing_data)
+        self.assertTrue(has_dynamic_field)
+
 
 class TestRunSimpleperfOnDevice(TestBase):
     def test_smoke(self):
@@ -1148,7 +1233,7 @@
         addr2line.convert_addrs_to_lines()
         for dso_path in test_map:
             dso = addr2line.get_dso(dso_path)
-            self.assertTrue(dso is not None)
+            self.assertIsNotNone(dso, dso_path)
             test_addrs = test_map[dso_path]
             for test_addr in test_addrs:
                 expected_files = []
@@ -1162,15 +1247,23 @@
                     expected_functions.append(line.strip())
                 self.assertEqual(len(expected_files), len(expected_functions))
 
+                if with_function_name:
+                    expected_source = list(zip(expected_files, expected_lines, expected_functions))
+                else:
+                    expected_source = list(zip(expected_files, expected_lines))
+
                 actual_source = addr2line.get_addr_source(dso, test_addr['addr'])
-                self.assertTrue(actual_source is not None)
-                self.assertEqual(len(actual_source), len(expected_files))
-                for i, source in enumerate(actual_source):
-                    self.assertEqual(len(source), 3 if with_function_name else 2)
-                    self.assertEqual(source[0], expected_files[i])
-                    self.assertEqual(source[1], expected_lines[i])
-                    if with_function_name:
-                        self.assertEqual(source[2], expected_functions[i])
+                if is_windows():
+                    self.assertIsNotNone(actual_source, 'for %s:0x%x' %
+                                         (dso_path, test_addr['addr']))
+                    for i, source in enumerate(actual_source):
+                        new_source = list(source)
+                        new_source[0] = new_source[0].replace('\\', '/')
+                        actual_source[i] = tuple(new_source)
+
+                self.assertEqual(actual_source, expected_source,
+                                 'for %s:0x%x, expected source %s, actual source %s' %
+                                 (dso_path, test_addr['addr'], expected_source, actual_source))
 
     def test_objdump(self):
         binary_cache_path = TEST_HELPER.testdata_dir
@@ -1216,11 +1309,13 @@
         for dso_path in test_map:
             dso = test_map[dso_path]
             dso_info = objdump.get_dso_info(dso_path)
-            self.assertIsNotNone(dso_info)
+            self.assertIsNotNone(dso_info, dso_path)
             disassemble_code = objdump.disassemble_code(dso_info, dso['start_addr'], dso['len'])
-            self.assertTrue(disassemble_code)
+            self.assertTrue(disassemble_code, dso_path)
             for item in dso['expected_items']:
-                self.assertTrue(item in disassemble_code)
+                self.assertIn(
+                    item, disassemble_code, 'for %s: %s not found %s' %
+                    (dso_path, item, disassemble_code))
 
     def test_readelf(self):
         test_map = {
@@ -1253,9 +1348,9 @@
             path = os.path.join(TEST_HELPER.testdata_dir, dso_path)
             self.assertEqual(dso_info['arch'], readelf.get_arch(path))
             if 'build_id' in dso_info:
-                self.assertEqual(dso_info['build_id'], readelf.get_build_id(path))
+                self.assertEqual(dso_info['build_id'], readelf.get_build_id(path), dso_path)
             if 'sections' in dso_info:
-                self.assertEqual(dso_info['sections'], readelf.get_sections(path))
+                self.assertEqual(dso_info['sections'], readelf.get_sections(path), dso_path)
         self.assertEqual(readelf.get_arch('not_exist_file'), 'unknown')
         self.assertEqual(readelf.get_build_id('not_exist_file'), '')
         self.assertEqual(readelf.get_sections('not_exist_file'), [])
@@ -1668,6 +1763,7 @@
         super(TestRecordingRealApps, self).tearDown()
 
     def install_apk(self, apk_path, package_name):
+        self.adb.run(['uninstall', package_name])
         self.adb.run(['install', '-t', apk_path])
         self.installed_packages.append(package_name)
 
@@ -1715,31 +1811,22 @@
     return sorted(tests)
 
 
-def run_tests(tests, repeats):
+def run_tests(tests):
     TEST_HELPER.build_testdata()
     argv = [sys.argv[0]] + tests
-    test_runner = unittest.TextTestRunner(stream=TEST_LOGGER, verbosity=2)
-    success = True
-    for repeat in range(1, repeats + 1):
-        print('Run tests with python %d for %dth time\n%s' % (
-            TEST_HELPER.python_version, repeat, '\n'.join(tests)), file=TEST_LOGGER)
-        TEST_HELPER.repeat_count = repeat
-        test_program = unittest.main(argv=argv, testRunner=test_runner, exit=False)
-        if not test_program.result.wasSuccessful():
-            success = False
-    return success
+    test_runner = unittest.TextTestRunner(stream=TEST_LOGGER, verbosity=0)
+    test_program = unittest.main(argv=argv, testRunner=test_runner, exit=False, verbosity=0)
+    result = test_program.result.wasSuccessful()
+    remove(TEST_HELPER.testdata_dir)
+    return result
 
 
 def main():
     parser = argparse.ArgumentParser(description='Test simpleperf scripts')
     parser.add_argument('--list-tests', action='store_true', help='List all tests.')
     parser.add_argument('--test-from', nargs=1, help='Run left tests from the selected test.')
-    parser.add_argument('--python-version', choices=['2', '3', 'both'], default='both', help="""
-                        Run tests on which python versions.""")
-    parser.add_argument('--repeat', type=int, nargs=1, default=[1], help='run test multiple times')
-    parser.add_argument('--no-test-result', dest='report_test_result',
-                        action='store_false', help="Don't report test result.")
     parser.add_argument('--browser', action='store_true', help='pop report html file in browser.')
+    parser.add_argument('--progress-file', help='write test progress file')
     parser.add_argument('pattern', nargs='*', help='Run tests matching the selected pattern.')
     args = parser.parse_args()
     tests = get_all_tests()
@@ -1763,37 +1850,19 @@
         print("Skip tests on Android version < N.", file=TEST_LOGGER)
         return False
 
-    if args.python_version == 'both':
-        python_versions = [2, 3]
-    else:
-        python_versions = [int(args.python_version)]
-
-    for python_version in python_versions:
-        remove(TEST_HELPER.get_test_base_dir(python_version))
+    remove(TEST_HELPER.test_base_dir)
 
     if not args.browser:
         TEST_HELPER.browser_option = ['--no_browser']
 
-    test_results = []
-    for version in python_versions:
-        os.chdir(TEST_HELPER.cur_dir)
-        if version == TEST_HELPER.python_version:
-            test_result = run_tests(tests, args.repeat[0])
-        else:
-            argv = ['python3' if version == 3 else 'python']
-            argv.append(TEST_HELPER.script_path('test.py'))
-            argv += sys.argv[1:]
-            argv += ['--python-version', str(version), '--no-test-result']
-            test_result = subprocess.call(argv) == 0
-        test_results.append(test_result)
+    if args.progress_file:
+        TEST_HELPER.progress_fh = open(args.progress_file, 'w')
 
-    if args.report_test_result:
-        for version, test_result in zip(python_versions, test_results):
-            if not test_result:
-                print('Tests with python %d failed, see %s for details.' %
-                      (version, TEST_LOGGER.get_log_file(version)), file=TEST_LOGGER)
-
-    return test_results.count(False) == 0
+    result = run_tests(tests)
+    if not result:
+        print('Tests failed, see %s for details.' % TEST_LOGGER.log_file, file=TEST_LOGGER)
+    TEST_HELPER.write_progress('Test end')
+    return result
 
 
 if __name__ == '__main__':
diff --git a/utils.py b/utils.py
index 3e59a04..aefb965 100644
--- a/utils.py
+++ b/utils.py
@@ -138,93 +138,143 @@
     except OSError:
         return False
 
-DEFAULT_NDK_PATH = {
-    'darwin': 'Library/Android/sdk/ndk-bundle',
-    'linux': 'Android/Sdk/ndk-bundle',
-    'windows': 'AppData/Local/Android/sdk/ndk-bundle',
-}
 
-EXPECTED_TOOLS = {
-    'adb': {
-        'is_binutils': False,
-        'test_option': 'version',
-        'path_in_ndk': lambda _: '../platform-tools/adb',
-    },
-    'readelf': {
-        'is_binutils': True,
-        'accept_tool_without_arch': True,
-    },
-    'llvm-symbolizer': {
-        'is_binutils': False,
-        'path_in_ndk':
-            lambda platform: 'toolchains/llvm/prebuilt/%s-x86_64/bin/llvm-symbolizer' % platform,
-    },
-    'objdump': {
-        'is_binutils': True,
-    },
-    'strip': {
-        'is_binutils': True,
-    },
-}
+class ToolFinder:
+    """ Find tools in ndk or sdk. """
+    DEFAULT_SDK_PATH = {
+        'darwin': 'Library/Android/sdk',
+        'linux': 'Android/Sdk',
+        'windows': 'AppData/Local/Android/sdk',
+    }
 
-def _get_binutils_path_in_ndk(toolname, arch, platform):
-    if not arch:
-        arch = 'arm64'
-    if arch == 'arm64':
-        name = 'aarch64-linux-android-' + toolname
-    elif arch == 'arm':
-        name = 'arm-linux-androideabi-' + toolname
-    elif arch == 'x86_64':
-        name = 'x86_64-linux-android-' + toolname
-    elif arch == 'x86':
-        name = 'i686-linux-android-' + toolname
-    else:
-        log_fatal('unexpected arch %s' % arch)
-    path = 'toolchains/llvm/prebuilt/%s-x86_64/bin/%s' % (platform, name)
-    return (name, path)
+    EXPECTED_TOOLS = {
+        'adb': {
+            'is_binutils': False,
+            'test_option': 'version',
+            'path_in_sdk': 'platform-tools/adb',
+        },
+        'readelf': {
+            'is_binutils': True,
+            'accept_tool_without_arch': True,
+        },
+        'llvm-symbolizer': {
+            'is_binutils': False,
+            'path_in_ndk':
+                lambda platform: 'toolchains/llvm/prebuilt/%s-x86_64/bin/llvm-symbolizer' % platform,
+        },
+        'objdump': {
+            'is_binutils': True,
+        },
+        'strip': {
+            'is_binutils': True,
+        },
+    }
+
+    @classmethod
+    def find_ndk_and_sdk_paths(cls, ndk_path=None):
+        # Use the given ndk path.
+        if ndk_path and os.path.isdir(ndk_path):
+            ndk_path = os.path.abspath(ndk_path)
+            yield ndk_path, cls.find_sdk_path(ndk_path)
+        # Find ndk in the parent directory containing simpleperf scripts.
+        ndk_path = os.path.dirname(os.path.abspath(get_script_dir()))
+        yield ndk_path, cls.find_sdk_path(ndk_path)
+        # Find ndk in the default sdk installation path.
+        if is_windows():
+            home = os.environ.get('HOMEDRIVE') + os.environ.get('HOMEPATH')
+        else:
+            home = os.environ.get('HOME')
+        if home:
+            platform = get_platform()
+            sdk_path = os.path.join(home, cls.DEFAULT_SDK_PATH[platform].replace('/', os.sep))
+            if os.path.isdir(sdk_path):
+                path = os.path.join(sdk_path, 'ndk')
+                if os.path.isdir(path):
+                    # Android Studio can install multiple ndk versions in 'ndk'.
+                    # Find the newest one.
+                    ndk_version = None
+                    for name in os.listdir(path):
+                        if not ndk_version or ndk_version < name:
+                            ndk_version = name
+                    if ndk_version:
+                        yield os.path.join(path, ndk_version), sdk_path
+            ndk_path = os.path.join(sdk_path, 'ndk-bundle')
+            if os.path.isdir(ndk_path):
+                yield ndk_path, sdk_path
+
+    @classmethod
+    def find_sdk_path(cls, ndk_path):
+        path = ndk_path
+        for _ in range(2):
+            path = os.path.dirname(path)
+            if os.path.isdir(os.path.join(path, 'platform-tools')):
+                return path
+        return None
+
+    @classmethod
+    def _get_binutils_path_in_ndk(cls, toolname, arch, platform):
+        if not arch:
+            arch = 'arm64'
+        if arch == 'arm64':
+            name = 'aarch64-linux-android-' + toolname
+        elif arch == 'arm':
+            name = 'arm-linux-androideabi-' + toolname
+        elif arch == 'x86_64':
+            name = 'x86_64-linux-android-' + toolname
+        elif arch == 'x86':
+            name = 'i686-linux-android-' + toolname
+        else:
+            log_fatal('unexpected arch %s' % arch)
+        path = 'toolchains/llvm/prebuilt/%s-x86_64/bin/%s' % (platform, name)
+        return (name, path)
+
+    @classmethod
+    def find_tool_path(cls, toolname, ndk_path=None, arch=None):
+        tool_info = cls.EXPECTED_TOOLS.get(toolname)
+        if not tool_info:
+            return None
+        is_binutils = tool_info['is_binutils']
+        test_option = tool_info.get('test_option', '--help')
+        platform = get_platform()
+        path_in_ndk = None
+        path_in_sdk = None
+        if is_binutils:
+            toolname_with_arch, path_in_ndk = cls._get_binutils_path_in_ndk(
+                toolname, arch, platform)
+        else:
+            toolname_with_arch = toolname
+            if 'path_in_ndk' in tool_info:
+                path_in_ndk = tool_info['path_in_ndk'](platform)
+            elif 'path_in_sdk' in tool_info:
+                path_in_sdk = tool_info['path_in_sdk']
+        if path_in_ndk:
+            path_in_ndk = path_in_ndk.replace('/', os.sep)
+        elif path_in_sdk:
+            path_in_sdk = path_in_sdk.replace('/', os.sep)
+
+        for ndk_dir, sdk_dir in cls.find_ndk_and_sdk_paths(ndk_path):
+            if path_in_ndk and ndk_dir:
+                path = os.path.join(ndk_dir, path_in_ndk)
+                if is_executable_available(path, test_option):
+                    return path
+            elif path_in_sdk and sdk_dir:
+                path = os.path.join(sdk_dir, path_in_sdk)
+                if is_executable_available(path, test_option):
+                    return path
+
+        # Find tool in $PATH.
+        if is_executable_available(toolname_with_arch, test_option):
+            return toolname_with_arch
+
+        # Find tool without arch in $PATH.
+        if is_binutils and tool_info.get('accept_tool_without_arch'):
+            if is_executable_available(toolname, test_option):
+                return toolname
+        return None
+
 
 def find_tool_path(toolname, ndk_path=None, arch=None):
-    if toolname not in EXPECTED_TOOLS:
-        return None
-    tool_info = EXPECTED_TOOLS[toolname]
-    is_binutils = tool_info['is_binutils']
-    test_option = tool_info.get('test_option', '--help')
-    platform = get_platform()
-    if is_binutils:
-        toolname_with_arch, path_in_ndk = _get_binutils_path_in_ndk(toolname, arch, platform)
-    else:
-        toolname_with_arch = toolname
-        path_in_ndk = tool_info['path_in_ndk'](platform)
-    path_in_ndk = path_in_ndk.replace('/', os.sep)
-
-    # 1. Find tool in the given ndk path.
-    if ndk_path:
-        path = os.path.join(ndk_path, path_in_ndk)
-        if is_executable_available(path, test_option):
-            return path
-
-    # 2. Find tool in the ndk directory containing simpleperf scripts.
-    path = os.path.join('..', path_in_ndk)
-    if is_executable_available(path, test_option):
-        return path
-
-    # 3. Find tool in the default ndk installation path.
-    home = os.environ.get('HOMEPATH') if is_windows() else os.environ.get('HOME')
-    if home:
-        default_ndk_path = os.path.join(home, DEFAULT_NDK_PATH[platform].replace('/', os.sep))
-        path = os.path.join(default_ndk_path, path_in_ndk)
-        if is_executable_available(path, test_option):
-            return path
-
-    # 4. Find tool in $PATH.
-    if is_executable_available(toolname_with_arch, test_option):
-        return toolname_with_arch
-
-    # 5. Find tool without arch in $PATH.
-    if is_binutils and tool_info.get('accept_tool_without_arch'):
-        if is_executable_available(toolname, test_option):
-            return toolname
-    return None
+    return ToolFinder.find_tool_path(toolname, ndk_path, arch)
 
 
 class AdbHelper(object):
@@ -234,6 +284,7 @@
             log_exit("Can't find adb in PATH environment.")
         self.adb_path = adb_path
         self.enable_switch_to_root = enable_switch_to_root
+        self.serial_number = None
 
 
     def run(self, adb_args):
@@ -243,7 +294,12 @@
     def run_and_return_output(self, adb_args, log_output=True, log_stderr=True):
         adb_args = [self.adb_path] + adb_args
         log_debug('run adb cmd: %s' % adb_args)
-        subproc = subprocess.Popen(adb_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        env = None
+        if self.serial_number:
+            env = os.environ.copy()
+            env['ANDROID_SERIAL'] = self.serial_number
+        subproc = subprocess.Popen(
+            adb_args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         stdout_data, stderr_data = subproc.communicate()
         stdout_data = bytes_to_str(stdout_data)
         stderr_data = bytes_to_str(stderr_data)