Update NDK prebuilts to build 7173446.
Taken from branch aosp-simpleperf-release.
Bug: none
Test: run test_monitor.py on multiple android versions and hosts.
Change-Id: I722fab508b9bb8213d898f5e6a786bdf0a513b17
diff --git a/ChangeLog b/ChangeLog
index 3e655be..9f5b323 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
+build 7173446
+Add visualization tool purgatorio.
+Switch to llvm-objdump and llvm-readelf.
+
build 7119240
Reduce prepare recording time.
Add --kprobe option in record cmd.
diff --git a/bin/android/arm/simpleperf b/bin/android/arm/simpleperf
index d84fcac..2a0c7c2 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 90b3628..83bb427 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 f48ddcc..a8cc8c6 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 929da5a..30ad0fd 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 2f47977..e0e5d8f 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 17fbc30..f304795 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 90934f9..f050a26 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 b76ac92..113c7c2 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 5107f45..3f5bea7 100755
--- a/bin/windows/x86/libsimpleperf_report.dll
+++ b/bin/windows/x86/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86/libwinpthread-1.dll b/bin/windows/x86/libwinpthread-1.dll
index a41127a..ed00b46 100755
--- a/bin/windows/x86/libwinpthread-1.dll
+++ b/bin/windows/x86/libwinpthread-1.dll
Binary files differ
diff --git a/bin/windows/x86/simpleperf.exe b/bin/windows/x86/simpleperf.exe
index 7d01386..4e899cb 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 6d6f825..6d644d2 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/libwinpthread-1.dll b/bin/windows/x86_64/libwinpthread-1.dll
index 5a12ce3..221fac1 100755
--- a/bin/windows/x86_64/libwinpthread-1.dll
+++ b/bin/windows/x86_64/libwinpthread-1.dll
Binary files differ
diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe
index 6861c43..052b435 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 161fdc0..2f3b085 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -22,6 +22,7 @@
- [Answers to common issues](#answers-to-common-issues)
- [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)
+ - [Why we can't always get complete DWARF-based call graphs](#why-we-cant-always-get-complete-dwarf-based-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)
- [Show annotated source code and disassembly](#show-annotated-source-code-and-disassembly)
@@ -88,7 +89,7 @@
bin/${host}/${arch}/libsimpleperf_report.${so/dylib/dll}: report shared libraries used on the host.
-*.py, inferno: Python scripts used for recording and reporting.
+*.py, inferno, purgatorio: Python scripts used for recording and reporting. Details are in [scripts_reference.md](scripts_reference.md).
## Android application profiling
@@ -159,6 +160,18 @@
1. Use unstripped native binaries when building the apk, as [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExampleWithNative/app/profiling.gradle).
2. Download unstripped native libraries on device, as [here](#fix-broken-callchain-stopped-at-c-functions).
+### Why we can't always get complete DWARF-based call graphs?
+
+DWARF-based call graphs are generated by unwinding thread stacks. When a sample is generated, up to
+64KB stack data is dumped by the kernel. By unwinding the stack based on dwarf information, we get
+a callchain. But the thread stack can be much longer than 64KB. In that case, we can't unwind to
+the thread start point.
+
+To alleviate the problem, simpleperf joins callchains after recording them. If two callchains of
+a thread have an entry containing the same ip and sp address, then simpleperf tries to join them to
+make the callchains longer. In that case, the longer we run, the more samples we get. This makes it
+more likely to get complete callchains, but it's still not guaranteed to get complete call graphs.
+
### How to solve missing symbols in report?
The simpleperf record command collects symbols on device in perf.data. But if the native libraries
diff --git a/doc/scripts_reference.md b/doc/scripts_reference.md
index 28476da..734c56d 100644
--- a/doc/scripts_reference.md
+++ b/doc/scripts_reference.md
@@ -13,6 +13,7 @@
- [report.py](#reportpy)
- [report_html.py](#reporthtmlpy)
- [inferno](#inferno)
+ - [purgatorio](#purgatorio)
- [pprof_proto_generator.py](#pprofprotogeneratorpy)
- [report_sample.py](#reportsamplepy)
- [simpleperf_report_lib.py](#simpleperfreportlibpy)
@@ -208,6 +209,10 @@
$ ./inferno.sh -np surfaceflinger
```
+## purgatorio
+
+[purgatorio](../scripts/purgatorio/README.md) is a visualization tool to show samples in time order.
+
## pprof_proto_generator.py
It converts a profiling data file into pprof.proto, a format used by [pprof](https://github.com/google/pprof).
diff --git a/purgatorio/README.md b/purgatorio/README.md
new file mode 100644
index 0000000..bea1b0e
--- /dev/null
+++ b/purgatorio/README.md
@@ -0,0 +1,69 @@
+# Purgatorio
+
+[link on wikipedia](https://en.wikipedia.org/wiki/Purgatorio)
+
+
+
+Purgatorio is a visualization tool for simpleperf traces. It's based on [libsimpleperf](https://source.corp.google.com/android/system/extras/simpleperf/;l=1?q=simpleperf&sq=package:%5Eandroid$),
+[Bokeh](https://bokeh.org/) and [D3 flamegraphs](https://github.com/spiermar/d3-flame-graph).
+
+The main difference from [Inferno](https://source.corp.google.com/android/system/extras/simpleperf/scripts/inferno/;l=1) is that Purgatorio focuses on visualizing system-wide traces (the ones with the `-a` argument) on a time-organized sequence, and allow the user to interact with the graph by zooming, hovering on samples and visualize a flame graph for specific samples (be it restricted by time interval, set of threads or whatever subset).
+
+## Obtaining the sources
+
+ git clone sso://user/balejs/purgatorio
+
+## Getting ready
+
+**NOTE**: In theory it should work on most OSes, but Purgatorio has been tested on gLinux only. Any feedback, recommendations and patches to get it work elsewhere will be welcome (balejs@).
+
+Purgatorio tends to be self-contained, but Bokeh and some of its dependencies aren't shipped with the default python libraries, hence they require to be installed with pip3. Assuming they already have python3 installed, Purgatorio hopefuls should follow these steps:
+
+ $ sudo apt-get install python3-pip
+ $ pip3 install jinja2 bokeh pandas
+
+Run `python3 purgatorio.py -h` for a list of command-line arguments.
+
+## Example
+
+One can trace a Camera warm launch with:
+
+ $ adb shell simpleperf record --trace-offcpu --call-graph fp -o /data/local/camera_warm_launch.data -a
+ [launch camera here, then press ctrl + c]
+ $ adb pull /data/local/camera_warm_launch.data
+
+And then run:
+
+ python3 purgatorio.py camera_warm_launch.data
+
+If you get lots of "Failed to read symbols" messages, and backtraces in the diagram don't show the symbols you're interested into, you might want to try [building a symbols cache](https://chromium.googlesource.com/android_ndk/+/refs/heads/master/simpleperf/doc/README.md#how-to-solve-missing-symbols-in-report) for the trace, then run purgatorio again with:
+
+ python3 purgatorio.py camera_warm_launch.data -u [symbols cache]
+
+# Purgatorio interface
+The Purgatorio User Interface is divided in three areas:
+
+## Main Graph
+It's the area to the left, including process names and color-coded dots grouped by process. It's used to navigate throungh the trace and identify samples of ineterest. By hovering on a sample (or set of samples) their callstacks will be visualized over the graph. When selecting a et of samples, their aggregated data will be visualized in the other sections of the UI. Multiple sections of the graph can be aggregated by holding down the [ctrl] button during selection.
+
+The toolbox to the right can be used to configure interactions with the graph:
+
+
+
+## Flame graph
+The flame graph is located in the upper right portion. Once samples are selected in the main graph, the flame graph will show an interactive visualization for their aggregated callstacks. In this case the selection included mostly samples for com.google.android.GoogleCamera
+
+
+
+It's possible to select a given stack entry to zoom on it and look at entry deeper in the callstack
+
+
+
+When studiyng system issues it's often useful to visualize an inverted callstack. This can be done by clicking the related check box. The graph below is the same as in the first flame graph above, but with call stack inverted. In this case, inverted visualization directly points at [possible issues with io](http://b/158783580#comment12)
+
+
+
+## Sample table
+It's located in the lower right and counts samples by thread (for direct flame graphs) or symbol (for inverted flame graphs). Table columns can be sorted by clicking on their respective layers, and selecting specific lines filters the contents of the flame graph to the selected threads or symbols. Multiple lines can be selected at the same time.
+
+
diff --git a/purgatorio/images/flame_graph.png b/purgatorio/images/flame_graph.png
new file mode 100644
index 0000000..b216d29
--- /dev/null
+++ b/purgatorio/images/flame_graph.png
Binary files differ
diff --git a/purgatorio/images/flame_graph_zoomed.png b/purgatorio/images/flame_graph_zoomed.png
new file mode 100644
index 0000000..53ad8f9
--- /dev/null
+++ b/purgatorio/images/flame_graph_zoomed.png
Binary files differ
diff --git a/purgatorio/images/inverted_flame_graph.png b/purgatorio/images/inverted_flame_graph.png
new file mode 100644
index 0000000..7fee766
--- /dev/null
+++ b/purgatorio/images/inverted_flame_graph.png
Binary files differ
diff --git a/purgatorio/images/table.png b/purgatorio/images/table.png
new file mode 100644
index 0000000..baa56a9
--- /dev/null
+++ b/purgatorio/images/table.png
Binary files differ
diff --git a/purgatorio/images/toolbox.png b/purgatorio/images/toolbox.png
new file mode 100644
index 0000000..d63270a
--- /dev/null
+++ b/purgatorio/images/toolbox.png
Binary files differ
diff --git a/purgatorio/images/user_interface.png b/purgatorio/images/user_interface.png
new file mode 100644
index 0000000..18ae652
--- /dev/null
+++ b/purgatorio/images/user_interface.png
Binary files differ
diff --git a/purgatorio/purgatorio.py b/purgatorio/purgatorio.py
new file mode 100755
index 0000000..3edc208
--- /dev/null
+++ b/purgatorio/purgatorio.py
@@ -0,0 +1,303 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2021 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import argparse
+import bisect
+import jinja2
+import io
+import math
+import os
+import pandas as pd
+from pathlib import Path
+import re
+import sys
+
+from bokeh.embed import components
+from bokeh.io import output_file, show
+from bokeh.layouts import layout, Spacer
+from bokeh.models import ColumnDataSource, CustomJS, WheelZoomTool, HoverTool, FuncTickFormatter
+from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
+from bokeh.models.ranges import FactorRange
+from bokeh.palettes import Category20b
+from bokeh.plotting import figure
+from bokeh.resources import INLINE
+from bokeh.transform import jitter
+from bokeh.util.browser import view
+from functools import cmp_to_key
+
+simpleperf_path = Path(__file__).absolute().parents[1]
+sys.path.insert(0, str(simpleperf_path))
+import simpleperf_report_lib as sp
+
+
+def create_graph(args, source, data_range):
+ graph = figure(
+ sizing_mode='stretch_both', x_range=data_range,
+ tools=['pan', 'wheel_zoom', 'ywheel_zoom', 'xwheel_zoom', 'reset', 'tap', 'box_select'],
+ active_drag='box_select', active_scroll='wheel_zoom',
+ tooltips=[('thread', '@thread'),
+ ('callchain', '@callchain{safe}')],
+ title=args.title, name='graph')
+
+ # a crude way to avoid process name cluttering at some zoom levels.
+ # TODO: remove processes from the ticker base on the number of samples currently visualized.
+ # The process with most samples visualized should always be visible on the ticker
+ graph.xaxis.formatter = FuncTickFormatter(args={'range': data_range, 'graph': graph}, code="""
+ var pixels_per_entry = graph.inner_height / (range.end - range.start) //Do not rond end and start here
+ var entries_to_skip = Math.ceil(12 / pixels_per_entry) // kind of 12 px per entry
+ var desc = tick.split(/:| /)
+ // desc[0] == desc[1] for main threads
+ var keep = (desc[0] == desc[1]) &&
+ !(desc[2].includes('unknown') ||
+ desc[2].includes('Binder') ||
+ desc[2].includes('kworker'))
+
+ if (pixels_per_entry < 8 && !keep) {
+ //if (index + Math.round(range.start)) % entries_to_skip != 0) {
+ return ""
+ }
+
+ return tick """)
+
+ graph.xaxis.major_label_orientation = math.pi/6
+
+ graph.circle(y='time',
+ x='thread',
+ source=source,
+ color='color',
+ alpha=0.3,
+ selection_fill_color='White',
+ selection_line_color='Black',
+ selection_line_width=0.5,
+ selection_alpha=1.0)
+
+ graph.y_range.range_padding = 0
+ graph.xgrid.grid_line_color = None
+ return graph
+
+
+def create_table(graph):
+ # Empty dataframe, will be filled up in js land
+ empty_data = {'thread': [], 'count': []}
+ table_source = ColumnDataSource(pd.DataFrame(
+ empty_data, columns=['thread', 'count'], index=None))
+ graph_source = graph.renderers[0].data_source
+
+ columns = [
+ TableColumn(field='thread', title='Thread'),
+ TableColumn(field='count', title='Count')
+ ]
+
+ # start with a small table size (stretch doesn't reduce from the preferred size)
+ table = DataTable(
+ width=100,
+ height=100,
+ sizing_mode='stretch_both',
+ source=table_source,
+ columns=columns,
+ index_position=None,
+ name='table')
+
+ graph_selection_cb = CustomJS(code='update_selections()')
+
+ graph_source.selected.js_on_change('indices', graph_selection_cb)
+ table_source.selected.js_on_change('indices', CustomJS(args={}, code='update_flamegraph()'))
+
+ return table
+
+
+def generate_template(template_file='index.html.jinja2'):
+ loader = jinja2.FileSystemLoader(
+ searchpath=os.path.dirname(os.path.realpath(__file__)) + '/templates/')
+
+ env = jinja2.Environment(loader=loader)
+ return env.get_template(template_file)
+
+
+def generate_html(args, components_dict, title):
+ resources = INLINE.render()
+ script, div = components(components_dict)
+ return generate_template().render(
+ resources=resources, plot_script=script, plot_div=div, title=title)
+
+
+class ThreadDescriptor:
+ def __init__(self, pid, tid, name):
+ self.name = name
+ self.tid = tid
+ self.pid = pid
+
+ def __lt__(self, other):
+ return self.pid < other.pid or (self.pid == other.pid and self.tid < other.tid)
+
+ def __gt__(self, other):
+ return self.pid > other.pid or (self.pid == other.pid and self.tid > other.tid)
+
+ def __eq__(self, other):
+ return self.pid == other.pid and self.tid == other.tid and self.name == other.name
+
+ def __str__(self):
+ return str(self.pid) + ':' + str(self.tid) + ' ' + self.name
+
+
+def generate_datasource(args):
+ lib = sp.ReportLib()
+ lib.ShowIpForUnknownSymbol()
+
+ if args.usyms:
+ lib.SetSymfs(args.usyms)
+
+ if args.input_file:
+ lib.SetRecordFile(args.input_file)
+
+ if args.ksyms:
+ lib.SetKallsymsFile(args.ksyms)
+
+ if not args.not_art:
+ lib.ShowArtFrames(True)
+
+ product = lib.MetaInfo().get('product_props')
+
+ if product:
+ manufacturer, model, name = product.split(':')
+
+ start_time = -1
+ end_time = -1
+
+ times = []
+ threads = []
+ thread_descs = []
+ callchains = []
+
+ while True:
+ sample = lib.GetNextSample()
+
+ if sample is None:
+ lib.Close()
+ break
+
+ symbol = lib.GetSymbolOfCurrentSample()
+ callchain = lib.GetCallChainOfCurrentSample()
+
+ if start_time == -1:
+ start_time = sample.time
+
+ sample_time = (sample.time - start_time) / 1e6 # convert to ms
+
+ times.append(sample_time)
+
+ if sample_time > end_time:
+ end_time = sample_time
+
+ thread_desc = ThreadDescriptor(sample.pid, sample.tid, sample.thread_comm)
+
+ threads.append(str(thread_desc))
+
+ if thread_desc not in thread_descs:
+ bisect.insort(thread_descs, thread_desc)
+
+ callchain_str = ''
+
+ for i in range(callchain.nr):
+ symbol = callchain.entries[i].symbol # SymbolStruct
+ entry_line = ''
+
+ if args.include_dso_names:
+ entry_line += symbol._dso_name.decode('utf-8') + ':'
+
+ entry_line += symbol._symbol_name.decode('utf-8')
+
+ if args.include_symbols_addr:
+ entry_line += ':' + hex(symbol.symbol_addr)
+
+ if i < callchain.nr - 1:
+ callchain_str += entry_line + '<br>'
+
+ callchains.append(callchain_str)
+
+ # define colors per-process
+ palette = Category20b[20]
+ color_map = {}
+
+ last_pid = -1
+ palette_index = 0
+
+ for thread_desc in thread_descs:
+ if thread_desc.pid != last_pid:
+ last_pid = thread_desc.pid
+ palette_index += 1
+ palette_index %= len(palette)
+
+ color_map[str(thread_desc.pid)] = palette[palette_index]
+
+ colors = []
+ for sample_thread in threads:
+ pid = str(sample_thread.split(':')[0])
+ colors.append(color_map[pid])
+
+ threads_range = [str(thread_desc) for thread_desc in thread_descs]
+ data_range = FactorRange(factors=threads_range, bounds='auto')
+
+ data = {'time': times,
+ 'thread': threads,
+ 'callchain': callchains,
+ 'color': colors}
+
+ source = ColumnDataSource(data)
+
+ return source, data_range
+
+
+def main():
+ parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument('input_file', type=str, help='input file')
+ parser.add_argument('--title', '-t', type=str, help='document title')
+ parser.add_argument('--ksyms', '-k', type=str, help='path to kernel symbols (kallsyms)')
+ parser.add_argument('--usyms', '-u', type=str, help='path to tree with user space symbols')
+ parser.add_argument('--not_art', '-a', action='store_true', help='Don\'t show ART symbols')
+ parser.add_argument('--output', '-o', type=str, help='output file')
+ parser.add_argument('--dont_open', '-d', action='store_true', help='Don\'t open output file')
+ parser.add_argument('--include_dso_names', '-n', action='store_true',
+ help='Include dso names in backtraces')
+ parser.add_argument('--include_symbols_addr', '-s', action='store_true',
+ help='Include addresses of symbols in backtraces')
+ args = parser.parse_args()
+
+ # TODO test hierarchical ranges too
+ source, data_range = generate_datasource(args)
+
+ graph = create_graph(args, source, data_range)
+ table = create_table(graph)
+
+ output_filename = args.output
+
+ if not output_filename:
+ output_filename = os.path.splitext(os.path.basename(args.input_file))[0] + '.html'
+
+ title = os.path.splitext(os.path.basename(output_filename))[0]
+
+ html = generate_html(args, {'graph': graph, 'table': table}, title)
+
+ with io.open(output_filename, mode='w', encoding='utf-8') as fout:
+ fout.write(html)
+
+ if not args.dont_open:
+ view(output_filename)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/purgatorio/templates/index.html.jinja2 b/purgatorio/templates/index.html.jinja2
new file mode 100644
index 0000000..f3e6046
--- /dev/null
+++ b/purgatorio/templates/index.html.jinja2
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>{{ title }}</title>
+ <script
+ src="https://code.jquery.com/jquery-3.5.1.min.js"
+ integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
+ crossorigin="anonymous"></script>
+
+ <meta charset="utf-8">
+
+ {{ resources }}
+
+ <style>
+ {% include 'styles.css' %}
+ </style>
+
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/d3-flame-graph@4.0.6/dist/d3-flamegraph.css">
+
+<script
+ src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
+ integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
+ crossorigin="anonymous"></script>
+ <script type="text/javascript" src="https://d3js.org/d3.v4.min.js"></script>
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/d3-flame-graph@4.0.6/dist/d3-flamegraph.min.js"></script>
+
+ </head>
+ <body>
+ <div id="help_dialog" class="dialog">
+ <div class="dialog_area">
+ <span class="dialog_close">×</span>
+ <p> <b>Main plot (upper left):</b> pan with click+mouse movement, zoom in/out with the mouse
+ wheel, hover on sample clusters to see backtraces. Select samples with the rectangular
+ selection tool or by clicking on them. Select holding shift to add or ctrl+shift to
+ remove samples to or from the selection. Different tools can be enabled/disabled from
+ the toolbox.</p>
+ <p><b>Flame graph (upper right):</b> click on specific items to zoom in.</p>
+ <p><b>Sample table (lower right):</b> select processes to filter in the Flame graph.</p>
+ </div>
+ </div>
+
+ <div class="top_right">
+ <button id="help_button" class="help" text-align="right">HELP</button>
+ </div>
+ <div class="left"> {{ plot_div.graph }} </div>
+ <div class="middle_right">
+ <div id="flame"/>
+ </div>
+
+ <div class="bottom_right">
+ <div style="display: flex; justify-content: space-around">
+ <div>
+ <label for="regex">Filter by regex:</label>
+ <input type="text" id="regex" oninput="update_selections()"/>
+ </div>
+ <div>
+ Invert callstack <input type="checkbox" id="inverted_checkbox" onclick="update_selections()">
+ </div>
+ </div>
+ {{ plot_div.table }}
+ </div>
+
+ <script>{% include 'main.js' %}</script>
+ {{ plot_script }}
+ </body>
+</html>
diff --git a/purgatorio/templates/main.js b/purgatorio/templates/main.js
new file mode 100644
index 0000000..ec8e7cb
--- /dev/null
+++ b/purgatorio/templates/main.js
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+function generateHash (name) {
+ // Return a vector (0.0->1.0) that is a hash of the input string.
+ // The hash is computed to favor early characters over later ones, so
+ // that strings with similar starts have similar vectors. Only the first
+ // 6 characters are considered.
+ const MAX_CHAR = 6
+
+ var hash = 0
+ var maxHash = 0
+ var weight = 1
+ var mod = 10
+
+ if (name) {
+ for (var i = 0; i < name.length; i++) {
+ if (i > MAX_CHAR) { break }
+ hash += weight * (name.charCodeAt(i) % mod)
+ maxHash += weight * (mod - 1)
+ weight *= 0.70
+ }
+ if (maxHash > 0) { hash = hash / maxHash }
+ }
+ return hash
+}
+
+function offCpuColorMapper (d) {
+ if (d.highlight) return '#E600E6'
+
+ let name = d.data.n || d.data.name
+ let vector = 0
+ const nameArr = name.split('`')
+
+ if (nameArr.length > 1) {
+ name = nameArr[nameArr.length - 1] // drop module name if present
+ }
+ name = name.split('(')[0] // drop extra info
+ vector = generateHash(name)
+
+ const r = 0 + Math.round(55 * (1 - vector))
+ const g = 0 + Math.round(230 * (1 - vector))
+ const b = 200 + Math.round(55 * vector)
+
+ return 'rgb(' + r + ',' + g + ',' + b + ')'
+}
+
+var flame = flamegraph()
+ .cellHeight(18)
+ .width(window.innerWidth * 3 / 10 - 20) // 30% width
+ .transitionDuration(750)
+ .minFrameSize(5)
+ .transitionEase(d3.easeCubic)
+ .inverted(false)
+ .sort(true)
+ .title("")
+ //.differential(false)
+ //.elided(false)
+ .selfValue(false)
+ .setColorMapper(offCpuColorMapper);
+
+
+function update_table() {
+ let inverted = document.getElementById("inverted_checkbox").checked
+ let regex
+ let graph_source = Bokeh.documents[0].get_model_by_name('graph').renderers[0].data_source
+ let table_source = Bokeh.documents[0].get_model_by_name('table').source
+
+ let graph_selection = graph_source.selected.indices
+ let threads = graph_source.data.thread
+ let callchains = graph_source.data.callchain
+
+ let selection_len = graph_selection.length;
+
+ if (document.getElementById("regex").value) {
+ regex = new RegExp(document.getElementById("regex").value)
+ }
+
+ table_source.data.thread = []
+ table_source.data.count = []
+ table_source.data.index = []
+
+ for (let i = 0; i < selection_len; i ++) {
+ let entry = "<no callchain>"
+
+ if (regex !== undefined && !regex.test(callchains[graph_selection[i]])) {
+ continue;
+ }
+
+ if (inverted) {
+ let callchain = callchains[graph_selection[i]].split("<br>")
+
+ for (let e = 0; e < callchain.length; e ++) {
+ if (callchain[e] != "") { // last entry is apparently always an empty string
+ entry = callchain[e]
+ break
+ }
+ }
+ } else {
+ entry = threads[graph_selection[i]]
+ }
+
+ let pos = table_source.data.thread.indexOf(entry)
+
+ if(pos == -1) {
+ table_source.data.thread.push(entry)
+ table_source.data.count.push(1)
+ table_source.data.index.push(table_source.data.thread.length)
+ } else {
+ table_source.data.count[pos] ++
+ }
+ }
+
+ table_source.selected.indices = []
+ table_source.change.emit()
+}
+
+
+function should_insert_callchain(callchain, items, filter_index, inverted) {
+ for (t = 0; t < filter_index.length; t ++) {
+ if (callchain[0] === items[filter_index[t]]) {
+ return true
+ }
+ }
+
+ if (filter_index.length > 0) {
+ return false
+ }
+
+ return true
+}
+
+
+function insert_callchain(root, callchain, inverted) {
+ let root_pos = -1
+ let node = root
+
+ node.value ++
+
+ for (let e = 0; e < callchain.length; e ++) {
+ let entry = callchain[e].replace(/^\s+|\s+$/g, '')
+ let entry_pos = -1
+
+ for (let j = 0; j < node.children.length; j ++) {
+ if (node.children[j].name == entry) {
+ entry_pos = j
+ break
+ }
+ }
+
+ if (entry_pos == -1) {
+ node.children.push({name: entry, value:0, children:[]})
+ entry_pos = node.children.length - 1
+ }
+
+ node = node.children[entry_pos]
+ node.value ++
+ }
+}
+
+
+function update_flamegraph() {
+ let inverted = document.getElementById("inverted_checkbox").checked
+ let root = {name: inverted ? "samples" : "processes", value: 0, children: []}
+
+ let graph_source = Bokeh.documents[0].get_model_by_name('graph').renderers[0].data_source
+ let graph_selection = graph_source.selected.indices
+ let callchains = graph_source.data.callchain
+ let graph_threads = graph_source.data.thread
+
+ let table_source = Bokeh.documents[0].get_model_by_name('table').source
+ let table_selection = table_source.selected.indices
+ let table_threads = table_source.data.thread
+ let regex
+
+ if (document.getElementById("regex").value) {
+ regex = new RegExp(document.getElementById("regex").value)
+ }
+
+ for (let i = 0; i < graph_selection.length; i ++) {
+ let thread = graph_threads[graph_selection[i]]
+ let callchain = callchains[graph_selection[i]].split("<br>")
+ callchain = callchain.filter(function(e){return e != ""})
+
+ if (regex !== undefined && !regex.test(callchains[graph_selection[i]])) {
+ continue;
+ }
+
+ if (callchain.length == 0) {
+ callchain.push("<no callchain>")
+ }
+
+ callchain.push(thread)
+
+ if (!inverted){
+ callchain = callchain.reverse()
+ }
+
+ if (should_insert_callchain(callchain, table_threads, table_selection)) {
+ insert_callchain(root, callchain)
+ }
+ }
+
+ if (root.children.length == 1) {
+ root = root.children[0]
+ }
+
+ d3.select("#flame")
+ .datum(root)
+ .call(flame)
+}
+
+var help_dialog = document.getElementById("help_dialog");
+
+document.getElementById("help_button").onclick = function() {
+ help_dialog.style.display = "block";
+}
+
+window.onclick = function(event) {
+ if (event.target == help_dialog) {
+ help_dialog.style.display = "none";
+ }
+}
+
+document.getElementsByClassName("dialog_close")[0].onclick = function() {
+ help_dialog.style.display = "none";
+}
+
+function update_selections() {
+ update_flamegraph()
+ update_table()
+}
diff --git a/purgatorio/templates/styles.css b/purgatorio/templates/styles.css
new file mode 100644
index 0000000..4378b0b
--- /dev/null
+++ b/purgatorio/templates/styles.css
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+body {
+ font-family: sans-serif;
+}
+
+::-webkit-scrollbar {
+ width: 1em;
+}
+
+::-webkit-scrollbar-track {
+ box-shadow: inset 0 0 0.1em white;
+ border-radius: 0.5em;
+}
+
+::-webkit-scrollbar-thumb {
+ background: lightgrey;
+ border-radius: 0.5em;
+}
+
+div.left {
+ position:fixed;
+ top: 0;
+ left: 0;
+ width: 70%;
+ height: 100%;
+}
+
+div.top_right {
+ position: fixed;
+ top: 0;
+ right: 0;
+ text-align: right;
+ width: 30%;
+ height: 1em;
+}
+
+div.middle_right {
+ position:fixed;
+ top: 2%;
+ right: 0;
+ width: 30%;
+ height: 78%;
+ overflow-y: scroll;
+}
+
+div.bottom_right {
+ position: fixed;
+ width: 30%;
+ height: 20%;
+ bottom: 0;
+ right: 0;
+}
+
+button {
+ border: none;
+ outline: none;
+ padding: 0;
+ background: white;
+ font-size: 0.5em;
+}
+
+button.help:before
+{
+ content: '?';
+ display: inline-block;
+ font-weight: bold;
+ text-align: center;
+ font-size: 1.4em;
+ width: 1.5em;
+ height: 1.5em;
+ line-height: 1.6em;
+ border-radius: 1.2em;
+ margin-right: 0.3em;
+ color: GoldenRod;
+ background: white;
+ border: 0.1em solid GoldenRod;
+}
+
+button.help:hover:before
+{
+ color: white;
+ background: GoldenRod;
+}
+
+.dialog {
+ display: none;
+ position: fixed;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ background-color: rgba(0,0,0,0.4);
+}
+
+.dialog_area {
+ background-color: white;
+ margin: 20% auto;
+ border: 0.05em solid gray;
+ border-radius: 0.5em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ width: 50%;
+}
+
+.dialog_close {
+ color: darkgray;
+ float: right;
+ font-size: 2em;
+ font-weight: bold;
+}
+
+.dialog_close:focus,
+.dialog_close:hover {
+ cursor: pointer;
+ color: black;
+}
diff --git a/repo.prop b/repo.prop
index eda7ed5..b44d23e 100644
--- a/repo.prop
+++ b/repo.prop
@@ -1,658 +1,674 @@
-device/amlogic/yukawa 92889e026837d2f743bce110bc6c54d5198f1ece
-device/amlogic/yukawa-kernel 3ce4916952d37d254efb31cf46af9cd2bbd0819e
+device/amlogic/yukawa 846b1637d445372289074718687a82c023f2aa73
+device/amlogic/yukawa-kernel 8e4926a91bc698bceac1c7e2f1babd46ad344f77
device/common e3bdb003b9db6e1cffa0909463b33c2117d7ec4c
device/generic/arm64 c93f2bee499dd0f944dde9788dbe1e926c04cb79
device/generic/armv7-a-neon ab6a7fe91ab2204fefb1086fc9b393d7965aec43
device/generic/art 3bbf69adeacd94bbbcadec7c604f312fbf4f25d3
-device/generic/car 0f86e0622d9f0b8ce2b3f6d9cf6d485f782a6219
-device/generic/common 2b551507a37209de898b8f0e7cc116af5e01089e
-device/generic/goldfish cfe1e781530412b19bc8a6186f05cc6b431c23e8
-device/generic/goldfish-opengl 7ce5c4a39e4a7966b348666f956694140c1c0a99
+device/generic/car d25770afce84af3a59293d8d30ed0d435de4c933
+device/generic/common 76438dff2f96e507572a411c933b394f7a223bfd
+device/generic/goldfish d42708a066e8287ab90e7dafe70c22f7e544caac
+device/generic/goldfish-opengl 6d84526d9ab37d9200ff85ae15b16dc10fddad32
device/generic/mini-emulator-arm64 92751453f781a886cfa122ae2806b5a6fee5dc9a
device/generic/mini-emulator-armv7-a-neon 758713275939470693bf476494ed1dada61c0dce
device/generic/mini-emulator-x86 eaec2c1cf2953668654db11bb9c4bd44016314aa
device/generic/mini-emulator-x86_64 8ab94877e0a77be0ebd5c7a74f3a2349b9d15960
-device/generic/opengl-transport 02bf48a55d7a4cb5a2c848ae7abc94e56a37b242
+device/generic/opengl-transport 9f9c02592610e9c2bea6c9a2a2e361de38d32e2c
device/generic/qemu 8c485393b917e27434cceffcb7b61a09a0ac3f3a
-device/generic/trusty f240cd2a14411add150c47b3899d2a84e78c2163
+device/generic/trusty 1637a92165d8b09c4ef8667a7db9ac6646c060d5
device/generic/uml 323cc35973dbe047c9a3388930993530673b0ffc
-device/generic/vulkan-cereal 3404717f32ae48a50988a89e0185b1a473dcc803
+device/generic/vulkan-cereal bec74ae336eb373ae91dfd0c4aed8d54a4841dcc
device/generic/x86 7a984f0e394a7e96a6e20c1b51cd3dfcec9f289e
device/generic/x86_64 142654f9aa7cec5e8f14f631c0a79a340266e563
-device/google/atv 30fd88588ccca0a385abe9f40d3a4023d86d96f4
-device/google/bonito 887d63ef1af76da5e6231b76c814c4071cd99062
+device/google/atv eb788922f3ced9b03bb440eb8e57c0d84fc9d92a
+device/google/bonito 0edfb68192b67c26cba543f165b749ed65788af4
device/google/bonito-kernel e010d42cab925d9cb2ce5538afe99cbe4da55f1b
-device/google/bonito-sepolicy a618828ab8681d1996d3972215b2e3f4981b1e7c
+device/google/bonito-sepolicy f1ea74125b994b9b80ca0a5d0c676f68d65b7672
device/google/bramble 222aba5f76de3c2f78845c78d5ccae51b4f6aa05
device/google/bramble-kernel 3ee922bbcbfbb0f30717ae64076b8af5cc6864dd
-device/google/bramble-sepolicy a570c4833681c3f7a9d4613e306e81b7c10a23e0
-device/google/contexthub b574fabb78498d09ecb9d42fc0024a1647a2935c
-device/google/coral 56aa340ee6a1422a563f3633546e7f3ed852d091
+device/google/bramble-sepolicy 2f705e61cbf5646f7b515a5668f74953e2eb0032
+device/google/contexthub 7cedd78dc8ded370ac096acdf22ff5de56086cf2
+device/google/coral 6e98b6d816bd3d50a7a0a438b27dd52877df1534
device/google/coral-kernel b9bfc6c132ae4224f6771b44a9995b677945ff1b
-device/google/coral-sepolicy bbb72d05454e990539062126c64da064cd016531
-device/google/crosshatch c52d685ce2f3578ce61103c46fcb0b44eec8f45c
+device/google/coral-sepolicy 3594a050d2354a5724e784206d2dc122383052a6
+device/google/crosshatch bbd55e4d10809e7d031d18aefff40751b9fa42e8
device/google/crosshatch-kernel 9636bcec978079d89e31e8e0b2b697f4d23e8a7e
-device/google/crosshatch-sepolicy c97ec330f2a4400d4e582594771052d418705a2f
-device/google/cuttlefish 31b9d5df08ebc7c8f154d6db267b03e321a50b07
-device/google/cuttlefish_prebuilts 63f11acf19930633db9112743a2d4859c0ca5039
-device/google/fuchsia 5811bc57e00e0e9715aea842e0ad72a73f3a3c0b
-device/google/redbull 396ae2c358b8b307ba2731804886364d0b26ff86
-device/google/redbull-sepolicy 87f6769eb21e399745570bdc6fb1fd3a05d89f9d
+device/google/crosshatch-sepolicy b6ce268b28c8f51b8de35ceb68a8895f6c89ec5a
+device/google/cuttlefish b84124448b227e7dd93280cae5c657c927fd6c22
+device/google/cuttlefish_prebuilts 160b98814ea94dab6d6a46780940b689c8defbee
+device/google/fuchsia 972bf6f6872f058c6762f3614d7ac8350fb9cd01
+device/google/redbull a50a240c0dbd4cf027e799bf907112e71c08783c
+device/google/redbull-sepolicy 7f00d8fa3113880afd5d2d7c289e5addc3f5be9c
device/google/redfin 851d259991a0eb7aed7953b32bfce78fc2515d87
device/google/redfin-kernel cea228ce6fb5bce8400b4a910f1af28c2b619442
device/google/redfin-sepolicy 37ebf4e920883f54f7438b081489c8a372a59eed
-device/google/sunfish 2b88fcebf403ddece9c54cd0baab5b27536a3f21
+device/google/sunfish 0138da03a613cf6c99ece7eab24f6e5c428f818a
device/google/sunfish-kernel b2b456c2f923dd0e1a694a8d0766835be116e33e
-device/google/sunfish-sepolicy 9bb558fb9d311ba519d57fde0b72ef4cb5d46646
+device/google/sunfish-sepolicy 4469f0e00cedd92a69959c764a11ed85d2cdf14d
device/google/trout 827ec90e79c560113a823eeddf1cc9f531762a07
device/google/vrservices d782c7470ced4326cc20f8819cdce98eb909aa3c
device/google_car 572bec54a7d4cd9efa7c79deab0525dd8f586ffd
-device/linaro/dragonboard c165a89c0fda278d3e45d6974ca984e5a005a011
+device/linaro/dragonboard de6ba42ace4291aaed31ac211d4f457f99999af2
device/linaro/dragonboard-kernel 7275c6f05d36b48a411204a892a7ec11a424990b
-device/linaro/hikey 9a2d4b500796812a0868f63892b7f898b60f6a73
-device/linaro/hikey-kernel be1d16c52c7266c7eefcfeff4ab2d9f418791000
-device/linaro/poplar 61828b6c10a401929bc954109aa41227f3ccc651
+device/linaro/hikey 4f24664d454fefa7877992d860aa9ec2d24e7a27
+device/linaro/hikey-kernel 18f96414721b76371ed06fe0364398e8da283596
+device/linaro/poplar 5d0311b3d22597e9c5f9da26d870cd5ef59893ce
device/linaro/poplar-kernel dc5a5f37e19871ed67bb9e9209e7318bb3e6ad31
device/mediatek/wembley-sepolicy 3b003f2110b8a6605d7bb1f59bf4c7ab6e7a299d
-device/sample 15ba6e042798265a4fd1adb86bcb02d4124fe45f
+device/sample 7b4d50e1a7f2c47a833fb4c903d1c4ebc8faa599
device/ti/beagle-x15 dd19a5b0cc0aec8ab509467aafd675159fb83373
device/ti/beagle-x15-kernel 8aacfce3cc5e2a17970c5af35cffeca6f5eed4b2
kernel/configs 80b59337c496ef40a70434bbefbe6e9fdeb4f43f
-kernel/prebuilts/4.19/arm64 6332d7c407780c15e7d73bc2527d0429a669f26c
-kernel/prebuilts/5.10/arm64 0666f6c27f33bc3b9f2417e6652c39d8b32775cf
-kernel/prebuilts/5.10/x86-64 77444a3f5eadc5e29d487d20e055d76cb11cf471
-kernel/prebuilts/5.4/arm64 2c5c40b1a1dce8f3fcff003ac330f418d9578731
-kernel/prebuilts/5.4/x86-64 44cad7af6f3ed04479763fd4d4363d671ba5faa2
+kernel/prebuilts/4.19/arm64 466adced29033d68070e99043ec1f6f8931c087a
+kernel/prebuilts/5.10/arm64 7f48e4de6bd77bcb7b79d8fa5eb4dd8bdb3f2365
+kernel/prebuilts/5.10/x86-64 b27ce587f6c82c55eb4382bce7e9f18a0f1fa9e8
+kernel/prebuilts/5.4/arm64 f76e70779964b24f6784cc2ce046866385153112
+kernel/prebuilts/5.4/x86-64 1be9972137f86063e5ce2b14a3139b59627d6be5
kernel/prebuilts/common-modules/virtual-device/4.19/arm64 31fa2c2d74f8b3659d8a2093f727486c4d890540
kernel/prebuilts/common-modules/virtual-device/4.19/x86-64 396ea43be7fdb2f7fa7f5ebf3e9aa2a3491a0e68
-kernel/prebuilts/common-modules/virtual-device/5.10/arm64 f48c41fbd6321e664a4dd8a531bd6db609d18b86
-kernel/prebuilts/common-modules/virtual-device/5.10/x86-64 2470a222b61f19134e13f555d185930b681124c2
-kernel/prebuilts/common-modules/virtual-device/5.4/arm64 95f158dcfcfa086c022f28da0972534b45d79540
-kernel/prebuilts/common-modules/virtual-device/5.4/x86-64 5f2046ae70c0dadc08dca124626b61f087fef775
+kernel/prebuilts/common-modules/virtual-device/5.10/arm64 2930b04ab8af2ff4b49bcda6d29d2d4606e4089a
+kernel/prebuilts/common-modules/virtual-device/5.10/x86-64 c9cc01a7c498c27f69b455aa5a4d48ff4aabe12f
+kernel/prebuilts/common-modules/virtual-device/5.4/arm64 1d935d41303dc1ddf958e94389b0e53c3709f0db
+kernel/prebuilts/common-modules/virtual-device/5.4/x86-64 48135bb8b36e547d34c9c5bbd67df053a8cbf3eb
kernel/prebuilts/common-modules/virtual-device/mainline/arm64 c413b2256fc3ab41da32a5b790bb8f8a465f4cac
kernel/prebuilts/common-modules/virtual-device/mainline/x86-64 8bd5dbee62d3a4e2666123e138f34939d9162b07
-kernel/prebuilts/mainline/arm64 87376efb176e406b0f7a65c12aeabff5451c5a0e
-kernel/tests 2312925477f11970ab50e8ca9dd562a8593369dc
-platform/art 68117b589379cfe00743a142364b5ce9586b57b4
-platform/bionic 6b2500bb43928059afb2cad748b732c808381669
-platform/bootable/recovery c961cbae7d4191c8dc1dec5ba551cf658dfd31a4
-platform/build cd66ecce1da26afb522d8c29cfc48cc80e3c2dde
-platform/build/bazel d3d66fcacca0c8a079d0ea0b9e8350bf28ebe7d6
-platform/build/blueprint bf8863f1fdd6710bc9a98f08886b6e8e3f504fda
-platform/build/soong 303c290df3f69b0eee89a3a70b17a90acbb0637c
+kernel/prebuilts/mainline/arm64 e49e86aa82fe4c7aad0cb9ccedfe9b79b8def744
+kernel/tests cc8df4bff6445bd192da38d0eef8196076c35ebd
+platform/art e5b4d703c5b79a9bf78c5143c85272d20b3e8aef
+platform/bionic 0ab91b28f6de3d51c2db67c859d20ac851900aae
+platform/bootable/libbootloader f8d38e3445e4c697160d020eb09fdc7463afbb31
+platform/bootable/recovery 4ab5ca08b48f50d9f6a0580c7fdd6e2c1bfc31be
+platform/build 238ad5d6d9df223d917b4a077ca243749d642235
+platform/build/bazel 31bf41c30cbcddc2b58cc49d61b2d00f37b2af17
+platform/build/blueprint 48c3302e0ec24a8a4c63c0013686a5468b10b11a
+platform/build/soong 0701db877d402cdb6450b895702ad786768485f2
platform/compatibility/cdd 9136ee763c05577d985affbd95cab0df218f2f6e
-platform/cts 7835ca4ffa0824f5160a9f8f4b45187a0408f744
-platform/dalvik 46b60d77810d7947c33f51c4dcad835d93f84554
+platform/cts 2e8b590a8b8d62d764815a25201c864ed63c8fbf
+platform/dalvik 68e226528af2dbdb087d36ecd495e6c7bbb98c50
platform/developers/build 2bd93c7f89ef1d4d1968700a79e6faa3ea4cfecf
platform/developers/demos 03814c35b8ee0a1284c667556260124d97466b28
platform/developers/samples/android adf9aee621ed59e60b277b407c0e0ab2e0f07f96
-platform/development f2f62f2b8c55f909ce5509f5a4b5a39ccda74c5d
-platform/external/FP16 42b1761a2ca296894a90e17b0273d69967be45f3
-platform/external/FXdiv eadf08a7ca62925b2f953b2219240007b507fe49
-platform/external/ImageMagick 6e53b900479e9ccaada625764abc3a858d79f579
+platform/development 7f6b5e54510e054516edff030104ad7f592c2713
+platform/external/FP16 b9cbd0b151f9d780350ea15769382c416dc09cdf
+platform/external/FXdiv a1de7b4e8a93be019ed6de94398dd8044d305514
+platform/external/ImageMagick 0f050b13bc12fb54b4d5e097a579ae5849a05798
platform/external/OpenCL-CTS 600744d85d3a59a067dcf79a3050acbca8ac6351
-platform/external/OpenCSD 17ef06f5cc4c17a06ab74060f8f98bbe482b1743
-platform/external/Reactive-Extensions/RxCpp 176365f646c1966f8ce2cca18aa81b4412605782
-platform/external/XNNPACK 7435fea8844e7aaed6635436371de6f95e619ae5
-platform/external/aac c96939127aefbbe9fbef5ddd16d706c55cca975e
-platform/external/abseil-cpp 6e3f41b5f470bf466d5f151881cf093292439a2e
-platform/external/adhd 546a40046923c97b6d49e4dff402ba0c9ac22e9a
+platform/external/OpenCSD f885d144e34a4ea7ac02abd44d4fa485f369a29f
+platform/external/Reactive-Extensions/RxCpp 2b82fac5f9c8e0c51f35ca1106af62b35b892159
+platform/external/XNNPACK 6898860f966dcf7d8ae8e31cbef8cf0b5c4b57ad
+platform/external/aac 9101ed6741199b9586005b281f951a0e255c0abe
+platform/external/abseil-cpp 8a5447e64d0143c265dae69ae9fe3b1aa21d4eb6
+platform/external/adhd b0a584c939218e127c14a91f0671c99fa933f79a
platform/external/adt-infra fb4938345b8640c51308cbd96799d876e6c9b7b1
-platform/external/android-clat 98b21f6fdcbb350d19ed7e11c812a53a2a9c1fd9
-platform/external/androidplot aaeb61f65e82b119a4784849e49477c1f4a8582e
-platform/external/angle bb6e178b1ef0178d4e370bb435c1b00f10a4e7f8
-platform/external/ant-glob c7d1230ecd3ce093bf0eb0ef7db0bdfbad74f0ee
-platform/external/antlr 4361178510f5da80d80e034c43eca34a368f3262
-platform/external/apache-commons-bcel 6d91d04602380cf125b7e3158832be9c990e6643
-platform/external/apache-commons-compress fec61ebc07d73129d9222d255da31f4a89238652
-platform/external/apache-commons-math 6d0deb2eef113c647e83ad8f915b65d56dde73c7
-platform/external/apache-harmony 1966d8001896ed5a4d56ff58dcf0efb0d6b90f87
-platform/external/apache-http 3617c8c52882b0c7c3dd668f95a83799b2b98e0c
-platform/external/apache-xml 28d55dae36f482c22336c5e02811c3a918d950c0
-platform/external/arm-neon-tests e3e3de56a1309b943845d26f1b7c2d2bf6712265
-platform/external/arm-optimized-routines 8c48b6c4b2190872ee79b51f6d6f1d81580dc90f
-platform/external/arm-trusted-firmware af185dc7eef722135ce3fba658db894429aa03e6
-platform/external/auto 4dcc1ab521cfdf2e80a740e5a73c766d1549f703
+platform/external/android-clat 6d8f7f2af191b0ab4384818cd68c515394b6e56e
+platform/external/androidplot f018b8808a649e458ccfbab3486ff0ab4c3ec81b
+platform/external/angle d41acdef44845c8c35d1ef7c741696f4fe177ebd
+platform/external/ant-glob 8985f690c43dc4e6b5abccc233ed6ff36ffd9fc9
+platform/external/antlr b75ee09dd213c81d96a0ca4a86704f54452df9d5
+platform/external/apache-commons-bcel ef3102b0380a252102f9f961e7004dfd9e83aab2
+platform/external/apache-commons-compress ec0afb5b90b4ef5b85c0bc14634bc2c3605366ee
+platform/external/apache-commons-math 7d6731d83c816ab6f43aa4a10949004a85ef474e
+platform/external/apache-harmony 4ff956e3e69f928c2956465e999af1e5882a4e54
+platform/external/apache-http cfaccfda76254b3277a9c9f5a17361cefceab3b4
+platform/external/apache-xml bd93a39a8cb4249b9612a2fba9ea4da2b66485c8
+platform/external/arm-neon-tests 02fd7b8a2cf8e58cfc6f69c3f74f6b300af707b5
+platform/external/arm-optimized-routines dfb8ccab3a8d4b38a8ae59a6173d16bb55837c04
+platform/external/arm-trusted-firmware 04a88946e189fd93ba9fe8bb4d6c2869d967f9bd
+platform/external/auto 1da05d2180a4078690905a13c1769bd840fd2073
platform/external/autotest 6bea74afccc0e959ce3ea0bbcc5bde2abfbb1fba
-platform/external/avb ded6ac2b406a1747f94d70c4edff8dc9460a7e6b
-platform/external/bc 04009a7a8283742d57833d99c7011d8cceaf357d
-platform/external/bcc cf10822244611c28a22e0ff3aab38197e4400387
-platform/external/blktrace bdd3e46e18953b5a8662bb642c2ab82644bfbbbd
-platform/external/boringssl 648a40352a326dca30d99ee1709efb7d673da924
-platform/external/bouncycastle 09ff4b7d6306b448e446cc9f68c247ff7c411043
-platform/external/brotli a2d3eb5aeb4ebc1ab6ed67ae0391e66afc5f9fc8
-platform/external/bsdiff 74f3be77e65b6d90555bd8065b7dd5c7e57edaa0
-platform/external/bzip2 a9a5eebff073f89e489256a0ef3ff6fee4eb9685
-platform/external/caliper 24f063b0f1c193923a9e27c67c89790916b52b51
-platform/external/capstone a40474aa3a7fd801ad805855afed3e15501c1975
-platform/external/catch2 c1cdf1b70135e7b6a29da17a3a0c02b9df314849
-platform/external/cblas a79307253683a61e7c0e19410a5066312fce86db
-platform/external/cbor-java c282f95d5bba10280377fbf8104b90404a718d31
-platform/external/chromium-libpac 56e09d4004785affdd3a449371b25f6fa45419db
-platform/external/chromium-trace 7595879ecd15fcd4b46d9dcf7b24057f07855e98
-platform/external/chromium-webview aea4032859a91fbb65a9f57be274ba4df5079251
-platform/external/clang bfa8dfd5e9c5a326270dd88684a93bcf1b2660ec
+platform/external/avb 6f70f9ac877ea10bccfa8e1bba5144d1d27146bd
+platform/external/bc 4abc8e3fcd0ad334b922b5f55f45e72bc6a9a990
+platform/external/bcc a41cb7fb5254b0bf9cce9c5be5725777ec7024b7
+platform/external/blktrace 543ac29f8d14b90901e4c1acce06b59b871f5db5
+platform/external/boringssl c852702cee32ff4e874f0e689e93108c516fa9d3
+platform/external/bouncycastle 94113c9a06e6f171a833a5d8d5cbaaf0c76f58cf
+platform/external/brotli cc23df4db3c1a74aea36ad3b4cc93cb8475ef98f
+platform/external/bsdiff f8d134b31347319fa4a6f3e6225506e83802d01a
+platform/external/bzip2 0f40bc5963f2e8543f25a39175b3e7685df27e81
+platform/external/caliper fa0c483eab3bea1cb14e239625473b5ab35de2fb
+platform/external/capstone 2dd8c85f828f4692d88ebe8217450a386baf8366
+platform/external/catch2 b593c39d337ccb6ff12f9159c268ddcdb60a0421
+platform/external/cblas 80ee48529625aee1472459ac6cbe5cf944cb819e
+platform/external/cbor-java dee8f59724ca6d22d5c6590dc79a386db28009f6
+platform/external/chromium-libpac df28d129424202cd906124d5bf927dd145263bce
+platform/external/chromium-trace 26ddf24dfe1f0bfd961ee53879a17cdd89bdcbed
+platform/external/chromium-webview 098b346d8c581d609f8a10a0281329343b8be727
+platform/external/clang 1df15b3827eae2aa7a6d23c306b55ad2e6da4b32
platform/external/cldr 622c1483bf081d74cd8b7045e4fe82bc0cc6ceb4
-platform/external/cn-cbor 3d023aea8ccea799bbf49654812e419b9f8236a9
-platform/external/compiler-rt 3ddc9f146fbeeac94402b85f939a24a8531496f7
-platform/external/conscrypt 277be5e1d541dbf2f3ccc245f19b1c74ac5513f1
-platform/external/cpu_features 481a459f4ae6cc56c8132b84e5a68e8eb2da62f8
-platform/external/cpuinfo 23e7dfa1fb622cafa4a50c4275bfeb81dc7bc9d6
-platform/external/crcalc 631d26a71f73a0751e2ea3eae3a7262a082d17a8
+platform/external/cn-cbor 573a02fd43ee532a469703a7dcd69a447a6cd7f7
+platform/external/compiler-rt ad1d6d27b5527e527d9f13420ac4fd0dc78d3ee3
+platform/external/conscrypt b0d5db01a8d7e198348643c8b83f0e94fcd59a5e
+platform/external/cpu_features 66e0a7099cf852ed51774b408dfaec97bd1db801
+platform/external/cpuinfo 87a4b97bb001e709d06c42de35af128b227eeb99
+platform/external/crcalc a63fc8b515a8bc55e4e97f95c8220668859301bc
platform/external/cros/system_api b8ce2aa98fd8b659666eaf8df8427f19cb11129a
-platform/external/crosvm c70918f27c45b3ac3cd808a119592755379edf30
-platform/external/curl 5d3aecd7eee01110ce3c970c9fa03faeadac2067
-platform/external/dagger2 9b7441c962b94bc32d9bc36e72260cb2e3e2de15
-platform/external/deqp 25b67cad0c85b39e292f97d9a10d24a86789b8c4
-platform/external/deqp-deps/SPIRV-Headers a441fa04902d517a83729ad62d02d614824f15c2
-platform/external/deqp-deps/SPIRV-Tools c2d72bfefcb05851552701ceade03667d8f7f28e
-platform/external/deqp-deps/amber 6fb1f40ab26003f025e50cfda34b325a9960080f
-platform/external/deqp-deps/glslang 8651b892e34c8c05007e014ab637ce9aa216f83a
-platform/external/desugar 149e5e0b1e8d4ad63d949272907bc35af96e4e00
-platform/external/dexmaker 751cfd57d05c57a74614319e3f17a43856ac4968
+platform/external/crosvm dbe40c3c2d87ec432fd894b3295cd119a9c2adde
+platform/external/curl ffc1505d24b2d8d2715e0d1f633a5a4de629ca30
+platform/external/dagger2 73c4552e20be8f4f35be7c976283c1277d07b418
+platform/external/deqp 46ed9a4faae2a284fe0cc62007a9a805480628c3
+platform/external/deqp-deps/SPIRV-Headers 65eb928e271d08654eea54dbf740e9c462e7d1d8
+platform/external/deqp-deps/SPIRV-Tools ec673c6825be7ae877d38540f9218a4d2bde7ade
+platform/external/deqp-deps/amber 25b9079b9ede47b6be3d640463f97bcb01695dba
+platform/external/deqp-deps/glslang 5c60da63cea283c8d68f44a0bebbe26ce2a49d9d
+platform/external/desugar df32b996ea38f31cf5964d73039dc1788b15160d
+platform/external/dexmaker dedf49e6a58aedb7327657dbc3767137abaac956
platform/external/dlmalloc 70da7be4c21c6c89360e57b35fa792d9636d5384
-platform/external/dng_sdk e2109b72f1d23ed3e0b9c833166838a9afe07d86
-platform/external/dnsmasq 312a5a729a95f51c934c2381d3979aa47269f7b7
-platform/external/doclava f195ddaa22892f4f345d1e1c6f2e63de9ac2e512
-platform/external/dokka dc370a2ff4c23a1fd6176aecd4ecf57090a2db58
-platform/external/drm_hwcomposer 7b5e38bf20ae938ba3f6fce17d9676205bee553b
-platform/external/drrickorang 66276933858f0ef930f7c7af378dd6740b3f977d
-platform/external/dtc 39ede8763fef68ca699a1f1c6b3605d7f2a40895
-platform/external/dynamic_depth 3a20b3a38c060e5f02aa13ec74ae936fe82b6182
-platform/external/e2fsprogs 1246681f71f854808a7794842369b825a6ffa07b
-platform/external/easymock 4419980f7c610177ded79786cfb1c5547f141165
-platform/external/eigen 97c49bf2e05a0eb2981a7ecce699f53b238f4a8e
-platform/external/elfutils 16d8670c054cde7dd3f831eb1219abe2b77ebed9
-platform/external/emma c8f185a5727f09556b8b6e10fdf15f225d12cf61
-platform/external/erofs-utils 4c3e7b73d06c3a8e00f20e5959f303b023ebd2d4
-platform/external/error_prone 1cb951814b7db4fc3e5b91c0b7d655511f2ead7d
-platform/external/escapevelocity c5c5c813cab1144a9915d153c46051967fa5c32d
-platform/external/ethtool f20f823cbb5d450b910b1d637b517a11e4c21ac6
-platform/external/exoplayer 60dac170daca36f05db47667467811b079761367
-platform/external/expat 848f15bb0b672013ba770b476e475a336907db49
-platform/external/f2fs-tools 44131270dc8af092bbabe70edc5a09f8d9178928
+platform/external/dng_sdk 82d88ec2769f0944e9721a37e8a327d907dc052b
+platform/external/dnsmasq 69cd1fc3b7da2f5ac9d2882188833af9f78d347d
+platform/external/doclava ed1872de6cf39a73875645832caa2b83e9d3b37d
+platform/external/dokka 6c8465d3bafd79e0a8e520fbcb01d37d4ae7725f
+platform/external/downloader c0449c875310544ac46adc4334635bff8a86a495
+platform/external/drm_hwcomposer c20f5e96b259b80c160f5fa9d93ff8d1741a486b
+platform/external/drrickorang c7f34a5e87ede8ecf297b05543dd77a58eaf4454
+platform/external/dtc 1cbc6dbd82e08e94e97de1e1c77d7095d1c57212
+platform/external/dynamic_depth 85a76a747428a717a631e165855201561b9f9888
+platform/external/e2fsprogs e263d6d85b46b4756bc6d8faf9d936891e29a638
+platform/external/easymock 998fad1afe6b19bf67c382a4e83c245999f5f1ed
+platform/external/eigen c3e6e3519fbb9535ae810f1e742759a96148faef
+platform/external/elfutils 76793d2f2700fa623848f85fcd1c5a25c712a339
+platform/external/emma f992c9dfc2fcff506b234f5435947bf1b16c72dc
+platform/external/erofs-utils 4730e6cea9bd4426a87293f9a56f487b00963ae2
+platform/external/error_prone e9dfb20ba1dddcd26cc171422809c116b32d3cb6
+platform/external/escapevelocity 4e3c3fac5c9a03acc723d0a33eb80ea05f7b7690
+platform/external/ethtool 379a7d6171721abea5c381f2a3719a50238e577d
+platform/external/exoplayer 6058a85ee809a54277ac90d3f67874181afcb64a
+platform/external/expat 811c28f940ccfd9b75d68f61e002233acea59a86
+platform/external/f2fs-tools 890641892f41cda3fe43f942c182781c12cbcb5b
platform/external/fastrpc d66b565370ef6c6318dd83d0c7b5499f28d04cae
-platform/external/fdlibm fd106d4eabe0fc8f9a9ffd21f787e936ac1bb500
-platform/external/fec 91bf3933f38ef47f4528b6d1831c93451da0a112
-platform/external/flac 37bccac8dc9136581a98fbf9bfbaf6a54cfcbd58
-platform/external/flatbuffers f6ca62f349add9e6ddf3badce007f68b95220467
-platform/external/fmtlib a46b85bca8b9d55a4ab841929f2eea8bb2c808f3
-platform/external/fonttools b546dbcefd8860d21158f37bc7a9593da59f8dcc
-platform/external/freetype 87b7c0a4ce60daeb1098a0aa1761dcc3bc212865
-platform/external/fsck_msdos da7857e578ae21286935315a10fc7e7edfff997c
-platform/external/fsverity-utils 8a92fa826f4a711ff679d27aa976da42883201bc
-platform/external/gemmlowp b7ddc66b9c56e913ce3ad8e00ac8c1a3639f7b6f
-platform/external/gflags 26cb7502afca37c49afa155b3d285b6c5d5e2254
-platform/external/giflib b8d31dee636d815dd74aa538bb4738ede558dadc
-platform/external/glide 8962c36fdbb12c14d193027d76dffac14b162459
-platform/external/golang-protobuf 5ec839f832f3977aa981de411bad838cda9ea4aa
-platform/external/google-benchmark 166f580716e8efa345bf703467e2802fa7b4ff4c
-platform/external/google-breakpad abd303ceb0db9630009cec2faa6181e8c337201e
-platform/external/google-fonts/arbutus-slab 020278e744fd14dbd44efb81335f1165656b6f4b
-platform/external/google-fonts/arvo 67afcf7a798736cdbeb4e21ba2ebe5c39ad130f9
-platform/external/google-fonts/barlow 5c46b915513023cd471c471b25b75a47729d5b7b
-platform/external/google-fonts/big-shoulders-text a0fa48e93261ced294b9e149ca8f9cb90466743c
-platform/external/google-fonts/carrois-gothic-sc beef36efdc14043ecd5e207943e78937d1721227
-platform/external/google-fonts/coming-soon 7cf35fcb8cd066d3dc267be2627df40f4bab5261
-platform/external/google-fonts/cutive-mono cbc44818eb3b1af8f63fa80ee86ba19297738706
-platform/external/google-fonts/dancing-script fe2e3a34ab919939615f015151cc019bd07d25d9
-platform/external/google-fonts/fraunces 9ffc2f9af6588105a196dbcbd97d75fe7661677d
-platform/external/google-fonts/karla 907f2d8c1df1aa13f428ad52edc7a7e0a1134e5e
-platform/external/google-fonts/lato b958dd06dd05229ba89c201a1b64727b9f3771a9
-platform/external/google-fonts/lustria 9aaa3b1072636d0daa8f620165bf1ace417637cd
-platform/external/google-fonts/rubik d770cbbd417108eb61ad460b6a65254f0c385b60
-platform/external/google-fonts/source-sans-pro 865104405cd96c71671b3d0be6ed060dfaa33066
-platform/external/google-fonts/zilla-slab 71f4c9bf4d17a3eb3c8b656a8c798ef0038e8a5c
-platform/external/google-fruit 7249013eb91b756bdaf0fc49ab6eee0039243f81
-platform/external/google-java-format 08695867e071e16fdfb802ca7930dc0fccb942db
+platform/external/fdlibm 642628e05c47db5437b0ded9a910737196325b4d
+platform/external/fec e536b81c92ab7b0cb08cfc28547e5256b31dbe56
+platform/external/flac edbf760d714de5ae8b8ff3f4e8a4533ab6295957
+platform/external/flatbuffers 05d7b689e93c5b38b7f7a7efabf90f80de639c3f
+platform/external/fmtlib cdc34df0c3ffd259a6a74c41d29b0b830f9d87d3
+platform/external/fonttools dd269f168c7d93c2d5fdb988238932226c2b25ae
+platform/external/freetype 11c97673141f546934261b9a0030bd7e0734aac8
+platform/external/fsck_msdos 867523c38d3b14830cff1f45dda217609a20a663
+platform/external/fsverity-utils 4f8481f1c78f18c685f2e0422d9f0a200f3124d3
+platform/external/gemmlowp d85f94c3d5b5d37c69840b3b163a0c20c42e6d1e
+platform/external/gflags deaec92d289d40e7380a3df52c7c754b3f184b9c
+platform/external/giflib f9b72e00a3cb86b21060091c3685c1075d816c9f
+platform/external/glide aff0e27761f4e47f6c5ba8a75d4dc77a6e520281
+platform/external/golang-protobuf dec51746b6a5c0bfe958cfd0d5cdcaf9c865fe92
+platform/external/google-benchmark 22ff819b7f2cf0a9d3225edf0cd677edf65ee997
+platform/external/google-breakpad 1b4066b384d158480011574f89c2b33cb386716e
+platform/external/google-fonts/arbutus-slab abaf3cd25a595f4c2a33cc1e7db1c3ac1790eb19
+platform/external/google-fonts/arvo ae24169216882e3767ab9fc0d4f211c9b44a1b60
+platform/external/google-fonts/barlow a3cab69c46d32098c3c90b001e3f42cbfcf6409d
+platform/external/google-fonts/big-shoulders-text 78a5c4fb80e98777f70eeed3364554585a45ce5e
+platform/external/google-fonts/carrois-gothic-sc d1df5b0735c6e21c3aa33b5324c9472feb93a246
+platform/external/google-fonts/coming-soon de5b52bd93d6c252e542c5e547c8504e4f384525
+platform/external/google-fonts/cutive-mono c416378dd7b6b485969faec27c650840444e4d15
+platform/external/google-fonts/dancing-script d57bc0b6c0d90a6f688e65c0d83a500dc1014ebc
+platform/external/google-fonts/fraunces 0d69e02bbda3ac91fd0956199b0e2c7b5be88a71
+platform/external/google-fonts/karla 24b87868f84ecbc6f364abae718f368126d1e76c
+platform/external/google-fonts/lato 9ce13fb5956ec7597178ee702f7fc58cbb15ff25
+platform/external/google-fonts/lustria 83ea42f69fb930ed537ae2f86a2e51cc3453ba72
+platform/external/google-fonts/rubik 38bff40a3942f176e7ff97c063e3c71719546a81
+platform/external/google-fonts/source-sans-pro a0d7d938e33775f18ab3322b8d7a0d2fb5fcb2f8
+platform/external/google-fonts/zilla-slab bf3d77d6af0665af7e16b5e345fe58575052f1be
+platform/external/google-fruit 6d74389b2c631ab8f37d128a726a3c0ddc529b9d
+platform/external/google-java-format 838c2344b1f62e878a68f16757eb31af806a604d
platform/external/google-styleguide 0b28639e536c03a19b520d4c294a281064f95616
-platform/external/googletest 382ca9ccf5b39536c24abe8a6723fa279fe41cb4
-platform/external/gptfdisk 3ceef5ae41163d5dc58c4601abc54ca7ff3d9afe
-platform/external/grpc-grpc 63d0eedc42401851993cac7be6826d8c0df81d72
-platform/external/grpc-grpc-java 2b42a0859ae2d4d1e787571e2c1c3f7822056058
-platform/external/guava a43848a90efd59fada4930fe99e6a24d12c9053d
-platform/external/guice b67ef4c82de4e78f9ca727af8fe813f1595218dc
-platform/external/gwp_asan 347bd70b61016f100f38e163fed36fc8e94e1c19
-platform/external/hamcrest a88cf79fa6cec695cf6e5de6cacbdeba9ed73428
-platform/external/harfbuzz_ng d71b79b131fae6ab1c22ff9e993a68c8deba37a4
-platform/external/honggfuzz 9753ed4234cf5389522a06f89b443a7301c46c76
+platform/external/googletest 85252bfc86f3d34411b942b1bff5563c22f7b827
+platform/external/gptfdisk fedcc195f2d44db6d337ea8b2455b5f4f6b43ec5
+platform/external/grpc-grpc ea04c6c49766b95bfb7cc3e4354fa2e84694e2f4
+platform/external/grpc-grpc-java b905ed91d0d5e9f177f771df3073a9aa23c7ae21
+platform/external/guava df96e991152d0f73e1718cbb4c9d6e28e2bf8159
+platform/external/guice 30ffd841ffb152ea8514c91a9e00130fdef3f70c
+platform/external/gwp_asan 2dceee59fba439082bf4ab3badb2ff10dcf2e6e4
+platform/external/hamcrest 5b109acd87f45a4ae4c798d98a6ce2875f73c14b
+platform/external/harfbuzz_ng 79ac99e5388f85044bf161a5c5f7749a90682656
+platform/external/honggfuzz 71aa60c5e5e8f38c4b281fc1f20cc8514e4e25cc
platform/external/hyphenation-patterns 7fe89949e5de5b01a12e16715bd877f7cbfb9e3d
-platform/external/icu 40eb5b193f1f1a34badfb0fa920106fe7411bc2a
-platform/external/igt-gpu-tools d5fabf41e55d7a194f41be0c4fcf88f4441eba31
-platform/external/image_io 0da353b512352b976fb28dc4a142d90a926c9a22
-platform/external/ims 04a4852c5c69bc58dbbfcf370d6dc046909c2a7b
-platform/external/iperf3 9442401b62c11eb83a4e790cc6510a1266d1b10f
-platform/external/iproute2 0022f23f846f47c7edbe5012a7055af26d2feb03
-platform/external/ipsec-tools 870e5ebbfcf7934e94592a5109a5da55a725fd80
-platform/external/iptables f8c66cc7d4ed45ea1602d98df251d0747aba8a54
-platform/external/iputils b43d5a03fc63a1939f592724f021b296a10b13a8
-platform/external/iw 4353b7b8280e769b487c877329f3ad626f1cf856
-platform/external/jacoco 065e46b0f0157d77423566b6bbc66bb2ee102ba4
-platform/external/jarjar 09df34c0841167a8e120fae2e5b9393e19bc9c85
-platform/external/javaparser 3a973fa9b8c86f2732b4be98eeabe2c33f33731c
-platform/external/javapoet 22c18bb46c88dae832c0abec1af2ec58e862dac7
-platform/external/javasqlite 66b75f97bca7532198e6922339f6eac0a7c69b90
-platform/external/jcommander 79bbcc0bcade07e77aa3b63e54770bb1b4c30e95
-platform/external/jdiff 5a1dde2c49edaf5754b68040245425f53e616573
-platform/external/jemalloc bc1c3fa320906faf6c32e1a106f1d2c966677388
-platform/external/jemalloc_new c3c52d0b9c23c60ef7917b94689ccd78e4869a8d
-platform/external/jimfs 3677679119e26a93581d627d19ec649a8543cef9
-platform/external/jline 2e7700de332f9e82020aa5ea7c6bef27e8d6d665
-platform/external/jsilver 645227228fa27779e57f728c1322728fd72253a4
-platform/external/jsmn 1529dff96f8e8004599b55f881da5cdbcbcc1519
-platform/external/jsoncpp 833a479bc23d6b32f8fa8a3b75ce6244158b76fa
-platform/external/jsr305 fe7f4bde7febd742b7e9aa507923be6cabc756e2
-platform/external/jsr330 1e6a05c78deebc1e78d89f37ae12940d3ec2c516
-platform/external/junit 8bbae834b7e428bdcea76de4cf749e7c875240ad
-platform/external/junit-params 2a0eaddf425ec2629101be89926ce8830f2673b7
-platform/external/kernel-headers 410a78d91a3a776198a24e0a9028f667e92d2a48
-platform/external/kmod c3501883d89a80ac78a0e1b58f9e7a84adb302b1
-platform/external/kotlinc 59eb0aa5e39127799fc9a8eb05dbce6ddef34564
-platform/external/kotlinx.atomicfu d33ce91886fd7bae13a6bb1591375f28423e1ffe
-platform/external/kotlinx.coroutines be8edcfbf8096942fa8614c1a0b269bf8c17e6b5
-platform/external/kotlinx.metadata ce48fdb6d3cc25ba77bb07b551bdfc80d171c4b2
-platform/external/ksoap2 eec80d48750b11c5f8e782a8c90f77ec9cfa7cac
-platform/external/libabigail 16afa280a20440c0f39c65b224956577732b6832
-platform/external/libaom cf1d0a0c5c21b5ea1e1e32c1a67f4246661521e6
-platform/external/libavc 8a420f340b9229dbb4ac8020046ea11aeedd1a4e
-platform/external/libbackup 63ad3d7ef52da74559bd8d56b796d264d6fefdec
-platform/external/libbrillo 2f2dada961091313aff43c5f7ff2bce5ec3362c1
-platform/external/libcap ad53a9cd19b8dc711c1c66fe8637820e2d17cb1e
-platform/external/libcap-ng 1aa4154e11afbf5bf87f544ee2725bbec78311e9
-platform/external/libchrome 088ab4380a10ba6cd09bd692a71d1fb92e1067f0
-platform/external/libchromeos-rs e0cc5d5a1de2038e55acc4bff322a0018f66ed63
-platform/external/libcppbor 7ad4d37dff929a210351426550daf34e7e2d8cab
-platform/external/libcups 2d6a3294e1cfc5c04ffc03e138f31733ffed32dd
-platform/external/libcxx 5fbee609cb2bab4453c2a9e376084cf0cbff0b50
-platform/external/libcxxabi 7fe99905ca09e2ffcadb1a0dd02e24269589c28f
-platform/external/libdivsufsort 6fc04e7df5274bfd45af75fb268d061b1e57e1e1
-platform/external/libdrm 2af8861c56b09c98204f318ef9947264d198570d
-platform/external/libepoxy 25c9f63272b6987cb87f752cacdcd27371565b9f
-platform/external/libese 6a66af75c3883bacd8dbf858a2ea08717c99ab62
-platform/external/libevent 427e3f2d85e0f4eb8837927d73a9f7d533bb6d5e
-platform/external/libexif 87fac45701f4bda2db44b631d596650cf3f70ec4
-platform/external/libffi 182d4f500c4f9b2edc57cedbc7bf51923b320dd6
-platform/external/libfuse 2b1d129f72a728f02599fb0f9657a12c1e4ce419
-platform/external/libgav1 3120ac69ae1d6e510a8b2593f57994c27c2ce190
-platform/external/libgsm dab82515a341eb46e5a9590c876c75693fb24111
-platform/external/libhevc 04b6b998881b067f687b320811f543de48a88860
-platform/external/libiio 8fcb4fb5c580bfd9121dd8ddb93d4eb907d23f9e
-platform/external/libjpeg-turbo 33572142833cf0cdb5c7de23b4a2533069b412b5
-platform/external/libkmsxx adafe4218dec6a4e12af41684e9374997d4f2c3b
-platform/external/libldac c648d69f1c15a62c5052d7dc93180feec74c90c4
-platform/external/libmpeg2 21cafa8a258087ed35849ddc994dbd9beea86ad3
-platform/external/libnetfilter_conntrack 4bb6e9f755198bb2e831e1480247d035a26fe1ca
-platform/external/libnfnetlink 0cdf11fd5f95e53e679f62491af203bc98a940a7
-platform/external/libnl 1bd21510b733cab13d6bd9b2a741fb9d151cf227
-platform/external/libogg 624ab55eae0368eb221fd0f84f795493caeaf917
-platform/external/libopus abf8fc64f8dd0a2ce53b881f093550284a640b3f
-platform/external/libpcap 573ac13abb9818b6ec96882d26a00ac8a396c0be
-platform/external/libphonenumber 60c06cb519ad7e0c8623196a15b3a7d3a93677cf
+platform/external/icu 5c262da4d224cb72b06492acce10d1cf8cee7621
+platform/external/igt-gpu-tools 4c9ecf1095ef509fac03695f4b4e1d877bdad008
+platform/external/image_io d0e86167cb076c141248753d2d751b107270686e
+platform/external/ims b0e4ef6939c1aaed542dba6b6f7201648cb91ed5
+platform/external/iperf3 d0f0777459bb8db0f2abc1c259c5714082689800
+platform/external/iproute2 cc0fca5733d44dac670c76b35147126eb5a04417
+platform/external/ipsec-tools 1c13751a37a23bcaf7073a67de8b254600d08aec
+platform/external/iptables 3513b3eb2e63b41016a997903e2d501f4abf2707
+platform/external/iputils 9bd47e3b853f283209662299b4ceb3f8d57f9ea4
+platform/external/iw 61169bf474417147bf753d30caeff6cf1e7a2caa
+platform/external/jacoco b68e0296ca7f7b3d46ed961757b1b9b0e5e35619
+platform/external/jarjar 7b07f8d2f356afa0a7d3aff0f4a24fc29ed11c89
+platform/external/javaparser 1d4b830394e4373f74e7392935f726847372b691
+platform/external/javapoet 7d642e315866475bc1d2a8db56256ec0c6a5f303
+platform/external/javasqlite 2871345746ac9d9c065493e3f7023c85a990be72
+platform/external/jcommander 304d4cb5c5b8b45ecf01abc342a84c181c5be829
+platform/external/jdiff 88364ce906370e770c34717fd1b9d761db41844e
+platform/external/jemalloc a1f7d06aa4dcba0bf328b7fb1286d6f9382b0021
+platform/external/jemalloc_new d89a8271c07a92843b7972c696829bb4ebe80d73
+platform/external/jimfs 1859b2ba8fe273b8d6cd206370fc16cb15e54780
+platform/external/jline 7de38e748e23109c327dd25106f994b0ed7a3f49
+platform/external/jsilver aab543ee8f2d305fa3000557479745d1155fd0c5
+platform/external/jsmn 492c5d0c53d6343cfe9c725c97ecc5d463b5d66b
+platform/external/jsoncpp d24646b4819efecddf704f4751fc7d595ea39270
+platform/external/jsr305 ac009d564c531046c73bb423ea14425b8cbf30f3
+platform/external/jsr330 0cb8593874903c4cf2880feb5826f317390f0b5d
+platform/external/junit d0e26ddc36960708d32e4d98825e646fab9f40a1
+platform/external/junit-params 0973ccd1ca7218848b81336465711d3e51afd8aa
+platform/external/kernel-headers 8091a28814012a9e2a92fc7ff78428aa671f00de
+platform/external/kmod 2ecafa93de1369352042100aec8d00adffb8d787
+platform/external/kotlinc 38a6dea5b901692e3da6963d131baf5637a77e29
+platform/external/kotlinx.atomicfu fc7b3e8ef49b5de921071d420da2e797d4058855
+platform/external/kotlinx.coroutines cd7ed457e1f125b8d0d216444901033b996212b4
+platform/external/kotlinx.metadata 539270858830aa72b1ff0e157ece65fc1b16cbe1
+platform/external/ksoap2 25045a692cd850a218657c5c467c3f2097f50cc9
+platform/external/libabigail 202cc988e90bad7574aaff51d5e1e411143ab61f
+platform/external/libaom 724b99cd3d1a35b603d71155b1486287df0ca317
+platform/external/libavc 39d515144b5875634a99120ec0e380db063e3b6d
+platform/external/libbackup 033554b3ca1fceefa3a8e757d49a116beb445d17
+platform/external/libbrillo 534360f90ab11e9c1eec6a3500565bbc235b1fbe
+platform/external/libcap 3a0f58a48eb3b52662650de49b8dafd991c54524
+platform/external/libcap-ng 92bf8e3b7b0fa0c5c0770b4f37050a35637651f8
+platform/external/libchrome b8ed6d4c553b68c82d00cd92309b3ea303e8319f
+platform/external/libchromeos-rs e3d92ec026c362f8d4e8d1793dca6ccad4235a5a
+platform/external/libcppbor d7541a13e1bfc3acfff89f6423de70b9e5facc28
+platform/external/libcups 921930809fbafdbf92a2dde62650a99df927861f
+platform/external/libcxx 8321ae79a493382023f6af4c7a77d6b537638da2
+platform/external/libcxxabi d1fb12537381b3fe0079887d1b268426cd34de03
+platform/external/libdivsufsort 16762cd38fecbf91b2e336103d064ed7cf1979de
+platform/external/libdrm 498b131834195e00c424775f4265be678c7164b0
+platform/external/libepoxy 2990f29064c0e48f6fe57a4b42f7b56317f11df9
+platform/external/libese 8aa2f61d69f28dfeb354a0ee5ad2fe6fb09c6397
+platform/external/libevent 483c00dd0a3f645ab85d22fbcf169bf8237034ae
+platform/external/libexif 3b9ed39308e6f07a6755d57fc3c6b52ea7198be9
+platform/external/libffi 43c6440a1dac2b74d7a02435938dfaf63ebcda48
+platform/external/libfuse 15fd59cc57a9c32d1f36790f057f85adc787d19f
+platform/external/libgav1 8bdc73f8d7f711e93715ffe9a2a06a29f56f88b6
+platform/external/libgsm 0efc44484caf1a42071a1de347df01d2ba085cae
+platform/external/libhevc 6945986492caac5a528073f9cadd6ff61ed517bd
+platform/external/libiio 06fae07bb29e3fc8434e1d28a84c483f3625d95a
+platform/external/libjpeg-turbo a29b9fb0b32dc4b702d30dee4474f04d1d40feb3
+platform/external/libkmsxx 3c1644c7d38174ac5469990cc37ae0335c2b1ee7
+platform/external/libldac e9066c8a0d7d12a668d9210504e9bb1f7f35d2d5
+platform/external/libmpeg2 397e20732a733b16138f86fed73170657504e5fc
+platform/external/libnetfilter_conntrack 92f1d30677a0461a311d84f7e40b910e99a502eb
+platform/external/libnfnetlink 2f01b0dd2c0aa9f3af77ad1d1c5bac6ed15b63cf
+platform/external/libnl 05d3c4f95fa3f55cfd6f0c50033c175a8d86b2a3
+platform/external/libogg 59879adb257442c5507ef065dc6278c98a0364a4
+platform/external/libopus e0e21c0158c654336f9111a90d908edcb045a4ec
+platform/external/libpcap f19351419ab5b37fc2e388e5d3c632fc528219fa
+platform/external/libphonenumber d7843a65a63acac55b7fa9f903d2196c60f07a50
platform/external/libpng 6515749eaf0dc5a2d25ed165587ee73b7e86aa35
-platform/external/libprotobuf-mutator 83286c85b05d44bd7c175dec26ace9baecdc8842
-platform/external/libsrtp2 ab029f0a4a28406940911e101806265d1c39f29e
-platform/external/libtextclassifier edd42ff946ea29e5ad0d9504d3698d335fd0a181
-platform/external/libunwind 85f923b4a3fa39bb223d2e4258fb30cfdac2a828
-platform/external/libunwind_llvm 0c91cb61f094269ae8aa7d078fa786993ee8a84e
-platform/external/libusb 7c81d0e22fae57f7ae3c96abf539e7cbc101de8e
-platform/external/libutf c9e2429d014002861c9f18c556c46df68de94c12
-platform/external/libvpx 170d1513578bfdcd3739caa067980658bf5db7c7
-platform/external/libvterm fefdb12913a786ad491b69c6debf01fe3dd5a575
-platform/external/libwebm 01f944e8d430f9000a6513dcfa88df01ac124594
-platform/external/libwebsockets 7bf04f43a5d5ed074b9b8c45718c9d9945d389d3
-platform/external/libxaac dec2332243bb7e00ef873d0dbb8cbd7608dc1746
-platform/external/libxkbcommon 77287289a4d80ddb01f1fadd320d32b672e2e6bc
-platform/external/libxml2 0f7d4a26b69a2a268f1492333d1d603e1f9c7703
-platform/external/libyuv dc865ff5e71c2595614d2e9e418fc4764faacf95
-platform/external/linux-kselftest 29b3d7cd1642ad533f83ed6fa7cae3570801a5dc
-platform/external/llvm 8856f1c33880e6f5d97a290f03a336a6fd2791d0
-platform/external/lmfit 17bf99e9106f09e7c09a060499c821bc281fcfa6
-platform/external/ltp e85650b42ee534607f82f07e2b26d207590d0b37
-platform/external/lua 0a52ce72ca56e3e22efccd91d393fecc58e0f937
-platform/external/lz4 2bba285384e158562a7ae44f8a1094d67ec32b31
-platform/external/lzma 9282870eea3bd53536ac4a3aff7d0c66c03fbc98
-platform/external/marisa-trie dfbfee075b0cee2fdb6f80fae45784578545d7b2
+platform/external/libprotobuf-mutator 0cf207227ed91c1c8f174b55dbdfda39cd1a8f1d
+platform/external/libsrtp2 46cd217cedd3124083b8a1df856263557f74470c
+platform/external/libtextclassifier 618214b78cc5a05a7582c9020e7b4674200b8d6e
+platform/external/libunwind eaf58456de772f8a03589309f2fc6e556ad62e41
+platform/external/libunwind_llvm 73b1ea6975b1526dd18cc498532a5a9ac2623d88
+platform/external/libusb 88ec96d63fb06baaff51c7c695b5c348789c3fb9
+platform/external/libutf cb3ca1d9b1a5c4e7345f3fea17a10b425b0b8104
+platform/external/libvpx 0cded2742baadff1af61773d5a711453dff12bac
+platform/external/libwebm 4d7c35a36b1559ae8555929f2f6cdd74d858a220
+platform/external/libwebsockets 370804f36e6d3511d0e840308528c3e2d01ac00b
+platform/external/libxaac 759bbd92a6901904af42b163c3b7619061bd3dbc
+platform/external/libxkbcommon 41adbe7b2bcd9bd5109f0222b575a9d9e7cadf0b
+platform/external/libxml2 7a9870b596973ef081b4ceaaf2dde34e5f4aefa3
+platform/external/libyuv b53399aee124ca276976a55e8bb8bdc24d07080c
+platform/external/linux-kselftest 8c6a97c56612f4858fd2b55fc020323473d846fe
+platform/external/llvm 81f7e612005d1874f53bc10b8e09764731b81b98
+platform/external/lmfit 7c066ce5d04bfdf4522ca46d26181e64d7585d1e
+platform/external/ltp d7e4d99a0d1971a9da98868c80d51e258fcac1a7
+platform/external/lua 42d3e26019135488b0478d93cbad383aa5e66f28
+platform/external/lz4 5e9ec87dc1a497055d03ce8220a7cfb3642d5205
+platform/external/lzma d4e099ef97aeab5eaffa180f4b79a040f71296b5
+platform/external/marisa-trie 1b1c548bc967cf5ebe967291397978e971af193f
platform/external/markdown ecaa496397f271f4e5724cba2e352a68206141c7
-platform/external/mdnsresponder 577fcc6ab4de31ea197745942ad75118b564ee1e
-platform/external/mesa3d 0d286584fda1e52e0e52abb17382fef1c352a645
-platform/external/mime-support f974cfa3420a72523df3e5d95b65c4b0e6728bd9
-platform/external/minigbm a85f104777eb1618f16e326b7135766dd3a8a873
-platform/external/minijail 58f4a49d3434e0136e3b75716fa86f97b6e8b0ec
-platform/external/mksh 2055504ba9d46181557fe0b815644ce04ac09d33
-platform/external/mockftpserver 88c8b8fe9079f6007cf938d27a4edde721aaa8ed
-platform/external/mockito 269ee6095fb0218bb24379df1c72c00a05568588
-platform/external/mockwebserver 736f572af56acb5cda91c574e4f0b7c5fb1e14c0
-platform/external/modp_b64 a15845cba41fc0c22a28192c67ca321e284f0ee2
-platform/external/mp4parser 3a233558f5994396971dc5c3f578369f17e963c1
-platform/external/ms-tpm-20-ref ecd6d6f8fb0c75dc48539c034936364686c25358
-platform/external/mtpd d79abde40af26607b57a7a74eae97dd8d1bdbee0
-platform/external/nanohttpd a1be68da0ccdc49d117b7236db7e2e37f75d8ddd
-platform/external/nanopb-c b5f07ae4a31fc52baa3d73a8f59791d5def38b47
+platform/external/mdnsresponder ff458309df9b5184a4bfb9d356a7641d9fb66ebc
+platform/external/mesa3d dc4c8bd3947fd3b916837331f376a6003811b154
+platform/external/mime-support 178d02294a2bc5f3b741a970ed555e99f5c9391b
+platform/external/minigbm 24e2e3eb5fecbb8063865c8dfdfba23f05930204
+platform/external/minijail 2312e5650a7bf8000ceb74c0115f0cdd02323de3
+platform/external/mksh 6c548736d07887958542312753618cd1e6f1eed7
+platform/external/mockftpserver f4c72b07389fdbcdb965d6ae47427ed1f083804d
+platform/external/mockito 7766a6f8bf2b6468e27816d54161b0c7a27e3339
+platform/external/mockwebserver 57330b7143e5364d97804f842e6df2913456bf13
+platform/external/modp_b64 55815170b8afced38b8f87bdff8d0f81877a32fd
+platform/external/mp4parser fee0315a4a45e84cea8fb61b588b07cb36c28aa7
+platform/external/ms-tpm-20-ref d44a69547ba52873003f52436cac7e8416987a45
+platform/external/mtpd 2ffe4f766293aedb2ffdea7c0fc16d05ac5747ee
+platform/external/nanohttpd 0c31cb403139fe1e8d2e5bd48b6e6bccbe2cd5e9
+platform/external/nanopb-c 3516aba583e9da0fc39190ebe78b1b7a0d7f7ffd
platform/external/naver-fonts 5a91e834832b722871b0b33c3161b102135198b2
platform/external/neon_2_sse 0e44cc69654d46fed2e6b9b299159c4329d83025
-platform/external/neven e440cc9aaf12fe08a4a7e8504170dbeab043bbbb
-platform/external/newfs_msdos c85bd443a0a3f4b58e9192e44e81dc65d635b4e5
-platform/external/nist-pkits f909e53754c15455c850878a36b0d9d1a8f52b97
-platform/external/nist-sip f263a047601c930c15e8718caedbb6e51e85986d
-platform/external/nos/host/generic ea90e76eb791d57a50f5d0f750a06980a2e858a8
-platform/external/noto-fonts 302453482cf3e5f181349da52942ae8be7996435
-platform/external/oauth c74587a3ad1aa0c3ec4b5b882c5e24372b6e788d
-platform/external/objenesis 512a48f596968b69f7a78d332c71b3001ccfac41
+platform/external/neven 8bf95b4c129cbb0cf7fd22f3f0e610f0efbdad3b
+platform/external/newfs_msdos abdd328d2d8e3dad64283e7dab6a243413fbd27c
+platform/external/nist-pkits b726eb2cf0008dd6e356df49bd79403f55137437
+platform/external/nist-sip 8d940fc40b332ffb5dd532b240e227e612c1c32a
+platform/external/nos/host/generic 9c8a274455871f58deb6e457b5ee398626e8f6f4
+platform/external/noto-fonts ff3f1c34eb97acf6644e0a6868037806152a31ce
+platform/external/oauth e1b67ce5031bcba5ba10db15e873a2d6b9a4e850
+platform/external/objenesis 51dd03873236d2e2e753b0772f6350867c574718
platform/external/oboe 2adb4e6f714e0f46883f60ffc8f5ac0ad91476e7
-platform/external/oj-libjdwp 99573391795ea5c3ea70af8e4f69801f9af97cc6
-platform/external/okhttp 8c8588a78a8bcd605d72b0bf7f8cc1b8361530df
-platform/external/one-true-awk 1cf03f3646264e5322a9d3a701bbde26b731cf35
-platform/external/opencensus-java 9dfd2cd7bbaa2dd39ba39f2a6d7fbf4ea6b27c16
-platform/external/openscreen c308a78ef31bb0a9774719a6f4bcaef5b8e950f6
-platform/external/openssh f095fb523b11eba7db87755beb19be83bc00de52
-platform/external/oss-fuzz 85ca32a4216bf44290ec7949c7de6567d1ad88aa
-platform/external/owasp/sanitizer 43cc69acfb062f04eb0d22e10da36914efb4dc5a
-platform/external/parameter-framework 669ae1458f922653023919af472a86243eb30444
-platform/external/pcre a79584f238e1e968ac6952cd974509cada857312
-platform/external/pdfium 9b9f507efefd3673801486330702b0a1e1f4c0de
-platform/external/perfetto a92b265b8af5558585236a876b9b59221ef144e2
-platform/external/pffft 0ee7f20ec43a24898a11cb42b159b6b5e406fba1
-platform/external/piex 9724b67abb237fbf08d6b713861ff6fcc04a3d62
-platform/external/ply c2f43deeb633e077f83ff09618686e6bc1efd370
-platform/external/ppp 8c0a5393eb731fe7ea70cac18fd947d34f66fd5f
+platform/external/oj-libjdwp 0dabb2230b401923db08e53e944312a05a28f850
+platform/external/okhttp 9aec307ec276fa95ad79c90e089b6addc9405049
+platform/external/okhttp4 73ae9756098533a6fe58aa1149c88f5304f4124f
+platform/external/one-true-awk cbc92223d03eca3e0c83c935095afcee8bf6365d
+platform/external/opencensus-java 2f2c8a1b335e526f5385b147c40d0002eda02e7d
+platform/external/openscreen 76efb73cf24074e6611621732cdebfea23509272
+platform/external/openssh 96a36e9b9fbd9a1aa6b3ac2c1439792bec9561a5
+platform/external/oss-fuzz 6fede6131f8aa6927b2f82df6b5b4f42d74297fe
+platform/external/owasp/sanitizer 221a2ca18ad856eda5c3a5bb9a3059b8ffd11506
+platform/external/parameter-framework 77db73e2022924aecbdfe2e3070598b6ecf71682
+platform/external/pcre d9c4ff30eba111193f51c750b6188feb9111f0c3
+platform/external/pdfium 3f992789e4afc69cde3dbed39fa822bae5b677d1
+platform/external/perfetto 43569048a90c74e4e8d1c73c7f58899510ada7f1
+platform/external/pffft 61fe6d15b0227df64f0e36ce537dda14ef3b7c71
+platform/external/piex fd1e091fd8136abf3415360a50a3ebebf238c265
+platform/external/ply 9f23f5c1139d4fc11ac4344957b3401f006a95b5
+platform/external/ppp e5d6ad48dec06c5a8d7dd8028e46f62e90a2dad9
platform/external/proguard bfa0296b08076d8d97ec9b6cd4f41dc7d7edcc4e
-platform/external/protobuf d617fb662dc0720cecab370cf187bead8ae0dc97
-platform/external/psimd 82ba4de77350cf51e8ea6c13b7c16ce654504a85
-platform/external/pthreadpool f6e0a0442bb12a3df895bb1d21e014e48e5dacb8
-platform/external/puffin 10b045a95ab98bad5dc3014720390cc4637f2d34
-platform/external/python/apitools 39dcb0118026880bf357b3be6bfeeb5803936d2d
-platform/external/python/asn1crypto 8fac395ab2e538d799867af221549f7e9105ca87
-platform/external/python/cffi 774bd58966907bd5dada9ab539d21dfc5a521f23
+platform/external/protobuf 020be0f33d9d3db700155a3e5b06138fffcd5f92
+platform/external/psimd 624bc9cdc0715bb80e673d5893cfcb12797029a3
+platform/external/pthreadpool 86d2b22d62a098fc5b5d2094ff67eba1fa3c396c
+platform/external/puffin 908398a78dd11c2f4d13dcc832ee60a917405a92
+platform/external/python/apitools 8e784a666f937459e631359fd853d5685fba3160
+platform/external/python/asn1crypto bf560573d24c2d010192d40aef8f1d9f29bc90c8
+platform/external/python/cffi 9a4f3309921f6f2a69cb0307a1d05160811eb4da
platform/external/python/cpython2 0c289fc12ab6094229abc798a49cc4276db16b2a
-platform/external/python/cpython3 2790e5edf6702c49fd9cca7cea2df1b842aa32ef
-platform/external/python/cryptography 2f8f2ff18540c6431210dd0400034817cd9a129e
-platform/external/python/dateutil ef14095c18e5826f0b3db081bacd8b8d0d0029aa
-platform/external/python/enum34 efd14e255add84c85d5ef64adc49184c805c639f
-platform/external/python/funcsigs 2eb4c6e744840cd44c9591adecc4cd2f0697be7d
-platform/external/python/futures 46b61491e6137f4116962388fee7730777f9a26b
-platform/external/python/google-api-python-client 5c916f7b20495d37c21b560f10f01bafc4b36e11
-platform/external/python/httplib2 5a295fbcf60fd4e4409db26d54c5c950667c349a
-platform/external/python/ipaddress 6dbdf9f8ad740d35fdb211b11b3218daac74e5f8
-platform/external/python/mock 6abf2526e4db8301b37d5cde3a081534b6da4377
-platform/external/python/oauth2client 8f27b269c7a61f57f3a99a41a6b6d3e38aa4da15
-platform/external/python/parse_type 22f1d91a97b6e29a0117bd98cec2e61d6c6bfcdf
-platform/external/python/pyasn1 64a0f3cee46f2215b18fe4d5cd5f00c58a5bc149
-platform/external/python/pyasn1-modules 3dca53c2f2ce75fcb6afcbd82311b0accf6c8eca
-platform/external/python/pybind11 c1fffe0288f0469fb5b41137586c9218e9e0dacc
-platform/external/python/pycparser 6dc2718bf8db2f33189e429ec4672b9942948518
-platform/external/python/pyfakefs 043e9b153bc99019bf5cd36b3f61ea742d7214fd
-platform/external/python/pyopenssl 2999b3f4185d82316b78bff556bfc52263b7e5de
-platform/external/python/rsa 50ebf97c30793fdff7c6874d623e983266991771
-platform/external/python/setuptools e5782f37ac465ad998ef60d62dd856eac82a353a
-platform/external/python/six d36b693474d1be59d95fdfba9092219f46a0b972
-platform/external/python/uritemplates c815b5365d7cb3a189e893e5eb28fc47a2ff35b4
-platform/external/rappor 0242ae7b70798ce154cf22829806b2ff891b64a8
-platform/external/replicaisland e239ebd41c74e6ee6cb047e65bba10484a14f5bc
-platform/external/rmi4utils 3e230e36e83b8b9f84f4f31e732e584ec6aed515
-platform/external/rnnoise d612469ff4e8d27fecd620bd9c848fcfa86c7f74
-platform/external/robolectric-shadows 51c6326c2c282f78c6c7fd2f25294e509a22bdf1
-platform/external/roboto-fonts ee0f72a6e170f7508109ed337f96f040dfb60952
-platform/external/rootdev b8b5b1dafeb474dbd7a191deea965b5eabc0bd1d
-platform/external/rust/crates/ahash 5b40428910c8c1ed08c3918d28bc92722e449d34
-platform/external/rust/crates/aho-corasick 338b38645b232fc825522beb5f14c2ef020f3a67
-platform/external/rust/crates/android_log-sys 2d76dff5a99a6c13ce0492954ff24a614e430c8f
-platform/external/rust/crates/android_logger 697c6716ca7d7140433adfaf0daca96fd795515b
-platform/external/rust/crates/anyhow d4b941fd9cb8b3a9a57df21f566074f3a675bf57
-platform/external/rust/crates/arbitrary 49e80a2c63b9ea256625c92562a69740d1bd7e20
-platform/external/rust/crates/async-trait a4a543c6508096c4905104656c72c29376a28df1
-platform/external/rust/crates/bencher a9736bda492b937973326a346cdefa66b54ebc1c
-platform/external/rust/crates/bindgen 66686fce54d614dc8395770e137f1c475912accf
-platform/external/rust/crates/bitflags b675bca8330447ad45d67c28b74f8dbe304cb8bd
-platform/external/rust/crates/bytes 3edb1f10d09fb126503be5b0fe486552f77ce835
-platform/external/rust/crates/cexpr b21b14dfb7f7981e61399a5723978bd08825144f
-platform/external/rust/crates/cfg-if 608b6e9a0b97170b94ef884664bce99ba77c9142
-platform/external/rust/crates/clang-sys 4b3491b43e640dab73bc2e8e22e10f5b43b420e5
-platform/external/rust/crates/clap c23354ee979fc0971d65db7db39c2e32042f48ba
-platform/external/rust/crates/codespan-reporting 37c75b43edaf8bbffe43c769745c970768c49a92
-platform/external/rust/crates/derive_arbitrary 0c261f96ef9793b60c6b3df80081e0b44476e4f2
-platform/external/rust/crates/downcast-rs 3d05d348059fe6db3c0c5ac6524555bee80e14a0
-platform/external/rust/crates/env_logger 8e0517567bc1e91a36dbc624fafefd21b87695ea
-platform/external/rust/crates/fallible-iterator a873bec49b899e1216c3c0fd379f1ae53b9eb401
-platform/external/rust/crates/fallible-streaming-iterator 1cbae7510ebe3c23ae7a15498d1d3fba5659355c
-platform/external/rust/crates/fnv e7f6b2365eed2557b4a130280589bcd8dae2a316
-platform/external/rust/crates/form_urlencoded effa614f1b21df122a6db9ad5ef1501cac721a56
-platform/external/rust/crates/futures 4c2887e65e50f62595b0f110d355dfb93d5e3c46
-platform/external/rust/crates/futures-channel 0f4ade2cb51ee0315bf5202928f3f5bc7fab67f0
-platform/external/rust/crates/futures-core 6894c271706d9bea5ce20495e1eb96599d0596db
-platform/external/rust/crates/futures-executor 6478fda88cdc140e875c9eef4cd805350fa7af6b
-platform/external/rust/crates/futures-io 3377faa3b6310ddfb9a5bd5dde671a4d33bf2dd3
-platform/external/rust/crates/futures-macro 7c3fcde08239fa2afedc89b6021c404acca2a3b4
-platform/external/rust/crates/futures-sink ae83bc3ea13d1b2d190cfb3f9a42326b7df370ff
-platform/external/rust/crates/futures-task 3af096df5d5811455ca4fa2084b5d2330939057a
-platform/external/rust/crates/futures-util 90179c2b121aadd58c97712a52775f51ff3908b3
-platform/external/rust/crates/getrandom 930b6544ea78f7231cab43bc953e7e79bfce4961
-platform/external/rust/crates/glob 7d92ce463416ee1d77ce1b7107e22feb584a83f8
-platform/external/rust/crates/grpcio d6c2a59aff6939d12e2418489d55b4dd0018f1fc
-platform/external/rust/crates/grpcio-compiler ddc7e94c4797f462589fcf901c815dd21b3f7fcd
-platform/external/rust/crates/grpcio-sys e24617bb6cde5fc836089280ed45f7d231059ddf
-platform/external/rust/crates/hashbrown 06a8afc627963e6bc2f3a35acd7b9a2cfe0c0d2a
-platform/external/rust/crates/hashlink 93b6663fb8efc8fa888db6424368f2157c3cbf5f
-platform/external/rust/crates/heck b373f407f79cbd481e7e27c442dd05832d42a8c2
-platform/external/rust/crates/idna 5dc95973641beab368f20fa493bf41133358085d
-platform/external/rust/crates/instant d340921224de06d399eb725db55176dda042132d
-platform/external/rust/crates/intrusive-collections 8dc097a2c65a086aab839323d7549a4e78c6ff63
-platform/external/rust/crates/itoa 8226a99896a43c2c06298e4ae44835ea907fb423
-platform/external/rust/crates/lazy_static 7f4b0b2fc7cb0b36dad40f305401f067779f60f5
-platform/external/rust/crates/lazycell 82d220b9fa0de37d98c7ccb6956fd46c443ecb97
-platform/external/rust/crates/libc 6fa8585eb07a922788ecf89268e495036fa83649
-platform/external/rust/crates/libfuzzer-sys 20a23d212974fbae37c3f575bd08ea4523ffc9fb
-platform/external/rust/crates/libloading c030fd81bd53a2dfe9f683e62b7665d0c1e2f9e8
-platform/external/rust/crates/libm afabc12c7e2e3884825c98944bb4c891f326fc89
-platform/external/rust/crates/libsqlite3-sys acff254cc1206c97876c750870923a7c34eacc65
-platform/external/rust/crates/libz-sys 3c61d89bf217962dc03949f8e238927ab89ef724
-platform/external/rust/crates/linked-hash-map 5740acc3b6d8eb39604f15f210377ad39ae36f86
-platform/external/rust/crates/lock_api e2237d1e501efca28832b97d10d09ce78bce2e7b
-platform/external/rust/crates/log 69a8ae440995a6799cc6f1dd882b369e62903cb2
-platform/external/rust/crates/lru-cache 1ad9834cf62cf816607d92ecf25600af0a75bd9c
-platform/external/rust/crates/matches 6de71ad7e394e65e825c30eb2977774b8a3a8b65
-platform/external/rust/crates/memchr a5706ea3986c1e47c26e1f65596a7e7c148fd5ea
-platform/external/rust/crates/memoffset f71e3e4b67715ff631977695f270e24b04eebb4d
-platform/external/rust/crates/mio c46e9901fd46155ac9e4824d7e931f6af521e1d0
-platform/external/rust/crates/nix 62c79e26786100c134872fc0fbb89217ab144f76
-platform/external/rust/crates/no-panic e70c2b88724b932aba0330f3029f526077470a72
-platform/external/rust/crates/nom efe8b15c690abbe26d8742ce511e0b095ff8fea5
-platform/external/rust/crates/num-derive cbc03fb37998fff762e167e8fd12f249dc289bcb
-platform/external/rust/crates/num-traits 57e49f1ca1601f6c4c8e91044ee08c04c646bec7
-platform/external/rust/crates/num_cpus 219a37941e7820aab41e58ec438b46e9c82398a6
-platform/external/rust/crates/once_cell d9def5e795feb4e9f54ff8efbccb89d6188fca14
-platform/external/rust/crates/parking_lot ab6311e7ef84f2a9dc05b39fe0186eac7fa82e30
-platform/external/rust/crates/parking_lot_core bdcf97a8d594fdc1f68a55a932bc9ad2df2ff198
-platform/external/rust/crates/paste 2e56d3e933f089fd4bcdc8d3ed1ff76a9633a4bf
-platform/external/rust/crates/peeking_take_while 73199a78dbb6f46a36d9b39d3dd1eefdc9cdb846
-platform/external/rust/crates/percent-encoding a061f959ce7e87c6b422fe6dfcd3f8b7c8c1d69d
-platform/external/rust/crates/pin-project c4f463310eaff5340e0cd54bb8b90c799f51739f
-platform/external/rust/crates/pin-project-internal b4a540a63df0aec5738eabf39f979452a7001187
-platform/external/rust/crates/pin-project-lite 433932a867cc828ab40698b3dfa31863b5217f1b
-platform/external/rust/crates/pin-utils 8177d2f2f3bd464354c5e14fdab9e96cdc9b345e
-platform/external/rust/crates/ppv-lite86 35984b1d520071967b6b365e0b48fb7f6b82e370
-platform/external/rust/crates/proc-macro-error d57dce6ed56540dd77b0d379669f7c41ec48b8d7
-platform/external/rust/crates/proc-macro-error-attr 349a8e38827cffc140cabfa51ccf4b42ceb6cf1e
-platform/external/rust/crates/proc-macro-hack 0abe2e84af3f71197c84c8487d1b0140adaed553
-platform/external/rust/crates/proc-macro-nested 7571490354e871e2d5ddb181f05e776ebfbbbc0f
-platform/external/rust/crates/proc-macro2 36b36e4e99a89bccb9e9db1efc75d24ad505eb98
-platform/external/rust/crates/protobuf 89d985d90a1a04f8ea80e2eea6ec68c1d5463e49
-platform/external/rust/crates/protobuf-codegen bb77db8615ffc4d4fff0e35fa573f59f6b13c41d
-platform/external/rust/crates/quiche 55399b5e6d1c777dec74a2d6c8479f3e2877caf8
-platform/external/rust/crates/quote 7fe43df6870b42cb82f4aaafe71c67ce38c64cd2
-platform/external/rust/crates/rand 97fcac0b78324c71578add9cb5cc7b09619d0804
-platform/external/rust/crates/rand_chacha 16719fd07743227afedc7b76323c04abf589e304
-platform/external/rust/crates/rand_core 7b9c7854cf6d65dccfafd6401f2c32d671862ced
-platform/external/rust/crates/rand_xorshift 56ff62a9c82cfb122ae9d911af75ea43add3643a
-platform/external/rust/crates/regex 42ac8a59829cabb3046420f5f84f996ac6354442
-platform/external/rust/crates/regex-syntax ea5c83b87751f5b0ac269e626f7682c1acbd8e17
-platform/external/rust/crates/remain d1ea9b0786f28d67d70068105dfb4d7fc9190e0c
-platform/external/rust/crates/ring 8dea219a044dca8710888bbf70867e5bbec77c1f
-platform/external/rust/crates/rusqlite c8808120b3c52a4b5c47592f2d7177494d531624
-platform/external/rust/crates/rustc-hash ed4d378582e7157adb2db32dba52d465faeeb2a5
-platform/external/rust/crates/ryu 2f156229be542c8cef759887ad7860cff02346a2
-platform/external/rust/crates/scopeguard 331534857a95914aa77797d8cd8b1758357179b0
-platform/external/rust/crates/serde ab24fba440a107a8832e9c14d52038b377b2a257
-platform/external/rust/crates/serde_derive 4b879a4bf4f024946317612aebdd0e95d11a37c3
-platform/external/rust/crates/serde_json 40caa64ec4f96233419db8aa6d3baabd256d34b6
-platform/external/rust/crates/serde_test 8e1a9392ee1fa1f38b74c0bb0e4ce64a78518437
-platform/external/rust/crates/shlex d856066e5a98aad322e0ea365232a6fca6ab0b35
-platform/external/rust/crates/slab f47a04beaee683be51511775aba1ba4ca65dbfec
-platform/external/rust/crates/smallvec fcf18ad0963de70b66ee31be7f2bc70702638695
-platform/external/rust/crates/spin 80d30c6eaf70bcddf9167f1d4db1342442e0587a
-platform/external/rust/crates/structopt 75641061c46235cdf3d020a641f7ae749ff7595c
-platform/external/rust/crates/structopt-derive 7d388669388a34d6e875319e1b3138531c0a1141
-platform/external/rust/crates/syn 24450e1d0dd8c89becabcda4711512dfd83d1d12
-platform/external/rust/crates/syn-mid 5880a37be0507c1a7d8c1a64a7b8cbb4fb7aa9d3
-platform/external/rust/crates/termcolor b3ae3c1421997936536ca5aeb94c2ca2be635ea0
-platform/external/rust/crates/textwrap 9c0d56f2817df8c1fd0fd1d0fe4a1028356397dd
-platform/external/rust/crates/thiserror 04e2130b3fe5720b3483960618ac423e02344090
-platform/external/rust/crates/thiserror-impl dfab4401405d8e4755b1d209d294e900456deedd
-platform/external/rust/crates/thread_local 38a579f946ba661efdf2b0cc6d772bfdfb2b22dc
-platform/external/rust/crates/tinyvec ea2ddcbf4341a0caa4cbf16a0765fa5e05a944dd
-platform/external/rust/crates/tinyvec_macros 44e62e4beb71bb2f6d188477a7f4ee57124031ff
-platform/external/rust/crates/tokio 659cd2c065a4c568affbc57a2f781a0d554f5ade
-platform/external/rust/crates/tokio-macros 5448a1530afe765d3209c9006e405298f5b23ac7
-platform/external/rust/crates/tokio-stream 27b7b7879e6181f66c12f650e48b10b4a348443d
-platform/external/rust/crates/unicode-bidi fb0152d38e8eecd299313ba53a922e91a3eb46c0
-platform/external/rust/crates/unicode-normalization 6d0a4fc0e69c98181299d8c6a6f8032f049d95fc
-platform/external/rust/crates/unicode-segmentation d9d0d7859b515f7814e8faca78a88dd5e131635f
-platform/external/rust/crates/unicode-width a9cd4996acf6ea530a119d792d8dac2ba92b748f
-platform/external/rust/crates/unicode-xid 3e9e123a41ff5957be8c0da11b7f7698f81c8bdd
-platform/external/rust/crates/untrusted 7559815c370e395c4592016bb12e91b99379e58e
-platform/external/rust/crates/url 93031433dc34fd6e91c56551b1fd1edecc60e47b
-platform/external/rust/crates/vsock 0a3b836641b605bba2ef3c455022d8834b270edf
-platform/external/rust/crates/weak-table 10d25dade47b21886ed447c46099fc3b3e410bf5
-platform/external/rust/crates/which a5cda4156e95acdab624e4aca6ac7a42d94b9199
-platform/external/rust/cxx e8096f646d11e69079ffcc5f9a815139d17dcb64
-platform/external/scapy 2637fb76d365707da172fdabfed06134d951e721
-platform/external/scrypt ee081ddc3ab10eba1888cb7a85361dd8fdefb252
-platform/external/scudo 2dcd406926e06aafb445ab54573a5ceb6a4d531a
-platform/external/seccomp-tests 8d2e180f752841b62fa22ee6744b07d305b79462
-platform/external/selinux fd288fd6703e7a01cae7c4f0ce7e15cf39481813
-platform/external/setupcompat 337457ce040234df0bfa25d47ba922538856308c
-platform/external/setupdesign c087f9acf98513c77fa86b73687265ac1a90dc0b
-platform/external/sfntly 9a6d65acf41343d1bda13ae5d0882785702c7082
-platform/external/shaderc/spirv-headers ef0c5dfb680a25179f7155d8b3ab67f37f76575f
-platform/external/shflags 852534c767c1b133d5b8d24250defa5cd5814535
-platform/external/skia f5c833b3f4871a81b9cc68a6aaf4f54c6abe4afe
-platform/external/skqp b0b66ed53cc7d409a1e884fdeb4a8792b6ef8e08
-platform/external/sl4a 503ca375e45b3b28e5b10d0cc4193ada4f79ff0f
-platform/external/slf4j b1411786ae6e671a98ba1fe5df91c632326ef5b9
-platform/external/smali db7ea6da6542355229745068a82bdbe7b890ba8e
-platform/external/snakeyaml a383ae8a6f2c763e428e785e96c948aad86262c8
-platform/external/sonic f37e723c99eb27bbac1316c9ac876382754a575a
-platform/external/sonivox 80bbca8b6ab4bc51eac78814bcbdce6f58212635
-platform/external/speex 0b4735724e3acfa18207f3dec5b8ccbc2ea3abb2
-platform/external/sqlite d52749b3308d659cdde9efe874a9537272215d9c
-platform/external/squashfs-tools 0e17ae3f984a6213d0a5a159d62c101f710f97c2
-platform/external/strace e00d04ec3e145d4c6dc58b9453987d48e1d27a78
-platform/external/stressapptest 8b7a08b7031cf2c6ff6fa4e4586eae339db0c86e
+platform/external/python/cpython3 e6f3df183cb817b39dc746aa4817431acaf9f279
+platform/external/python/cryptography c0dbb583fe644b0bc5a54a094e7e3291d151a073
+platform/external/python/dateutil 31a4ed7986e2e4d0db70c2e32925fb94808277a4
+platform/external/python/enum34 4e489488c3a4c11843dbb0ac6534865c9225053d
+platform/external/python/funcsigs d9c8e87dc037e7d6b0b2f32d3fba0c19a419f589
+platform/external/python/futures 3be64307897bbdcb905575d1c671041e1e595d5b
+platform/external/python/google-api-python-client f0988103975d0c5da639948745e508b4c3ede6d7
+platform/external/python/httplib2 5c630082f3ccec97db1539f08fc62d19c8fdc7d3
+platform/external/python/ipaddress 8ac78b7f0e8a22d0516483db3091df8f31cb2f95
+platform/external/python/mock de67e86d0e12aa3350d81a9395233a59dd5643ac
+platform/external/python/oauth2client 92dc35280fca125b60f9905574fde7768967416f
+platform/external/python/parse_type d07f2b14197c8c3fd46a140745f97d18661ad040
+platform/external/python/pyasn1 f5ca0386e1020963ac88346e44c0138146d0c776
+platform/external/python/pyasn1-modules b3485cd7ada7c47162a9e06a9bebf19601c822fa
+platform/external/python/pybind11 735ab06b11dcf5871ebfe61130fd5a5f4bfef215
+platform/external/python/pycparser adddba7570fd8347001f1c1a6cfc5ad7ebeac69f
+platform/external/python/pyfakefs b50a365b1ade5077998ca121ce50ba1e01f58e2e
+platform/external/python/pyopenssl 0fcbb65fee55423e68575f75990b832b3241f0e3
+platform/external/python/rsa abcc46d79241814ed506717f0cabb64644e4097c
+platform/external/python/setuptools ff0c219e07a30978c29ec164a8ba6dcdfa33a5d5
+platform/external/python/six adb0dba74b422dfb8ef83f93a4e0fde818646c8e
+platform/external/python/uritemplates 0cb74b873f902a57752315041fdfd266cf64b3ef
+platform/external/rappor ee81a8421e4d1e5c4f80a1a0ac8fa3b5a83bbd64
+platform/external/replicaisland fda5bd36a960f1323b342a31fef476d302baa98d
+platform/external/rmi4utils ce19a65506583e9790dead90e66f05d13b5da9b9
+platform/external/rnnoise e6b1746549e5cfc59a438ddd085197370b573ec7
+platform/external/robolectric-shadows 3e442e2e803fd941cf991d0ead509f1ebf98042a
+platform/external/roboto-fonts 7f3bb61f8bb6fb7c22e2b2244e21ea7c47fa88a7
+platform/external/rootdev 69158778d9664e3cadd0feea96bf8f06458c6d2f
+platform/external/rust/crates/ahash d527aa6887c0626c6a9790db06fb0f673ae1b96f
+platform/external/rust/crates/aho-corasick dc2acb2e8579ae95aa3969460fc03708721e5421
+platform/external/rust/crates/android_log-sys 55fd5d8c1044116ced321091ad878af843438ab6
+platform/external/rust/crates/android_logger fb81ef6c98d9207fdb87af7e333ba90c46ad39b9
+platform/external/rust/crates/anyhow 21adb845a5221f39135402a2858d62361122ef69
+platform/external/rust/crates/arbitrary e7a10d99a4f84d9b38c3fc539fc1b4ad8bcfc3ac
+platform/external/rust/crates/async-stream 647493e10df459f2e4cc4cab77918fcba6a887dc
+platform/external/rust/crates/async-stream-impl 4d90486f873777e1b8acfd83716d317ca318e828
+platform/external/rust/crates/async-task 99ac45aa74d283eb31b653275f72864557f75465
+platform/external/rust/crates/async-trait 03e5954829f106294e6b99bef5640c0e7cedad20
+platform/external/rust/crates/bencher cbcb0bd0ee1d920c112f664e8f8c2790dfb0607e
+platform/external/rust/crates/bindgen 178066f3bfe9102ef7f125195afe499fd8899aed
+platform/external/rust/crates/bitflags e336eb263a283db8409392bd4ae729e2ab8ed87b
+platform/external/rust/crates/byteorder 9c1ed6cf9d5fbf7db34afac3ddbca16b5ff5f26e
+platform/external/rust/crates/bytes c9437a46a49ae496b83585e81c54dd6776718338
+platform/external/rust/crates/cexpr 438e42efe2e34e90f6d5d7e35389bc00940a7bf1
+platform/external/rust/crates/cfg-if 25fa8cb2c22ee5abfdaf9fa9365b61fc01eaae77
+platform/external/rust/crates/chrono d9fc68355f1d9dcd0159dc65e53eb9a71435cc4a
+platform/external/rust/crates/clang-sys e324fd16aef528a1a380cc2bdea90fb9b523fd3e
+platform/external/rust/crates/clap dd2cd4423bac875226ac38928e9d579582ea4de6
+platform/external/rust/crates/codespan-reporting a90a69cc8071be8506baa9e4211447bf5eb2748a
+platform/external/rust/crates/crc32fast 9f04d26dc49fe815a98228bd7aedc239ab6eb738
+platform/external/rust/crates/derive_arbitrary fa5cbf736116271892806aefe6a0c21f82984cab
+platform/external/rust/crates/downcast-rs 36d9db99ba05278c68db164fb9d53676c0e55317
+platform/external/rust/crates/env_logger 98c05faa2e17d28eb0fd3e1d11912d1033738ea8
+platform/external/rust/crates/fallible-iterator 65cc588769e9ede2cae56fc988362cd85c701c76
+platform/external/rust/crates/fallible-streaming-iterator b6ebb2a942b303f76bdae01a634eb5047677de26
+platform/external/rust/crates/fnv d1e90553581a5865af318d8277beb5521c3def97
+platform/external/rust/crates/form_urlencoded 2c094bfe86dd3012996f00d06ebc287912020386
+platform/external/rust/crates/futures eae89cd6534c13efc2dfad5e065d3c42aa9d9f77
+platform/external/rust/crates/futures-channel fa4499fd1538b89f906a20009713ad3fd69fe131
+platform/external/rust/crates/futures-core 9a4d3048540aee91a3ece2eb7bd0166d1d86bd81
+platform/external/rust/crates/futures-executor ad82a4230f84f4dc06290ff0edfdbc5522aadc2d
+platform/external/rust/crates/futures-io f67f11684b541513e953f0a3df8df2e95ad04c8f
+platform/external/rust/crates/futures-macro c3586e0eca337c6573d6763f07cabe63ab633328
+platform/external/rust/crates/futures-sink 967d34f051f5fbf0137f97ad077ba3bbc6453ac0
+platform/external/rust/crates/futures-task febacb4ce6b6e7f43f7791dfc7877ca2a9b6a79e
+platform/external/rust/crates/futures-util 644930af7b8b68820fab3304117347efe1840dbc
+platform/external/rust/crates/getrandom 647a424fc855bcd4630814a896cba9935da7caad
+platform/external/rust/crates/glob 19e25f451f2c313ad9ea60b74785fee4d10c174c
+platform/external/rust/crates/grpcio 47604efb449a0e67da47ccc227fb773b3dfdcb6d
+platform/external/rust/crates/grpcio-compiler d851851242a981e239759bb48317aa044b7e072f
+platform/external/rust/crates/grpcio-sys 7b4370762b215e80fd471e10506b58e95d10cc8c
+platform/external/rust/crates/half 029aa05a8f11602b1ce5816d785975c8d0925f88
+platform/external/rust/crates/hashbrown f9672421f627a0a217095248238e12dbc76527e9
+platform/external/rust/crates/hashlink 26beee411095907b8a54b927e29708e7af3bb9e8
+platform/external/rust/crates/heck 817af1604dec3fa70f60cd1294de5c625ecee83f
+platform/external/rust/crates/idna ea1f06090b011cc3ac956c2ed494c7a2155b4dd4
+platform/external/rust/crates/instant 5cddf174013d2800339e5b42e330f5e55b038809
+platform/external/rust/crates/intrusive-collections 9db6ae012822c67e3d329fd36c1b1c85b90e6b46
+platform/external/rust/crates/itoa 43ae2ba3365d65b6efe2a72fc96e697f9a959223
+platform/external/rust/crates/lazy_static 3260febf1f9acec9c6c33312cccb388650305c56
+platform/external/rust/crates/lazycell 86b32eae9e4cae048826a54c262fa24dbb9643cb
+platform/external/rust/crates/libc 11cbf783ef1a0a1562730726f9b1c1963a2b54a0
+platform/external/rust/crates/libfuzzer-sys 05ddbe9040f2c20e250a24db0b452b084c59919c
+platform/external/rust/crates/libloading 25de5610a13af27a68362c8af824d9d3ea490d9f
+platform/external/rust/crates/libm 4face7054b917aa848afebc31ebccd7944b358c3
+platform/external/rust/crates/libsqlite3-sys da3b7ffd8f73011ba0e10b6cc52d84aa7c4226c5
+platform/external/rust/crates/libz-sys 529edd988331992e27531b126402d113227d6805
+platform/external/rust/crates/linked-hash-map 898788a110291683227b4828d759ab8155560672
+platform/external/rust/crates/lock_api 0f838b32e8260487872d1a77b9777cb6d91dc119
+platform/external/rust/crates/log 94c9bd5dd5b20f19a978b6afabf29c7ed25110ac
+platform/external/rust/crates/lru-cache d06bb2c71ce099a8743805e580c30b7d7e277b20
+platform/external/rust/crates/matches 952210330283a2ae00f1c4580bdae6c6cf902d31
+platform/external/rust/crates/memchr a804487cea7994f0743dd75ba3de8719db81989a
+platform/external/rust/crates/memoffset 05c58853bedc60de9b047cad09740b9809533da0
+platform/external/rust/crates/mio 91c9f860452812ab6371168d2803975646ee2e94
+platform/external/rust/crates/nix b033033cd7d254a2fa7cb1e234d9ecdab60cf6f8
+platform/external/rust/crates/no-panic 1e401efa6fc4707a71e1e7793c66c170051f59a5
+platform/external/rust/crates/nom 32d8a6a7f298488b76d0f5b2fc46d1ee51f8399f
+platform/external/rust/crates/num-derive 2805d59c1a900b2d9ed0493470082fdd81c23530
+platform/external/rust/crates/num-integer d189262964147beb60f33f6047bae2dac69719ee
+platform/external/rust/crates/num-traits 2538d74daebcda55d07992c0f30e4b4fa74cb1bc
+platform/external/rust/crates/num_cpus 7089b4c57600a53c3152035773fe1800442393f3
+platform/external/rust/crates/once_cell 2382f5a982e3fa8c5664356178f5e65a13bed367
+platform/external/rust/crates/parking_lot 117faeb662b1c658ce93b8df22515688263a6a35
+platform/external/rust/crates/parking_lot_core da4506cdd634c5a3586854f8d3785539cae53b5f
+platform/external/rust/crates/paste 62fdbd56ae741b62d1beb72cae07454edeb974b3
+platform/external/rust/crates/peeking_take_while 0028c2464e001bb80718e21b65195e1f1c984aa6
+platform/external/rust/crates/percent-encoding afb02dd508a042875e001e67a09280e81bdbd370
+platform/external/rust/crates/pin-project 85346b9ab073eec02ff79210e24e60de041f3de2
+platform/external/rust/crates/pin-project-internal fb4c34859d4c4a5edb171d10f4fcbbd3a1e5658f
+platform/external/rust/crates/pin-project-lite 8a3a8ab259a56a8020b7da88fee7eef6959642e1
+platform/external/rust/crates/pin-utils dc55560a13ddaca3e8976ae44b05afbee2a9b303
+platform/external/rust/crates/ppv-lite86 971fc07a1d83290862916dddd96b57ad6d5325b9
+platform/external/rust/crates/proc-macro-error 0177eeece2d8d8478d8f7d898069d343cf688d65
+platform/external/rust/crates/proc-macro-error-attr 6bddeab96be5c4ae0370f9193806c457f3d9b8e2
+platform/external/rust/crates/proc-macro-hack 1ec846306f145449aaa93d00d5c794b33cf407db
+platform/external/rust/crates/proc-macro-nested c1f33c5b2d41066f7567ab797f781703dffddbd9
+platform/external/rust/crates/proc-macro2 4e63fa00947dd9972a114f735b9f55980b31481c
+platform/external/rust/crates/protobuf e97d9b91a7c2a6bf65b22c35e6fecc9083ce4213
+platform/external/rust/crates/protobuf-codegen 90595cf4606ac7bfeb7e81c211d0b7a8cd37e94b
+platform/external/rust/crates/quiche 6c51d8f71227916400eded023e41145fbd224500
+platform/external/rust/crates/quote a8767d6007445475d70f0474fb7a28f14438bf24
+platform/external/rust/crates/rand b820d09f2a5bcef321e7eebe1b69cfefd03674f5
+platform/external/rust/crates/rand_chacha 2f73123ba636abc086339eb3b83222eeea647814
+platform/external/rust/crates/rand_core bfb8f10bfc406b156a2b0b43836cc3099d86d208
+platform/external/rust/crates/rand_xorshift 3804f99b15cd305c26199ccf5ab29b26f70b092c
+platform/external/rust/crates/regex 202fa64aba80cd6b6ac45caa786fafec0c5b23ff
+platform/external/rust/crates/regex-syntax 16633048c9164334c29ad87011c696e2ee1f27d5
+platform/external/rust/crates/remain bad806b7fbc309d3337585e8d8b9d03e37324e44
+platform/external/rust/crates/ring aa30f37bef10b949befc8e0ba264a784cb2861b5
+platform/external/rust/crates/rusqlite 02437b2b995111a4f6e0c52b9d65cba482e18a7d
+platform/external/rust/crates/rustc-hash db066d1f1932fa24f5450c9bb03d82ed3c8f0bd3
+platform/external/rust/crates/rustversion d550abe65fea6425374f69306f0a4e74585b238c
+platform/external/rust/crates/ryu 69a84c7e55062895a4fde9a560a42f445c35005d
+platform/external/rust/crates/scopeguard 66e3c154bcb450304aa395c17041160a51953236
+platform/external/rust/crates/serde 1efa3b4a1a8e476e429bd889719e242994adac7c
+platform/external/rust/crates/serde_cbor 137e88ed29967b3f098b4d91988afc90f6a2ead9
+platform/external/rust/crates/serde_derive ec2f37fbfccde85e71c251283328ee2c0bd5ba30
+platform/external/rust/crates/serde_json e49ebd23274441ffce11bc8bea0405b66dbb8474
+platform/external/rust/crates/serde_test 9816515e26b09a00a6c0209ec6b0bd6edfa1196c
+platform/external/rust/crates/shlex 93371c6a5b718109ceedbc7f93a4bb60b9078cfd
+platform/external/rust/crates/slab eedc7d1aabcdbd1a727162c6b1645a46b2a96c35
+platform/external/rust/crates/smallvec 6406713a8ffccfffe0e1e82ef3459794ef4f35c3
+platform/external/rust/crates/spin 2f6b4516854c3aa90eba8352a250d6b666a9bc4f
+platform/external/rust/crates/structopt 1b50f91c66cc7c124730391f4b5074a7b38c0bba
+platform/external/rust/crates/structopt-derive c72b26c5e5e4462382aabd1de9729506488eb326
+platform/external/rust/crates/syn c59c4b0e9768b419dd17d159eee89152e4ce49c4
+platform/external/rust/crates/syn-mid 1eba25ec6d604c37adaf191e662333669f3d0c4f
+platform/external/rust/crates/termcolor 976e8f49f13f80f1e9568c6c913c418e2e1db01a
+platform/external/rust/crates/textwrap 38adafb719c166df8cba7d001c4f2f9f6eab8a57
+platform/external/rust/crates/thiserror 92e2ed940ed58bea0ae96c594ea5b4b9ab23b1a8
+platform/external/rust/crates/thiserror-impl d3b5e79c010b7a218bbb739d97688d3ab62b2738
+platform/external/rust/crates/thread_local f5e8a9fbf538f85fe82373fa8cc6b0e99180f3f6
+platform/external/rust/crates/tinyvec db26643f05f3a2cea6c016116ed5e4a8e93ed5b8
+platform/external/rust/crates/tinyvec_macros 15b209bee4cb0e1bd7cd9cf5d03f07cd1fe57de7
+platform/external/rust/crates/tokio 9084d906105ecaa4d5b58ccde2dc1d6a12a486db
+platform/external/rust/crates/tokio-macros 269d77223e7af5e298af99ea665ae963632035ef
+platform/external/rust/crates/tokio-stream b504916fb6e9f99e453b4f0ec480da4b08e1e40b
+platform/external/rust/crates/tokio-test bf372733d2a280c7408bfa28ab8b9d8b7456b287
+platform/external/rust/crates/unicode-bidi 060211debb456d5ca713e2d5394363d51001d93c
+platform/external/rust/crates/unicode-normalization b51473fe72f4f44138749f6143539d0a09c84e50
+platform/external/rust/crates/unicode-segmentation e31efd194a081d40fe185aeeaec57e63e9bf1982
+platform/external/rust/crates/unicode-width 5e6d042284b7fb69a6ad537b367af5a069fd2fc3
+platform/external/rust/crates/unicode-xid fac55f4709386b069a7d50351c47a329fe459e05
+platform/external/rust/crates/untrusted 2d0585dae4e71ab2a743f5c371b5dc93277a8eb0
+platform/external/rust/crates/url 009788d5fe3e559e505ac9b199cc52c214780bd1
+platform/external/rust/crates/vsock 4a94720eb4959ed292ca0832e724d9c1280abae6
+platform/external/rust/crates/weak-table fea02efa947ee1b7c15b8de5fbb433f3508c579b
+platform/external/rust/crates/which aa49be2a837e76759ea96c764cba691bd966a5e6
+platform/external/rust/crates/zip f19c3f2587f29a0177eb1dddefc23c46504bf786
+platform/external/rust/cxx 6e874282a3cf92d32da4d9cbf63bfaa2d2777e90
+platform/external/ruy d23d5384ee2dad29223e8c57248ea83ec23da4bf
+platform/external/scapy de08aad24b9b1dc9cfc95bcca418d90800297d15
+platform/external/scrypt 8a4f74607bf67a12aa39b0cb6bb5a598d84cc05e
+platform/external/scudo e3cde3ad11bc816772604f566a2915e29edf985f
+platform/external/seccomp-tests dc4b4fd458f245081ec019f1b83735d9c51d886c
+platform/external/selinux b921c8248b93365bbbed8fa2ae61d0cc7c75079c
+platform/external/setupcompat c36615c44921d5890389d7c56f0991a9a44892fc
+platform/external/setupdesign e8ddd9b950751f4d2f1c1cc39059a91b693023aa
+platform/external/sfntly 4b08e5b078752ef38b49ce723e29e0f0aef8770b
+platform/external/shaderc/spirv-headers 948185b8f59d57b8252b6b51502ad13167018305
+platform/external/shflags f099443d156ed814e15951f964cf394714ff623a
+platform/external/skia 0f2908e678dc72fb1d3a6a5c917a4fd7966a3ad8
+platform/external/skqp affe6858e8381b66b2d579304749be19e04ba264
+platform/external/sl4a 4025ba1f99d3407597b41376c40bc9dc92d715a3
+platform/external/slf4j 1fba4cf506028e2675d53b29784abf9a1ff39c15
+platform/external/smali fa0f228fb3b75edbe57d05c99c4319e45a110a04
+platform/external/snakeyaml 25bdba5947d69b6712e3df34c1f6655ce10f4946
+platform/external/sonic 96a659bb6a0098ff45a3aabce9edc15358114399
+platform/external/sonivox 524f87758ef8e032fcc1e9c2932f91efa1886ef4
+platform/external/speex 7472c2b2bbaaacdabab8ff8489bfc4049001ba45
+platform/external/sqlite 29cb3ef2e960c81c665f0668c7e9f1e1508da3f5
+platform/external/squashfs-tools 54377b5618eef479d03cbc3baa86182b9f054144
+platform/external/starlark-go cb4dba6bd6c53d73b52da16d0378834a872348c0
+platform/external/strace 33fb16ac1435c28f3594f029ccd9162e3de3db0d
+platform/external/stressapptest a078d71e853cc5fac467c763283fc27ae7d3df11
platform/external/subsampling-scale-image-view 66ed9ce49803b856050477aa07d042bca4023738
-platform/external/swiftshader 2c46ec411965a1e72ac20965773581fca94f67b1
-platform/external/tagsoup 00d7d7946a1f739466b784afda5a4fcd2ea15d77
-platform/external/tcpdump 250f84a59d445b485205b971cb204534690858cc
-platform/external/tensorflow b8232efcd7bbe4abda816aad7187cc926877fbb9
-platform/external/testng 859c0f4ff7ddb835408e66c5b0255ee1b3722860
-platform/external/tflite-support ed73f2f75b75da3675b0a984dbfd195702855ed1
+platform/external/swiftshader 46db842253a1b5bf2b562716c8ff6be48b62ebc6
+platform/external/tagsoup 805050e30f11c3bbe5fb151ddbd9e2e1ab93f315
+platform/external/tcpdump 779a014e9f2d03c08583b2a18bd4fab156b4fef7
+platform/external/tensorflow 7527e5a31ad0f25a337495e76d4d184754db9461
+platform/external/testng 35fea93a6bd6ad3407fec8f457e498239f16e13f
+platform/external/tflite-support 986ea2d63afb173b99c2e8492b87823d8b3e3bb4
platform/external/timezone-boundary-builder 671355f22a1368e27b8c588bfab35abf30aab0f0
-platform/external/tinyalsa 65e0cb90e6c9076fd50cd7dfc963c6313db06237
-platform/external/tinyalsa_new 6e88308fb597f90713d9426aa70cf07633e36638
-platform/external/tinycompress 88077a4572ff13e6a3daa353d103f1ae458b6097
-platform/external/tinyxml2 584fb205cd019af00453cd25677bf4e6386028f4
+platform/external/tinyalsa 0eba66ae1f6f07b8eda0b9665a8a75eebca3f60f
+platform/external/tinyalsa_new 4b144d6765e2e1a01a8d6c79794e687776360363
+platform/external/tinycompress 92775f417f373bd5deb8615b2d9b53aaf83eed47
+platform/external/tinyxml2 d6734e4203693d4b40edcc8c735ab772a51a4c0d
platform/external/toolchain-utils dc6e28ebc3b8768cb9f4165dfd02d8e7123a3fe3
-platform/external/toybox f01dfab93bd10689d4f62cb454f7d2bdb0450829
-platform/external/tpm2-tss 1b5003ae887b3df14a49ed382e1403ca7e13fe68
-platform/external/tremolo 03ada96ef386d823291ffb312c0a19f63a54b6d9
-platform/external/turbine 6fb001356374d14a63524ea16c13ed313adc9b4e
-platform/external/ukey2 86134bca9b3b85efc749414d0104459422a9a2f2
+platform/external/toybox 14e73f87ba2ebf4a9dc4a2eadd4dc9b8968c33f8
+platform/external/tpm2-tss d76c8554b0d99f98e36c29bf2b2396225c5ddd81
+platform/external/tremolo fcf230c0bd8e80ed8796d73a2b3c87571ed93aa3
+platform/external/turbine 8f086eda21ab19c3c2ba502f07166c9f3b15581a
+platform/external/ukey2 a611c4714eefe798367839e15f1be381a26f7a84
platform/external/unicode 35f79e74cfad2d4c0f68623d93ca0691830ced37
-platform/external/universal-tween-engine 104fd6033199b2c696f156545f104b6487f007bc
-platform/external/usrsctp 6d47e99e95f14da981a8bc69232df700bf4ac9ab
-platform/external/v4l2_codec2 a37f092df5ddab757d89a9f7ac6b7854a04fa579
-platform/external/v8 417de89e7ef9f01d1f50ae1b9ce0673261180095
-platform/external/vboot_reference 6e9bed7e07a5f157a0819aa7626ff69726253983
-platform/external/virglrenderer 02d4c5e1ad05ddbb04896880d0d8ac0fb52b29be
-platform/external/vixl 2fd351793698d08bc9023ea44990029db6eed8e5
-platform/external/vm_tools/p9 82c3a1bce629a528f1191dfeec1c02df3300648a
-platform/external/vogar c72a7744d030266ecbb0d3df0f9212ad5d8957c5
-platform/external/volley 3576c6b880852e592fdf1db75e4927c84d354647
-platform/external/vulkan-headers b1b2ed54d3c9b1033146fd8498779ff16780a6ae
-platform/external/vulkan-validation-layers b33465df7180807679a9bac72484cca6e1b22767
-platform/external/walt 7c317a44629c2ce46d3701f6cf9dd195f49ea483
-platform/external/wayland eb695a77329120f27f6493aa319aa6df782ddef6
-platform/external/wayland-protocols a2d7f010239ed2cc6751a91ba4bba77e1cb57eff
-platform/external/webp 71669df2fb21aa4a8bff5b9e0e4201eb3c5d13db
-platform/external/webrtc dfd3f90b4edf6c31a932331d2d54c746b389e169
-platform/external/wpa_supplicant_8 473abac90304ca2fb97837e9af7ec8259e175e19
-platform/external/wycheproof 5538bc07bd9cb5d0f420d4336728911e556e9a0f
-platform/external/xmp_toolkit 4ab400db455e84f9f0c05f14828a9c28fd006d77
-platform/external/xz-embedded 98976816201dd0e489c8f935c2667f73a1546517
-platform/external/xz-java c704abb9d4a6aec8e1a557b1365509d34578d2c2
+platform/external/universal-tween-engine ab6d598a15243a3243ab34fbb118857c4a79e835
+platform/external/usrsctp e929f597b746d9707590a5c5558afad9902f36b4
+platform/external/v4l2_codec2 0e44f3a8fd26fe19088c1386690773e357a85599
+platform/external/v8 bad680f00096bfe0bec29f961249807cecd70ed1
+platform/external/vboot_reference 5dc2ad5eeb6caafdbdcf7474dbfa5bc634909369
+platform/external/virglrenderer 050bfd0912d76d633bf352e7aa580892e91c2608
+platform/external/vixl f42ef7bad371eb699471220c5c218d132f10c965
+platform/external/vm_tools/p9 98be033c49df45e9d25f2b6766377ff6837a4e0c
+platform/external/vogar 9c1ff46e47dffdb509d434ea1f2a3d6f9c0bb54f
+platform/external/volley 9608a90ef85b1d02ac4e12dba20ef82ad80ea7c0
+platform/external/vulkan-headers 8a2e3eebd18504a7c33d6b1d4ed887a95dc3bb0a
+platform/external/vulkan-validation-layers 405f78b556b791c49d013d0b7a5b7647860d8784
+platform/external/walt fbc2792a6a214cc66ab52cb6baf3a3ead23adaa6
+platform/external/wayland 5c6fc4d36719b178a50df89ab98831c2c742b881
+platform/external/wayland-protocols 668de5236c35fdd76a7dd84f54c78799e8d6b3da
+platform/external/webp 4000dbacfd1ff121acaf57d1480d859018c6a2e4
+platform/external/webrtc afc46b6cc8f89778876d0393dac9a3e73363d43a
+platform/external/wpa_supplicant_8 196073d0efe6b80a101163ce7ecb34011d54f858
+platform/external/wycheproof 2299b63e4ba214c5c1fc8282cb7bc7b843f439ac
+platform/external/xmp_toolkit 96f5158dfd52dcaa025aa2df2ccb5af54b515fe0
+platform/external/xz-embedded 3c1438c67e3ff1c2105f04767ea284995d8f57de
+platform/external/xz-java 1ff34592d0914f83e41f4edbc620006c3f011211
platform/external/yapf e415f242082fa26008fe75436c0dedb501507848
-platform/external/zlib b2d0f6ad282bb550d008e4757dd42da723188bc9
-platform/external/zopfli 8a81a24ab88bee1933d8b57df19601e9f9a15954
-platform/external/zstd 415582564474e042d2687159d4e9ee8e1e7eb48a
-platform/external/zxing 505842ab407def19ac9f4c49af4c5c7e87fc7ca9
-platform/frameworks/av 87b7c5e6a6f3121ab9740fc99a131f08aba9fc4d
-platform/frameworks/base 7f0cfa329f6f2a03e188d83fce73385d8d31fa93
-platform/frameworks/compile/libbcc 8a1e2b10106087d9378fdb494be30fd943d02a85
-platform/frameworks/compile/mclinker c718178c681c72377c33e8ba677891a147d5d2dc
-platform/frameworks/compile/slang c68df304ac297516839a1769966fd3908e54c848
-platform/frameworks/ex 76ce8edc18bc4ec518ce1e08070281414183c4dd
-platform/frameworks/hardware/interfaces 1eaa33a18485df2178c62c86b97eff106f7bcda9
-platform/frameworks/layoutlib e5116bfbc908d5499a2fc68d4885c9daf975b10b
-platform/frameworks/libs/modules-utils 1a7ab678d04afc547ff3cc471715ed0fb2e0bb3b
-platform/frameworks/libs/native_bridge_support f7bba0540273dc57a8900b61bb66f5a41a5e3d9d
-platform/frameworks/libs/net 8329d5b48352c5938c3a99d381dec1757787f8b7
-platform/frameworks/libs/systemui 807d3fdc08ea6d1c0d3eca960cf2da205815a91b
-platform/frameworks/minikin 50f1926578a2cf053f217577a0edf73ad5487131
-platform/frameworks/multidex f9629773891ffbf25f667faa4befd2fc815daa9e
-platform/frameworks/native 18c86549693b43b506288164ea56c2f4b06509cc
-platform/frameworks/opt/bitmap d27bcc0cba561c829bacd25ab0c057ac957ec87d
-platform/frameworks/opt/calendar 3f72b53df580cad2877246478d8f64c954c6f749
-platform/frameworks/opt/car/services 71f9fc43a1e404fbfe02f0f148e6af8db41e62a7
-platform/frameworks/opt/car/setupwizard 48b634c0f9377892b79c9f28523d7024f5f08fec
-platform/frameworks/opt/chips 7294fb0ee883261b4680fd66c3987ac73f049c49
-platform/frameworks/opt/colorpicker 78b81ce047fa4157aaf937e33b5b399a12166e0c
-platform/frameworks/opt/localepicker 2ac394bc395477779a51f3a3e1ea921e24c2b431
-platform/frameworks/opt/net/ethernet d22011c32b646cd0cc189d4f02b187bca3b60d55
-platform/frameworks/opt/net/ims 936b6d6decccce86c5bd635e8d1e9b69abe96541
-platform/frameworks/opt/net/voip d3ac3d7a32ac48722f05e862335d7e5a2be497ed
-platform/frameworks/opt/net/wifi 0b60f326c8143b2c607380060cea7e691869c806
-platform/frameworks/opt/photoviewer ca301a848ee2973b5253bde37b2af38100f2a59e
-platform/frameworks/opt/setupwizard ecac44876427d185a95ee302d0e8190d058c7cb3
-platform/frameworks/opt/telephony 0e287be3c2894c9088333fd5feacc5f46257d4bc
-platform/frameworks/opt/timezonepicker 6e40b9554f907f0bb719d719157d8ba895572c6d
-platform/frameworks/opt/tv/tvsystem 86f084e2ec25cad2fde4ef6dc20356ffdad745a7
-platform/frameworks/opt/vcard 5625118f883431ebc2eaa21282fad17236f1f00f
-platform/frameworks/proto_logging cfc6e09723d38b0b306bb6925106ae3f5a3f46d9
-platform/frameworks/rs 0f2066afd2be2085d8fb76c1b15a081d07bdac93
-platform/frameworks/wilhelm 0bcde5021bef9525c18be6ba1d9a0cc0ab4ac280
-platform/hardware/broadcom/libbt f2702e9ce3b235ba3a0d3aa35b0e25f3613ded5e
-platform/hardware/broadcom/wlan 4b844c30ad333de4f7211f042ea7ddb8e6249a95
-platform/hardware/google/apf 104ee1878a14abfd595a439f24666d4700f5cc8d
-platform/hardware/google/av d2ca0ac90d717867b45059e0ae98d81d128fa3a5
-platform/hardware/google/camera 9bd2d92779b2d14e5bb390a30ea54646250739f3
-platform/hardware/google/easel b5d9fedd478f51b0f3027f931fb2f95729c07da8
-platform/hardware/google/interfaces 7e1ca3d99c62f584f22d069cbc1c389923537886
-platform/hardware/google/pixel e9bfd4dc393cbd426037cffdd84926376b907628
-platform/hardware/google/pixel-sepolicy d22270c6e2395782bb71199d39cee32827f24980
-platform/hardware/interfaces c01b9cc458a869deef6e215ad0c5df13bd1a93c6
-platform/hardware/invensense a4a2f637fd7d000eae53f5368ef9888d6839ceb9
-platform/hardware/knowles/athletico/sound_trigger_hal 92b880b99271ae260a995b8b822ce9d7c6b7fe2d
-platform/hardware/libhardware 8124ec685ef35bae5a1e0f88921dc387d37e3d74
-platform/hardware/libhardware_legacy 1dc6400ef1b04417d5aafa49efc37005e88b22be
-platform/hardware/nxp/nfc 6007fdcea006d89f02dc64859d9ca37bd8e3cfd7
-platform/hardware/nxp/secure_element 125f4c30fda0f8135b4176a7a29fd645d5d1dcf2
-platform/hardware/qcom/audio 3fa885b7dba4fb02dbdf1dffa26c8d22b541bf68
-platform/hardware/qcom/bootctrl 1a3054e75d115f1bf68fc03af6fa79e96c896281
-platform/hardware/qcom/bt f62361ca35807568b615db03ccd3ea0ed98e92e4
-platform/hardware/qcom/camera 060172b5aef8c4f4cc1ee6eb55e5c1be4b759630
-platform/hardware/qcom/data/ipacfg-mgr 42cc71ea18b4e9d0e3e8edcc2c7fbf00c0c51e5a
-platform/hardware/qcom/display 3a4c24123fb7adfd274d3812d2b0cb512877514b
-platform/hardware/qcom/gps dc5c5e1310b52881a9e786993ac8aa0f62142b7e
-platform/hardware/qcom/keymaster e1112c70ff70c0e53347297d39e06f94711c7aaf
-platform/hardware/qcom/media b49904b68868064cab815ecb58a0eeba47de5c07
+platform/external/zlib b69db4513031e1d60ee19b728275e6f51659085f
+platform/external/zopfli 84adb162e7ad28048fe0c334c64db2f92e6476ba
+platform/external/zstd 864533234cf1e7a1b0ebf1a6892f13ae610b0ba8
+platform/external/zxing 8dfe5d4c319313f3bde27b2212e90b03fccbbb42
+platform/frameworks/av da2d025d8fcfbc6b3045a4ae7c81c06583585467
+platform/frameworks/base 91383486669855316743246b537d2482522f2cbf
+platform/frameworks/compile/libbcc ada5ce9209600c62ac2bf8d9f376a150a2280f31
+platform/frameworks/compile/mclinker fd797d93a8c360e1fa8ca57b84709f093074ade7
+platform/frameworks/compile/slang fec3d02337acc5d0372a659316f41d91dbcf7cae
+platform/frameworks/ex 307bc3fba778575012c3d5968dcc102ef14989c2
+platform/frameworks/hardware/interfaces 610187aa815dd1e5baf478f7d97955f164295ee7
+platform/frameworks/layoutlib d2835b57632b7d9dee954a6e35c8028b53914ff9
+platform/frameworks/libs/modules-utils d6441cf0c8ac7c06ef555dff2e12901b659efbbf
+platform/frameworks/libs/native_bridge_support 91d3eccbfc315b36b126fa863dcae38e85399f68
+platform/frameworks/libs/net f6d1603058f677d10ae3ac2e409e05968a2f4bb7
+platform/frameworks/libs/systemui cfff651a00f77673c93a7428c3acdf15d6a3390d
+platform/frameworks/minikin 18b1f01c01677ad1c45ee78fd984d67f89eac942
+platform/frameworks/multidex b74d220d785679f5f856c93da8f7ed5c17fb646f
+platform/frameworks/native bd6a94ca2bc37c5e0909f9c3f3e89584311319d2
+platform/frameworks/opt/bitmap e2f5daa5f1bbed0c7177b767f450dbf2a2b9628c
+platform/frameworks/opt/calendar 877b348ca5f23befe6eccb1208a2a045f8240b00
+platform/frameworks/opt/car/services 82aedcd0bb2b05d2d7b5546135eb9be58bbf8d48
+platform/frameworks/opt/car/setupwizard a4a78bf6a1b99d68747954b20dc55dd96ff923a4
+platform/frameworks/opt/chips ca6dda1c783218db3f4961a3fbf3155bcb4c545a
+platform/frameworks/opt/colorpicker e7e282dac3d349e8878abcc3358679e178d63204
+platform/frameworks/opt/localepicker b0fcbfcc2ab6338b432c2979dd627bfe4bc04c2e
+platform/frameworks/opt/net/ethernet be14b3bac69d3e04072e36f42956db936d1a93d9
+platform/frameworks/opt/net/ims f882809be1014e06a0db4b821aa3e58fcbb9df27
+platform/frameworks/opt/net/voip b71d83ae8d887a023abf0fa76c357ca3e5bd6f99
+platform/frameworks/opt/net/wifi cc5170caddccff3c9a1c01f98031cb1d818b8c4a
+platform/frameworks/opt/photoviewer 632aaafd49b4cda963644ff32ea12c53718d7bc6
+platform/frameworks/opt/setupwizard ba1ab2acacd55b988c3a70af0c0902b5455e3484
+platform/frameworks/opt/telephony 249556ea80e2288d2b3fdc860ae4eae3eedd2cc6
+platform/frameworks/opt/timezonepicker d7fd9da86b22c37c85cc8bc6e386331d1e8589b6
+platform/frameworks/opt/tv/tvsystem b0a90994dd0caf66f9d6274f5e71c291a08b4266
+platform/frameworks/opt/vcard 8a61a932d51d49031e7928ee94a23c92151f45b2
+platform/frameworks/proto_logging 0f9de1b9beda9922711eb42edb75b1473ebcc85e
+platform/frameworks/rs 1f874cf580683b9fd0f2db373acb00c49cad321c
+platform/frameworks/wilhelm 5ad56c21fe3ac01f3c3e4911c2181e7bd4763363
+platform/hardware/broadcom/libbt 2c76a9c66b2d93a154c88e1886ef29191524076b
+platform/hardware/broadcom/wlan 979e8fe6a1fb93f5f48351da50d0fd16044faadc
+platform/hardware/google/apf a279723b1e26c607a21d48c8e4cfcf9318efa7d0
+platform/hardware/google/av 9a9a1a4350f8abd0af0895cb73293702f671efda
+platform/hardware/google/camera c6f04e5f9aa5fb4aa374109bf4833b54487e15e9
+platform/hardware/google/easel a254fa899083ae26fadf19ec33ecd3d519e16e33
+platform/hardware/google/interfaces 8f0d0eb2940393f84a183744c09fdb6630982c65
+platform/hardware/google/pixel 29f9bb2050b5d22237d6f2f496122271b3e4bde7
+platform/hardware/google/pixel-sepolicy 23fe0abcab4147fe3108c8ad2a1df002f90d1b68
+platform/hardware/interfaces 004e6a110d4931ac5d094151483b873fb1308a8f
+platform/hardware/invensense 82ab99971b88be9eea956d235336f1edc45cd80a
+platform/hardware/knowles/athletico/sound_trigger_hal 16e96953efac09ef0cb422cbe2213c7d93d2ea24
+platform/hardware/libhardware 77d6367551d731a79fec887325b3ee92759b395f
+platform/hardware/libhardware_legacy a21b139830831407ffd852a52c8955cc7396969d
+platform/hardware/nxp/nfc 8a3e11aea02a525659127a52f3542fbd837e8f69
+platform/hardware/nxp/secure_element b56b2a746978df21508d1dbf881306b26233105e
+platform/hardware/qcom/audio c48afbd982dfe0b5322166d052b81672a8f77508
+platform/hardware/qcom/bootctrl 67b145884ce157e66fe7d0a6e14df73c5902154f
+platform/hardware/qcom/bt 9e34b420f94431d2e03a62af5ddf17f3ed393354
+platform/hardware/qcom/camera a82086644867b80edbbd7220e290d924cf436713
+platform/hardware/qcom/data/ipacfg-mgr 3eafef7ae4bfb7fae594033ab6f3a2ab99c4e120
+platform/hardware/qcom/display 84615c837306d05e49cd221f250ef0e7a250f24c
+platform/hardware/qcom/gps dfc8e384e66c6325b92ee9a1e76640bac9735a99
+platform/hardware/qcom/keymaster 3a5f4b7107182a7812c7247aed89eea80cc1948e
+platform/hardware/qcom/media edefba9321b6886194fc25ede6f218241f6428a0
platform/hardware/qcom/msm8960 9d39df40bda58237a3b107b61a015c56e5c2f0e5
platform/hardware/qcom/msm8994 0f5b3f94e491ed789797c9647c0b4263baf9178c
platform/hardware/qcom/msm8996 6ad317e0cff144f5192293da56f8f5d5ff5c8191
@@ -660,170 +676,169 @@
platform/hardware/qcom/msm8x26 0c3893df1248b1672447be8bafed48a88633a336
platform/hardware/qcom/msm8x27 9c56c74bdc19cedfd54c757916bdf0a6f009f72d
platform/hardware/qcom/msm8x84 1bb54ae7ee26681e01db89e3a59f04ac6871622e
-platform/hardware/qcom/power 91765f84707e88add4fffba07471371c6cf29be6
-platform/hardware/qcom/sdm845/bt b07ebc39eb2cf4d2ae8a02f790ce1a1abded46b2
-platform/hardware/qcom/sdm845/data/ipacfg-mgr 353c28fda7b9f9e07069f3ac0212c1bb929b31dd
-platform/hardware/qcom/sdm845/display f8aa5d8b0b9566c014c51b17cfd0be1eab68402e
-platform/hardware/qcom/sdm845/gps ac6fe546672dfa34ee19a9e342cda6c31a09438e
-platform/hardware/qcom/sdm845/media f944e6c0db71b46868d5156bcded8f3ca2d2388d
-platform/hardware/qcom/sdm845/thermal c0409d64007fd0cc3e3f34b9eda9005b0306ae82
+platform/hardware/qcom/power 1d1b8707904595b22a09ee0851cbcc3abd735a12
+platform/hardware/qcom/sdm845/bt 1c04e0ad0bad01b0241c51a74b3da61f1f4c6f6d
+platform/hardware/qcom/sdm845/data/ipacfg-mgr a81b6cc2420ce96d65bc6af581f3a8140b790920
+platform/hardware/qcom/sdm845/display f98d907c84448542ef2495b0ffb0beb76175369c
+platform/hardware/qcom/sdm845/gps 7c443b489b3d4795c3804109d1bc548f23b58eed
+platform/hardware/qcom/sdm845/media 60c7450143d8606d30fae77bccf0b974de5ba018
+platform/hardware/qcom/sdm845/thermal 9cb01a0132463383f08b49385d9fafa60ee74431
platform/hardware/qcom/sdm845/vr 99dc43d44c9078792ea347873ab5a4d5f21d5ddb
platform/hardware/qcom/sm7150/gps 4361d8c8bc0eb519b1c5df34f6fc956d85791056
-platform/hardware/qcom/sm7250/display dbf2edae84a7566a038316c06d389e7aed476499
+platform/hardware/qcom/sm7250/display 541bb274dfb32f7469aef8461a492c02cb31ccf7
platform/hardware/qcom/sm7250/gps 9ee312f02b6b15c89f0f958b1602c58701edb167
-platform/hardware/qcom/sm7250/media a81180aeec33724adfe58201bb028a95bbfa2c5b
-platform/hardware/qcom/sm8150/data/ipacfg-mgr ff77aa2787472cf5ccc74af1c33729d97a6d9aa6
-platform/hardware/qcom/sm8150/display dc8fe98cbdabda54a013d2bdbe225d4296d4bdf9
-platform/hardware/qcom/sm8150/gps ff492b6aabaa063647b3ee20040270bd7db1d44a
-platform/hardware/qcom/sm8150/media 051bb5263135a265e7424faa2a0ba9656335f8a1
-platform/hardware/qcom/sm8150/thermal 1692753cd587e09ed280582f81c9488235c69b41
-platform/hardware/qcom/sm8150/vr d7bc43ebf06d6b005f23e9ddba8321d46214e8b0
+platform/hardware/qcom/sm7250/media dfa57043f03d2deb81682382df166abddff7af3f
+platform/hardware/qcom/sm8150/data/ipacfg-mgr 09cad96fd42a8baa442c4fdec8201a86adfa7cda
+platform/hardware/qcom/sm8150/display 9247eece27a2b20363e6fff9f034f76234377781
+platform/hardware/qcom/sm8150/gps 14ec0d6527cea4c2f91a4aa1681a0a74614ba9ee
+platform/hardware/qcom/sm8150/media 9b59f11af0b0fee7d66550d6c395309e1f74c359
+platform/hardware/qcom/sm8150/thermal 7766fb3acbee3f100e850eb1abccf676944c3b92
+platform/hardware/qcom/sm8150/vr cdeada793804960b6d81fe803c960c41e9ce29b9
platform/hardware/qcom/sm8150p/gps 2dcbb1efacb66e4ac019458a44640505b7b9b9c4
-platform/hardware/qcom/wlan 7a77fa04156b5e0e20535ef735b6bf412f596c61
-platform/hardware/ril 3537f476131b732e4e8b5f0ce84263fd7eb62d17
-platform/hardware/st/nfc b446265443657d0508fb0bb3730bd32735c38f6e
-platform/hardware/st/secure_element 137f87a1a75f76017114eef062cde82dcf827255
-platform/hardware/st/secure_element2 6c216fc59587fd69a7b47e4e27b85e8f07b2f8b9
-platform/hardware/ti/am57x ef3494b28c753bb42c8890e2ffd6cca9186f5b2d
-platform/libcore 34ad767039ef599072517a9fc08c21b290f0a7b2
-platform/libnativehelper 54fdea2cf2b9a9c3cabb75af48c7dad48b7b09f2
-platform/manifest cd52a222766b08ef268e6394d3a59ebadbc88c9b
-platform/packages/apps/BasicSmsReceiver 3fdffa805dd4bae17f01d7a3473d27d2597cdfc4
-platform/packages/apps/Bluetooth f6b3ca109afee1e6d069e77c3b6a75424e6d5961
-platform/packages/apps/Browser2 3ac7dc652d9e32fc48c2848b8efc85f39cca8dc7
+platform/hardware/qcom/wlan cdb645765533723e4128b4c941e97deb34f94c7c
+platform/hardware/ril b35650c91d00b445b4f4e7f3f9756f6e2914ed2c
+platform/hardware/st/nfc e5679f800f6d0440281490cc11a9f03c5d5f1133
+platform/hardware/st/secure_element b3e8e761b72ef75c66eb5e20455588fb4b565727
+platform/hardware/st/secure_element2 783edec321e23de335512d51a83b0d697d527c16
+platform/hardware/ti/am57x 0bee8b12e788af760526a0ccafd732723b39424b
+platform/libcore b4a64b7cafd26f5551b9e4faf957e830f0701d5b
+platform/libnativehelper d4f4c4fdb404f0395ce60b17b72d12183cca4135
+platform/manifest c421fe2c5371986aeb5c509a0c4f03427d8929a1
+platform/packages/apps/BasicSmsReceiver 93cc37e90608c17533b2a9c3cf8ec4390816249c
+platform/packages/apps/Bluetooth f070ebe6c0be2f30a85ec3ddb47975bce93b66f0
+platform/packages/apps/Browser2 069d786a7cb6a6e302e7794bdbfe0c494a26fb1b
platform/packages/apps/Calendar 242e671c9e7373a0df64f283bdea9699aa5c3b23
-platform/packages/apps/Camera2 cb1a1149f7b12e8f1b39ce554b697f51b559f915
-platform/packages/apps/Car/Calendar 76d1bf182cace480f8674d4ccb11924c679f9950
-platform/packages/apps/Car/Cluster 5d4976a01dfa81fbce0da86eae93bdb005298aa7
-platform/packages/apps/Car/Dialer d73e126fb246cf5b1a00f226c61cdb560d81c2ec
-platform/packages/apps/Car/Hvac 4be7b29598e1269a06fb17cedde59c5866e71c9b
-platform/packages/apps/Car/LatinIME ddee060e2587d1efea679e5fbacbda7c51bf2d7d
-platform/packages/apps/Car/Launcher cc6e39ff8b127d11d4e6b0c13a99045656f714da
-platform/packages/apps/Car/LinkViewer bbb41fce1e2221daed9f374a300e0898def7e20a
-platform/packages/apps/Car/LocalMediaPlayer 2808d7b88f158e916a41cd25872bd8fb4eb61a3a
-platform/packages/apps/Car/Media bf3da520f9d112ff9b1c4435d417bce5f722618b
-platform/packages/apps/Car/Messenger d42721064d220780e63532dc68656c1fd0baf1e6
-platform/packages/apps/Car/Notification 34eed14782f0ceb552fc824b49b0ecd78f8d162e
-platform/packages/apps/Car/Radio c75825a7a14351949d8d8d486e260640b8a3fa27
-platform/packages/apps/Car/RotaryController 3d630f488f1aaad29c905b1f53fa6c86e9b687ba
-platform/packages/apps/Car/Settings a572be01f345a8fc3fd4ebacfd059e551c34c372
-platform/packages/apps/Car/SystemUpdater af7ab9877a1ea07e656091988ac04f07d9322172
-platform/packages/apps/Car/libs 888b61115abc96bbfdc090bcca779eb90e57b5f0
-platform/packages/apps/Car/tests 79e4c3de8c8ea05bf26f26f93fa2019ca809c9cb
-platform/packages/apps/CarrierConfig 7952be8c3dfb584259cb214d0cf184189176b980
-platform/packages/apps/CellBroadcastReceiver e8c95208e07ef2b54051687c0709e1fc53bf5644
-platform/packages/apps/CertInstaller a63470c9e2a1d62dd9c41278dd9c5f7bd1b0b983
-platform/packages/apps/Contacts 9e36cb5ce3cda281e0681ef10a01a683cb903d47
-platform/packages/apps/DeskClock a81f2a02adcfb7024004616d03029e3580213bbc
-platform/packages/apps/DevCamera 4062a108078ef7a86e783919dfbaa25e446782bc
-platform/packages/apps/Dialer 5c35aa3a89f99907827917edbfb334696d66e315
-platform/packages/apps/DocumentsUI 0483201c46d5297071081f0e81aafcb3cd78b7c1
-platform/packages/apps/EmergencyInfo f7e2fd6e79bde4a3db0d147472593ab768462bbe
-platform/packages/apps/Gallery 99cb27abd5dd64422370f892f9cc9bf51d686eed
-platform/packages/apps/Gallery2 c5fc99ca17feeb2b75c0f6d362a241c12607e9fc
-platform/packages/apps/HTMLViewer 1d1739f65f1989bba8004d6575a540e8689cf801
-platform/packages/apps/KeyChain 1eb8d6c997dc74d8e26dd0e269098d12a336376c
-platform/packages/apps/Launcher3 27fd0f7bc3d3e4c6431a5de2877a5567d8eb037c
-platform/packages/apps/LegacyCamera bc6a5c6d73f7f872e657d7de36adf1e1ad763e08
-platform/packages/apps/ManagedProvisioning 152fea8cbfa7973e1ada33600b5ac3b5cb342c88
-platform/packages/apps/Messaging d7cc9e6c14eb5d404c699be65ac64037e233c7de
-platform/packages/apps/Music 316ecbe7efdb53eac4f02dc6dabeca961c83b8a3
-platform/packages/apps/MusicFX 540696aa3dfb8b76f93a2190a0c3223561c1c112
-platform/packages/apps/Nfc ac573699d1548b78866af2e6cf6d7b0ef4554876
-platform/packages/apps/OnDeviceAppPrediction d20f5e76ec89a05874506f1f7767a939df8a26a0
-platform/packages/apps/OneTimeInitializer 821d627941a57535245f081ef99debb950bc5f77
-platform/packages/apps/PackageInstaller 8d28dee0bf98be28eeb6b9f3249376da9c3d3c19
-platform/packages/apps/PhoneCommon 2b766952cdfec448582518af2a7d51f168e976d3
-platform/packages/apps/Protips c5ed3ea14be35a1052136725a5bc78f3d03fe5c7
-platform/packages/apps/Provision d220fd43b02640dff437489f07ec1f33508156a9
-platform/packages/apps/QuickAccessWallet ccf8c7857135986ce5db9fe053b06d96b77fe942
-platform/packages/apps/QuickSearchBox a01e901c9ee5ab826c12078290d910d5bf1740e4
-platform/packages/apps/SafetyRegulatoryInfo 08f63c061ff475e1753de1b6774d3d3989adbf7b
+platform/packages/apps/Camera2 005a4c0b1aa51fa913fcf6df2d3da835d094f86f
+platform/packages/apps/Car/Calendar 72aeb06d3220c2fe96928a30733480c5fb0c9fa3
+platform/packages/apps/Car/Cluster 9f5524eda612da73e2ff660baa3bcd4428b711fa
+platform/packages/apps/Car/Dialer b6c52907c3b6953c0f4be0d010905f76f6d2ce06
+platform/packages/apps/Car/Hvac 6ce4d2d251a8d8db74c4b80ef95c738f0fbb8f36
+platform/packages/apps/Car/LatinIME 4ecbd5851126f5dd4c4364028fda704e2d5bf41f
+platform/packages/apps/Car/Launcher 8750980f02a66490661a19cd6ba00749f92f648b
+platform/packages/apps/Car/LinkViewer 412ce13ed3ec9b835a9fb5aeb8c2f470e999e425
+platform/packages/apps/Car/LocalMediaPlayer 8bf05afc44459bc29ce3485ca1986c1b3241ec31
+platform/packages/apps/Car/Media c0cdf1b87881aa5f962733dc727f7be6f37b2cd0
+platform/packages/apps/Car/Messenger c71cb699227ca74bd15bcdad534a418bcc966781
+platform/packages/apps/Car/Notification c41b5c753fc9208582c193d61d51b7d86b19b5ec
+platform/packages/apps/Car/Radio b6e5e1585638ebb73d4b4d7894b099f4431576ea
+platform/packages/apps/Car/RotaryController e5424cb007dd53b9c67526b0b27b63ee61c5e22a
+platform/packages/apps/Car/Settings b50cdf1d5ea7825b306957dfd19f9c0e865ca1d8
+platform/packages/apps/Car/SystemUpdater 4abb6ae0dabf668b2921ef4842512683cfc24286
+platform/packages/apps/Car/libs 88ed6fb938586475c7560559df6f128765e15851
+platform/packages/apps/Car/tests 84ff6a43f63c09d9b21a81b1aa9283aa9edb89f9
+platform/packages/apps/CarrierConfig 002a04f606d9fedf23f59f59e0dfe9a6b91730e1
+platform/packages/apps/CellBroadcastReceiver 6fca6b45e2700d4f3c7f6e28f26c67df74eeceba
+platform/packages/apps/CertInstaller 8def6e3afffcd665350b1b682a6c6efeeb71e985
+platform/packages/apps/Contacts 43fd100a93eada8818c10c6a8b251b267246431e
+platform/packages/apps/DeskClock 238a4bdba88bc617ebe592368e7a7c59a2129081
+platform/packages/apps/DevCamera 853066cda9f6f8df2020fa3b1d4f4a2d20887f99
+platform/packages/apps/Dialer 64b55eba3dfe443e1ecbdaf70c4402949b1f5d51
+platform/packages/apps/DocumentsUI 0651740988cf1bc01cc1f3b0369330efdcef9336
+platform/packages/apps/EmergencyInfo 76020a97da413896b87814bb8fea39d7e7a2c6c3
+platform/packages/apps/Gallery f3e1a17fc92e9636a7c2bd20ceae6a6e874a8778
+platform/packages/apps/Gallery2 9bfc51cb7f7879ee05f42ba1af235d46f9901790
+platform/packages/apps/HTMLViewer 98a0ce499f77ab63d6373682f959a9f6bb0e0cfa
+platform/packages/apps/KeyChain 53f3db051271adcccf50fcf11be3e8ec44c63fbf
+platform/packages/apps/Launcher3 e9be03313c9994614991e5d5861b2192e5aae556
+platform/packages/apps/LegacyCamera 962755f773ef9dc8cdd4b1fee0da5ed6d92de7ee
+platform/packages/apps/ManagedProvisioning 477451307221613ef5aa22e19a0a3cf3372154c5
+platform/packages/apps/Messaging 582d8bf51b765a113ee678d37f046251e8331963
+platform/packages/apps/Music b41aa967c1f3f67f3200d1fcc3337a69dd2400fb
+platform/packages/apps/MusicFX 08429ccb9cf381ebcc9b4192f4170fabba6c833b
+platform/packages/apps/Nfc 0ed2bc93472625abea3862e0d57f9b8c9b960c07
+platform/packages/apps/OnDeviceAppPrediction 68b1595f2aa980cb67195704c617e4d929b6e0b1
+platform/packages/apps/OneTimeInitializer 87d77a3837db44c9117cd898bb3bd9c01b2924d4
+platform/packages/apps/PhoneCommon 5e0c3cb84dca0017e5eb7a11273f56087ad3cce6
+platform/packages/apps/Protips aa88b44828a11201fe3d3312de1d7d937ee09729
+platform/packages/apps/Provision ce629ff99e27654e025640b7d000c282f3110601
+platform/packages/apps/QuickAccessWallet daad97b00cb2b13c7f4cdf3215809561918788cd
+platform/packages/apps/QuickSearchBox e113a5fba4f226806b250c52be0ef62947f96eb6
+platform/packages/apps/RemoteProvisioner fddb0830dfdaa55b2220b4a4a6c15ee0ed7ce68b
+platform/packages/apps/SafetyRegulatoryInfo 3dd38c1260d9bb876b7102c6f34e212b927bf450
platform/packages/apps/SampleLocationAttribution 15af5a1c15dd6d72b5d27fb06bd8ebf68829ac66
-platform/packages/apps/SecureElement 46e18d5f4f66b41634bd4e6ab83300251c5ba141
-platform/packages/apps/Settings df78348f2a3b5e40c6fcd445b87762f753bf9cbc
-platform/packages/apps/SettingsIntelligence ee1ef65a0e9431224bfc20b14bff9cb890678c34
-platform/packages/apps/SpareParts f2efc57a57551b917d42f6848b6a1cc1fc33ab27
-platform/packages/apps/Stk f4b95a3656e78fd624aebb92264b58e7b1b10a5d
-platform/packages/apps/StorageManager 91f65cc995cf8059e9a519cadfdaab6f51972dae
-platform/packages/apps/TV 1a39c18c415d1b46bd63e2f4083c21b5bfc85364
-platform/packages/apps/Tag 24e01e60a8f637f135d9c3debe278d1a9afff2d0
-platform/packages/apps/Terminal 9e18a31921c1b9b244fc37df3c917d6ad00bdc3d
-platform/packages/apps/Test/connectivity 41ed460ed68df55ee730d1315fea475e4dbb6480
-platform/packages/apps/ThemePicker 4654c181cb1b847e4179aac5e9e038ebd99271c1
-platform/packages/apps/TimeZoneData 1a4dc4b8a3f89faac32f01dfe0e805f79b529f9d
-platform/packages/apps/TimeZoneUpdater 731517a048bb2a64fb4b25a74e396f98e7ba512a
-platform/packages/apps/Traceur 057260ec6fc8ede1d77f07768a4e98146f837aae
-platform/packages/apps/TvSettings 09ca3c3da527dc403da45b36aa34a1a4e0c1f1c8
-platform/packages/apps/UniversalMediaPlayer 66ad282b60c8dc64d4d0c5ae41ddba004bbedcb7
-platform/packages/apps/WallpaperPicker e51be2aff2a6d5857074f8bd9b5d40b6e8f59b12
-platform/packages/apps/WallpaperPicker2 6660e7c04de171df0b49957d5314de18811e4174
-platform/packages/inputmethods/LatinIME bb919431bb098f77263a22ed3f10199dfcfa947a
-platform/packages/inputmethods/LeanbackIME d2dafea1709bd8870947cd0196a7afd64c16d25f
-platform/packages/modules/ArtPrebuilt 7abd974f18485491c9c6b947c0e4cad7f0d970d3
+platform/packages/apps/SecureElement d90b98d2598b7aa240f3825b6893d68f58ea72d7
+platform/packages/apps/Settings c5dcfacfdab434914f4469e380a247c04a756217
+platform/packages/apps/SettingsIntelligence 80bb4c727045b69fc50e5a5fd797203d98aa03ba
+platform/packages/apps/SpareParts 8baa55d4af3268efeb4c00d515ea1172d0c30636
+platform/packages/apps/Stk 7ff508a66602e7d413f727c8b6f8d1ae117b73e6
+platform/packages/apps/StorageManager c3fbda9749863a93bb92505caaad20a2cfb0aaff
+platform/packages/apps/TV 4f4f2ace5bfd1fc89aeba9e32345c578d2f24cbc
+platform/packages/apps/Tag ce7ef4c60f300385e3c0746296db8ad1ac4c6b95
+platform/packages/apps/Test/connectivity 61dae4174cb79cf915d13b52663d879111ec47d9
+platform/packages/apps/ThemePicker cd1079719a96246fdec689d3d91bc39039cdeda5
+platform/packages/apps/TimeZoneData 473fcf21dbe3d1a92c6297fad04253f10ab5157c
+platform/packages/apps/TimeZoneUpdater 5f7eba16877c58ad6ecee3c944a4295bdc45475e
+platform/packages/apps/Traceur 9a40c2d1133275bf89e0e2a9afd556249b9d3275
+platform/packages/apps/TvSettings 36759b242000a1851d68361dfae39edfb9b1b536
+platform/packages/apps/UniversalMediaPlayer 8b751fb94c456d82d4e2218b8d1b04d79684c64e
+platform/packages/apps/WallpaperPicker fa2d55efa24067fff43c54d2ff84904486e21ae6
+platform/packages/apps/WallpaperPicker2 03e20d6671110841b9ce41bb8f419dd554af082a
+platform/packages/inputmethods/LatinIME c1385705288bd1f62055f33e7fe7ae705d2f24e3
+platform/packages/inputmethods/LeanbackIME e83d6120ec6930183bdf81740eae5f5c71c1a1c7
+platform/packages/modules/ArtPrebuilt bab54827be46882515555850dcbc5bca7fe778ab
platform/packages/modules/BootPrebuilt/5.10/arm64 ebf863dccbb55605535488a4ca03ea431fb04aed
platform/packages/modules/BootPrebuilt/5.4/arm64 6bde5a396b9edfe09883620d96920718a9767de5
-platform/packages/modules/CaptivePortalLogin fb6551a2a8f583023232ff44f3463f5ac52224cf
-platform/packages/modules/CellBroadcastService dfc60cc4d469fc8f61e9d4ebc4874f00667f9cbb
-platform/packages/modules/Connectivity 808d01d1bd95320f6923544543f768fd170f09e9
-platform/packages/modules/Cronet 22121de079b5336047c53b9e086a350e65fbdd64
-platform/packages/modules/DnsResolver 7b8172eb855504cf093679f20b46ec906af6c1ea
-platform/packages/modules/ExtServices de613741a25e5ee73d3a54d92b73c33553fc0925
-platform/packages/modules/Gki 7041174ab4259c0369d477e5b27ba78c812c58ef
-platform/packages/modules/IPsec 2ca4ab2db9cc2678aed5af6d7585245989660a98
-platform/packages/modules/ModuleMetadata b37f569f59a5df33940c385d264b29c45e7d2785
-platform/packages/modules/NetworkPermissionConfig d5e6944c73263cbd52808486d2562905379ec0a6
-platform/packages/modules/NetworkStack e6b3382bc02d8063cba0324f80d31016a68bce7c
-platform/packages/modules/NeuralNetworks b2a78b127b0759eacb0c49e854820b4b0c71b25b
-platform/packages/modules/Permission 9ba6ee7520591dddc13103a117f02ed5a08bb822
-platform/packages/modules/RuntimeI18n 27b999a9e69e1f4b134ef06ca102e4c8bc2226d8
-platform/packages/modules/SdkExtensions 73719d02641bea89061880b004537a0f3f401384
-platform/packages/modules/StatsD 4ce73db43a08ae0b71ff7a4e5bad5b81abc1b4c5
+platform/packages/modules/CaptivePortalLogin 098d3551b2bead0e272e273022aefc8c4bfbf431
+platform/packages/modules/CellBroadcastService f3b93ca522316b505b4e4407370b06d6507ac7b7
+platform/packages/modules/Connectivity da1fe8c641dc0dec732cae0a51bba38d90152e11
+platform/packages/modules/Cronet b92b8da5da20b6dfaae3984b8c36c9e809eae015
+platform/packages/modules/DnsResolver 2d9bcbb044b22b25f860b48b71e84c42114bf75d
+platform/packages/modules/ExtServices b2b1ae471001490425f3fafbdaa8d5e2ff95cc29
+platform/packages/modules/Gki 1af4ce8eb24e7bd8c975cfbef17a4eb216c385a9
+platform/packages/modules/IPsec 908ba8b8e114b3c2ad5afab2e7d70918d53b0f5e
+platform/packages/modules/ModuleMetadata 680f03b54f29ec25b3f106cfdc83e524869c736b
+platform/packages/modules/NetworkPermissionConfig 36d8c21193c1012a5286c0c93f035756f368f0f5
+platform/packages/modules/NetworkStack 98717634f19574da66dc36742b05d676fe89f8a9
+platform/packages/modules/NeuralNetworks bf4e57048eb5f7781f948d677c530f9fb1e40bad
+platform/packages/modules/Permission 42e7de6908a747ce844669bb131ae2891c2e6641
+platform/packages/modules/RuntimeI18n 1bdfa45df6ccd9e2d9d5bf02b22f50a07181953f
+platform/packages/modules/SdkExtensions 9d78492b5cc7e87d473393e311ee81706349fe46
+platform/packages/modules/StatsD 31dc23ada3d6e02067b48b9e8a4e4511b5d542fc
platform/packages/modules/TestModule 3523a2f0f9b12d4e60374af63aae14f75a2b4c10
-platform/packages/modules/Virtualization bf581dce514215663867ec212080697d8e4c14fa
-platform/packages/modules/Wifi 8e02330046d8e8af6e86b59f44d792d67e1d87b2
-platform/packages/modules/adb 4ceaca6c0a4ca51336d6561e80a1a3941e75fcc0
-platform/packages/modules/common a79d61ed386c0424b9dbaf8487d1cc67da1d7af7
-platform/packages/modules/vndk 1c3e2d932071cc731fa33e7c2c1a9b89bf907951
-platform/packages/providers/BlockedNumberProvider fef169b84800fc8d4a95d69553c2a3ca9df4a590
-platform/packages/providers/BookmarkProvider 86476288207582e7bb39e1285c541fab139a1366
-platform/packages/providers/CalendarProvider 03f9336a9ddee8e95114a4988f03174ee8213bcc
-platform/packages/providers/CallLogProvider a9147f34c1558a3ee5ca5780d2f6ef23b72f3e5e
-platform/packages/providers/ContactsProvider 834bf7f6282cd538b6237df90d9011a20cbf63c4
-platform/packages/providers/DownloadProvider c374d7d5d62aef2570862ca217af27df26954719
-platform/packages/providers/MediaProvider 6bad9bb8123ff41c4a3f36e2ae1a11304ce1de1b
-platform/packages/providers/PartnerBookmarksProvider a0536f962762afc202b13d923c97ece805640b9a
-platform/packages/providers/TelephonyProvider 712c7e687a0bdfa3230874665d3fbc1f208cdd07
-platform/packages/providers/TvProvider eb9ed23b540c90dc87fe84a576bf390bba5462e8
-platform/packages/providers/UserDictionaryProvider d93809bf940410559cf319fdcd4277c7afa64372
-platform/packages/screensavers/Basic 9755517c8a2955a2867010241c2ea6dec67243a0
-platform/packages/screensavers/PhotoTable 8a52293e6dfb2d7d13386410b2c08420135855c4
-platform/packages/services/AlternativeNetworkAccess 3b06827230010618fc4b945fadef300547fc9408
-platform/packages/services/BuiltInPrintService e02d368b7b72d5e99c7c6c75f01ec80414899bf0
-platform/packages/services/Car 3cb5df1c5ebb644915b2bed91c91fc363cf4f179
-platform/packages/services/Mms 8b4af519105816bde2bf1a4b408ae9ff780fb634
-platform/packages/services/Mtp 2b085d3c5493b08052168b9248f7b960e11eadba
-platform/packages/services/Telecomm a26ad10c79518d0ce636748dd34d74b24449378c
-platform/packages/services/Telephony a12a1557b8b49dbebb55c8aebfe83896e3125ea4
+platform/packages/modules/Virtualization a4b32678265260408fd46c3e37f51bc845a64e42
+platform/packages/modules/Wifi 2dc09460651eae835c6b9069358a8e305077f296
+platform/packages/modules/adb deed177f434098940ef67c0cba3f2760494a1c48
+platform/packages/modules/common 1d3f6cd55a368059f2f676703818e0cfd4c08345
+platform/packages/modules/vndk 0788faf7cfe5a697e2960d43decda38508ab044e
+platform/packages/providers/BlockedNumberProvider 057e1da2f1729022f0aaf5b950740511eac7ff1c
+platform/packages/providers/BookmarkProvider 012e9eb18b860804916ecbaa2f21d7047c8d4951
+platform/packages/providers/CalendarProvider 09b6aa82ab765115a7935e938306291c77296ca7
+platform/packages/providers/CallLogProvider 806dfaadb709c9a2b1b8f99e8f9d99750c381782
+platform/packages/providers/ContactsProvider 2cdb9ac5ae53a5c16478b626a18b7d0315819f3f
+platform/packages/providers/DownloadProvider 4d0f6cd88efd710a103567020b42c4ffb3082166
+platform/packages/providers/MediaProvider af0aec5bc3604348729357abcb8b60a11f3e6650
+platform/packages/providers/PartnerBookmarksProvider d72bcd1eb7740003b49bb76da2eb665b90e5d151
+platform/packages/providers/TelephonyProvider b180cdcac8b30e96ec32aba8fe9feadc42f7a8f5
+platform/packages/providers/TvProvider 6761be8ab72885dad71130cd5f393b72b51b1e1f
+platform/packages/providers/UserDictionaryProvider 2c3310087fb83f64d0ac61bfc7f4195e9c2c1c88
+platform/packages/screensavers/Basic 9375f12d1412a2e700c06772143fe213dd0cc210
+platform/packages/screensavers/PhotoTable 7caf434f0d811e5aa848d726f0faca3cfec6be1c
+platform/packages/services/AlternativeNetworkAccess 35baf56facb9953d587d004bc3caff9c8ba6759d
+platform/packages/services/BuiltInPrintService 4156cc99806b6e8bbfe364e2d4d49ddf68ac1478
+platform/packages/services/Car ebe67c2de1613422bf3516430b9c64d315193955
+platform/packages/services/Mms ad884b2295643f26647201b36378e409203450b1
+platform/packages/services/Mtp 563ddeb666190d69afba5b465b6fc67d97b13dfd
+platform/packages/services/Telecomm afd7f1460c812ba6d0c3f5e4444c868df4a4e570
+platform/packages/services/Telephony ef2e0a764cd4d2f665f73a44372f3786e6f9c749
platform/packages/wallpapers/ImageWallpaper 0a1680f07b09889c7642a775b6bb69d1b27f9b09
-platform/packages/wallpapers/LivePicker 060c97bec61a29a50d9f982a831de508ff088b95
-platform/pdk 44cb95f067cf5f06bfbf2162023c9cc4a3e4ac50
-platform/platform_testing 6b297fdbc81cb8405b244e02b9fa72b0802cb8a8
-platform/prebuilts/abi-dumps/ndk a28b57d1cb28b7f6963ef702f504dc1030165729
+platform/packages/wallpapers/LivePicker 991aa56b6ca715a1651fd96e7d2ce35838378494
+platform/pdk 10033e6b2df7aaaffe5d814996e83684de69a8ce
+platform/platform_testing ebdff050f73c7435ddf4efb4cdecbc6dad48c5de
+platform/prebuilts/abi-dumps/ndk 37b7911e6d6c072e288f06018ede920e2bb93276
platform/prebuilts/abi-dumps/platform 667b9c6101dce3c4a8c07090ed297fb74dd5a041
platform/prebuilts/abi-dumps/vndk 93c53c3fcba9c419677a6d30aee94ecd21be2430
platform/prebuilts/android-emulator d51949a8967717478ba88a4850ef11d542a23f42
-platform/prebuilts/asuite 7ab19bf40a6e2f93ed47c27f6c22a34e57535858
+platform/prebuilts/asuite 0c39651b3fb9f8dc8fca17baf9f93e9b76110e7d
platform/prebuilts/bazel/darwin-x86_64 483ebc32d8c381f771aa1005bb5adbdee7990704
platform/prebuilts/bazel/linux-x86_64 9eb0307b200d9aa0cb2a75fab9c335e21ba7fc90
-platform/prebuilts/build-tools 03ca571d1c4c41e69fc2335c0e3f8ab81de8981d
+platform/prebuilts/build-tools b19a62bbbe247a50234592902da2d8d04f027245
platform/prebuilts/bundletool cfefebda6347f409be1de0a1069dbf9a477ab41b
platform/prebuilts/checkcolor 9db4af220ea5dcd1083797ecd0d8bc66cd2a4a07
platform/prebuilts/checkstyle b79fe457904cdcea7780540c1a543c66db9458c1
platform/prebuilts/clang-tools 72375769f530feda538a146f6cbea76905e56968
-platform/prebuilts/clang/host/darwin-x86 f266b1a8ed6355011c896c88e2beef35ed8d2d60
-platform/prebuilts/clang/host/linux-x86 0594aefd400659fa0a44d6a604f98b7a9afdebf0
-platform/prebuilts/cmdline-tools 699fb56dee12e924cdb24953e37ceefa5b236539
+platform/prebuilts/clang/host/darwin-x86 12f3f3c947091c6fd78034a9f356ecd39cb0bdb8
+platform/prebuilts/clang/host/linux-x86 7dc9c19e9c8f8c60527e5a932340271ae0cc5645
+platform/prebuilts/cmdline-tools 716b16d78c6269c8de5c549a5ddb9795afcb65bf
platform/prebuilts/devtools e60e2ac20eeaa2eac82da9ed75579e12d91a527d
platform/prebuilts/fuchsia_sdk 20304b0e0a0380b823a5ca910a7a0aab8a975bc7
platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9 a963ca3ad3d644ebd28ffdf15799f6207ea545df
@@ -834,141 +849,141 @@
platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 42beb707ad2ad0911e798f22ad2dc62c955052e5
platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 ed044be71e7a9442baf5c775a2ce5221fda3531f
platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8 3d71b3715c020a51accdfccc3f7e5a0d78c8f820
-platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 faa36d7e05e8053a72ca00b8068e37f99a936bb1
+platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 fbde559c868deadf24933afed2fead0df2a13e9c
platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9 aacdf6611a4b21bb1c0c55bc4403bcdf46044e46
platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9 b936ddef1d13df2739d1b30946876106378e28f4
platform/prebuilts/gdb/darwin-x86 a23459f98c697a74229705832c574039f633a221
platform/prebuilts/gdb/linux-x86 cefa0269ee3a79860e3bd629edce2723fc0db43c
platform/prebuilts/go/darwin-x86 bfc58a68cb797f7b628789f9612d42f92edae1dc
platform/prebuilts/go/linux-x86 c4872aec836db1ad7339619c3070db208c42c804
-platform/prebuilts/gradle-plugin 252a87a89b55c485dc6d435fe3bb1b6e9ab0a51a
+platform/prebuilts/gradle-plugin 919b9e3ed05946ff97559a134c0ba4d6e7be4fa3
platform/prebuilts/jdk/jdk11 81afaa76d5104fba677b7547029ff54dee2f833e
platform/prebuilts/jdk/jdk8 ebff3bab14fad9aefec53f8c1efa436be119ee80
platform/prebuilts/jdk/jdk9 804aa5be223e8b7582022b6794e8279d46a7f33b
platform/prebuilts/ktlint b471908fc62105596ef96f7a70e63a4537f54ee1
-platform/prebuilts/manifest-merger be87528ff1268c6662e7837278e58995c15971fa
+platform/prebuilts/manifest-merger 7d50a59dd79262e7f30c5437010809dea42dd3cf
platform/prebuilts/maven_repo/android dd52ad05c8c4b1e6f8d5a4e2d20264b958eb6051
-platform/prebuilts/maven_repo/bumptech 335368b0000a8dc794731736bcf4f6e0c651fc01
-platform/prebuilts/misc 91b0cc3df81882107f8c06554e583a7dd1d244b1
-platform/prebuilts/module_sdk/art 755c850c851f6f7734d949e82b7ca40f54e95da1
-platform/prebuilts/ndk 15d202ee4d3b06ef80152d4b3ca92fc6dd011a38
+platform/prebuilts/maven_repo/bumptech 5037577cbbcfcfcbd492ad88267afab773ad16c2
+platform/prebuilts/misc 22542451d9bfccace780589b2a9ed3642761a05f
+platform/prebuilts/module_sdk/art bc399ed2f9a1f1bf34db51ead76e0b947e9213f4
+platform/prebuilts/ndk d9f4ce950a5c9c4673db3d0e5253b580eb895db0
platform/prebuilts/python/darwin-x86/2.7.5 0c5958b1636c47ed7c284f859c8e805fd06a0e63
platform/prebuilts/python/linux-x86/2.7.5 93bbb3a3bd580dae06a6b90c820a90bad2395bdc
-platform/prebuilts/qemu-kernel 27d83d649aa172cb2f5de147028d3402937a3af7
-platform/prebuilts/r8 846a4545d2a0f83f4d691d36cbf69f1b39030e88
-platform/prebuilts/remoteexecution-client ec8d3de58883b11f8bb7811a911b7f302df284c2
-platform/prebuilts/runtime a44d6f2e69203652dfc0c7090ffe8a332824fd21
-platform/prebuilts/rust ba2025b57aaa8038e3598299e1b41f179b18039c
-platform/prebuilts/sdk 13b954e5b472ed54b945f1407023bef213b02901
-platform/prebuilts/tools b63c2f693b0cbf11b515b48e3b9de0237b93aff5
-platform/prebuilts/vndk/v28 69c4c9cdc7057d971d84278aa08dfd7f8d3c9f13
-platform/prebuilts/vndk/v29 08fb16c73a682aea04a938b751401d09601f4d4c
-platform/prebuilts/vndk/v30 2fce52c5ccdbce8453ac862314b0c48bc7c9cf8b
-platform/sdk 97159aadda6b3a8e39df34246e957b024e4fa0bc
-platform/system/apex 1d0253d2be153e7dc736910f9ae0b9b84fc21acb
-platform/system/bpf 566b3d74b48d3d3584e1b2fce5ee3e1c8af7a15b
-platform/system/bpfprogs f1f152f2c120a0fbb8f13d551fd8a0210f1950ea
-platform/system/bt e757e658ca5f5365f4710d4ca33d2a394997d87f
-platform/system/ca-certificates ba0e94ab8756fbb5bd7f84c2b9d4173a67c5d847
-platform/system/chre dbebee89d21725e180480fd4897b2724e0dd2ad5
-platform/system/connectivity/wificond ef8e130cda2469115eb8ec2589a7fff29a85b682
-platform/system/core de6bc03d61e3c6dc44e42662fba46d32e822c789
-platform/system/extras 93674375aacfce92cbc60458fd328c2990876074
-platform/system/gatekeeper d7ef99ff88acb55441397f173afd8f533d558db9
-platform/system/gsid cc70239188cd7b2de4e8f61c6fa1b1cf273994a1
-platform/system/hardware/interfaces ee920f6e20275a8ea03afd28a9efad7e48d9f336
-platform/system/hwservicemanager 6ee3f224aa193c9644d39b3eb08c92e94e4a662e
-platform/system/incremental_delivery ad2fc9233df918eeab0480d8e904e6be43d6535d
-platform/system/iorap 84db2e24c9007556e5827c36c7e13248ebdf62e8
-platform/system/keymaster bb3a1f7d7d609ff394dbd00e71608c339aa17688
-platform/system/libartpalette 9cd41d8c08781b381f64622b3ef0b8e5cd7a3f5d
-platform/system/libbase b0819b288e2275dd1d51dbc9d99b57c32c84a94c
-platform/system/libfmq 03c6efdc255dbabf533f6aaba0a21378c1fcce00
-platform/system/libhidl f0351edf43cd7814e07e140afa87e3da9c38a970
-platform/system/libhwbinder a6d28b295da097ef0c061bb0735621a6b6d79c3b
-platform/system/libprocinfo 5ce5d05daecf6e8083da1f9898bb70c4e233941b
-platform/system/libsysprop 0536c9f04507c5d0760003cb3af6daecca377fb0
-platform/system/libufdt 40e8f492c9dc1f61c227dab65bcfa0e7d211aabc
-platform/system/libvintf bc12aeaa75c0739ff2c89314581e1329b33abe67
-platform/system/libziparchive 98b8309ab4edbfa5d2ba37aa6c80c4f14a8b11f6
-platform/system/linkerconfig 190d66dace1c6250d4218b7c4c7037a2bcfd4e61
-platform/system/logging 99b5d22d5dca086af78b041d6c82653bf25fd5e4
-platform/system/media 70ca3972431b3faf2d290a4bdaa04febf8207263
-platform/system/memory/libdmabufheap 28c7974f88bc8acfc2ff392678330e1edc418f8f
-platform/system/memory/libion 370ede1d3cef21b4b40cafae2dc1cdc3d15dbdf2
-platform/system/memory/libmeminfo 1637953e4bd30f033785c69c1468a33606c5a6bb
-platform/system/memory/libmemtrack ba69f0f951f30ae8f53969545f284d425972f4e2
-platform/system/memory/libmemunreachable e6c61ffa205933750f029f3373570f992115aadc
-platform/system/memory/lmkd f160343ab4deba22c780db15616488e42bf8198e
-platform/system/memory/mm_eventsd 21de5fa84a120f2bb2f5148f934539481d32d1a6
-platform/system/netd 4377e7a5b819b10ff0b8a53bc14717e6b3cea094
-platform/system/nfc 9de89a3f817db59f48a7042f926a615bb4f3f27e
-platform/system/nvram 92934b0c8bccd9381f7142e558dd3c6f84454dcf
-platform/system/security 4b630e339ec3419061fb3aa99010b1f70b621c61
-platform/system/sepolicy 9d0975bcfff9d04893ad94bb597607e6931769fc
-platform/system/server_configurable_flags 3cb112a460c6fb3ca6923e6fb0eb5b91325fd96f
-platform/system/teeui 32a5f59c6396c8854c5085074fc4272de747d8c5
-platform/system/testing/gtest_extras 80f52be639176ef257696e6ed503720e56a02938
-platform/system/timezone 5a3870cf0bf8178d4e6fa94530eea055dae701cf
-platform/system/tools/aidl e7a9c8c920616e4b8a852845a284a25fcc222bf0
-platform/system/tools/hidl 26f0280414943b6f0559004527fef5b40e3c6b4d
-platform/system/tools/mkbootimg 6a00b3b5809810124b92dbd5ee16fa3285d9395b
-platform/system/tools/sysprop 8c2aaa9e4e13937b60d4c700fd8a82e1bff8e0b8
-platform/system/tools/xsdc c4dd628a38525b296ea1e23bd54b9241f4044d34
-platform/system/unwinding f12e242d79b6baed3f09236b831f26d83c327778
-platform/system/update_engine f764ac4403bfb758e29bec80a7abbcc15f2d2efb
-platform/system/vold 6d1ef9ce8a87ab9a568247d69730ef781e3b0628
-platform/test/app_compat/csuite e060c60f0f0f6eb7b8fddb432e632963f32c3ba6
+platform/prebuilts/qemu-kernel d05dbbc1d281f5ec00be5195a9a7406cc83ed840
+platform/prebuilts/r8 894d5e51175b563036c6a17de780fc0ac043333a
+platform/prebuilts/remoteexecution-client 948f43318be1141fc2fc934fe16f633610db5d52
+platform/prebuilts/runtime 45f1f1778c0a37900d9b079a0e9f87061b255af9
+platform/prebuilts/rust 014017faacf2c3c7b2568fffbcd1df771b202c00
+platform/prebuilts/sdk 4049719619c78eaf779ef111acdebcdfe1fb0492
+platform/prebuilts/tools e52a22312757b9be7b2f65ad448a49bc50370218
+platform/prebuilts/vndk/v28 a3fe02b8b194fa05aba9aeb50f67a1831dfa816c
+platform/prebuilts/vndk/v29 6cfd7d791bdbb4a4def057f944c2377264f256e7
+platform/prebuilts/vndk/v30 58bd491428daa36c469e8b506b3c04da9ee36785
+platform/sdk 3f7dfb26b46c3b47c13bfe5655382896cf65f65a
+platform/system/apex 7d1bfcc490f875dc1970af84078cbe72d676cfad
+platform/system/bpf 0baae03485e069607e20dc2a7bfd3a53fda0eaf7
+platform/system/bpfprogs 70d23240a18c18a0facfc98554d65d395ed039aa
+platform/system/bt 3a51a0d9b2f2099a8a3d23a3c0b0e45bb8021e0b
+platform/system/ca-certificates 9d7f8235d6cba2e98623cc4c8bc19af0460f4169
+platform/system/chre 0ce81079567fc04652a2c187ed4b4e986202383b
+platform/system/connectivity/wificond 2dbb355c0d6c7df2c830ae1c3d9f0a56d05391f8
+platform/system/core 506e77af1cf8c101b808b8edfa662dbb6a3a36d8
+platform/system/extras 9c1c060c268fc62ae88df9cfe98bfb990a2bddc7
+platform/system/gatekeeper 39f5d0fe8eed12ffbf29c808e4120d5f434d5740
+platform/system/gsid 2e61c69a156e438b854c2c80e366ba386e0a9d62
+platform/system/hardware/interfaces a90608a0de22023cc46c9e68db71a56c6ffe62e6
+platform/system/hwservicemanager 18bb6170f9d5b1ddcb8b0c2af158d6744b0929d6
+platform/system/incremental_delivery 473e5a18602b5c321dd5fbd9ccdb7c23de7c1dcf
+platform/system/iorap 73a4ca1d2bab55659ebd80cb258e1ca5215b39ca
+platform/system/keymaster c8b966cbfce21696ef52b3f9b2246b16a1193bc0
+platform/system/libartpalette 4d67d7896bee92152bb766251823f8470fb6f01a
+platform/system/libbase fb161a86c71b45d26f5e0a956fce81ca7355de9b
+platform/system/libfmq cf6d2b7d7634d66c9c56ee5543e9f12a6e0a840f
+platform/system/libhidl 29a9160b6365db260295116b3d265c5f4c869d19
+platform/system/libhwbinder 0e48ffc1c33cb4f8f726f23125edd1c527e157af
+platform/system/libprocinfo d40670ed4ceeb77ec5439d4ea13e3cd388f96e08
+platform/system/libsysprop 86c9de2c6e9d16fe5a4f2ac8a2950dc189a61f9c
+platform/system/libufdt 201080e468daf5aa8638d083e008568ccd953390
+platform/system/libvintf 854134b0bb66048c311037ff44fc089bfc09710c
+platform/system/libziparchive f94f2b0935835e9ae962164cdcf2c71aef5c16d9
+platform/system/linkerconfig a837952bdfe04b6591e6ba45785b518e923c9d7f
+platform/system/logging e1834cf45c143b18dedd742d849c9149daf26b1e
+platform/system/media b46f6b0b35c4977a55a57595b3cc380ab4a9597a
+platform/system/memory/libdmabufheap 02ff73d21b10629ee59bf3d5570dc6ad8f696f9c
+platform/system/memory/libion 597a96ba0eb1d81dbf4fc8b514f5abef219a83bb
+platform/system/memory/libmeminfo 60b037ac30d21c02380a71dae1fc7c731955aa99
+platform/system/memory/libmemtrack e706f05fdea35d6b39da746080853c02bbd008af
+platform/system/memory/libmemunreachable 633bf5f9bdc76b7f520126c5d844fc2ff820c83b
+platform/system/memory/lmkd 136bd3c594ba1099d1fc0a5590a06efa308d2b7a
+platform/system/netd c53fb458688b3c2413993834723813628e52b33d
+platform/system/nfc 1061c77baea3485841d787564831d5e7c6a9fc49
+platform/system/nvram 2e6b24799d30a1ea989fef6f1291b191e88bcf9a
+platform/system/security 0d5cb50d10095f2d73fcc21cc5b2c4895399d8a4
+platform/system/sepolicy 0f9b767a2a840adddbda2343ff97682420322c4d
+platform/system/server_configurable_flags 55fcc8e789daf215e27414535ae0dfd827213114
+platform/system/teeui 48dc6d16f584551447c23ac875909a73eee4956f
+platform/system/testing/gtest_extras 70c1dde42c731d0f9e5f663a903f01751902c0fc
+platform/system/timezone ee3c73ce53f531f6dd5a189402122c13194414f9
+platform/system/tools/aidl 574a4f40b4778e2bcfff5ad95819cc7192bb6633
+platform/system/tools/hidl 72b6c9c0e225994297e144377672e88fdb0e1e8e
+platform/system/tools/mkbootimg 5be9b17df9808b4928230c4dc67ff25fd7b481b7
+platform/system/tools/sysprop 21e640ebb6ec1cd81c1c7e9be55bc1e18d20c016
+platform/system/tools/xsdc dc69983c04787fb72d62ac4ce9c6e6438c8e88dc
+platform/system/unwinding c5ba11e009d13a5595339fddce2bfb8165687b7d
+platform/system/update_engine 63be9f3dc3aa4b724353aeeec774030b89bf798e
+platform/system/vold 8b71028270bdfef162636424383767fa91552a78
+platform/test/app_compat/csuite dbd98db5ba602e959359db4fe2a8c86fd7a58eec
+platform/test/cts-root 3e0383547ad0b237601793164d87f5485b4f9b91
platform/test/framework 8de5dfec73511f3a0d808a08bd2bb687344a5eb1
-platform/test/mlts/benchmark f09d89209475efbcb8d49ac00c055babc639fe8c
+platform/test/mlts/benchmark c99f2ddcff191e1bbe89929cb9f02098997d73bf
platform/test/mlts/models d3e31924b0c08b439be624ecb19c7051c513fbe5
-platform/test/mts 77550422b2e03123a00a05bbeb6d4d704c67c793
-platform/test/suite_harness bf840c920a159469c50323fe5d2925ea6dc3ea58
+platform/test/mts 51b6a511cdb10dfe5bdb559394df92270f75eddc
+platform/test/suite_harness fa831dad5a776fbdc7edd6a92106d8f6ae86c09e
platform/test/vti/dashboard 9f2c217836240213fdc9c38fb8e4ed60dca7508d
platform/test/vti/fuzz_test_serving 92bbe4107e18344e675d200955112f647262fbc9
platform/test/vti/test_serving 06776920f2405d8841adc09ed08efe09442dda6f
-platform/test/vts 406292a03df1ff5c33ec69d2524b8d78af735489
-platform/test/vts-testcase/fuzz ee06950575b59fb8c1970f5d1d56aca5ea219058
-platform/test/vts-testcase/hal 1a3eff7b2ccb50069bac998b8fd1800a08b2d7d6
+platform/test/vts 1ecc1a4c4609d1fe79199e9459590def25bdf7a5
+platform/test/vts-testcase/fuzz 751113955bce954ae59a762db67c108bbed621c1
+platform/test/vts-testcase/hal 30c7eeed49f7081ab42af89f16a0d328ddd9504a
platform/test/vts-testcase/hal-trace 3782d14cb8ca24996b199e175525eeea47758632
-platform/test/vts-testcase/kernel 223a2c7aabc4e6bcd09e081abdd45065839697a0
+platform/test/vts-testcase/kernel c147d1675be41785bac363902c6a9b579185cec7
platform/test/vts-testcase/nbu e820ff8671671729b138d5fabf971a655f0752a5
platform/test/vts-testcase/performance b77dbab6102d7ed8432001d0727bb278cd66ea4b
-platform/test/vts-testcase/security 66dcd73d7245d95202f486b01ac90b9f42ae6a06
-platform/test/vts-testcase/vndk 89b782d0d87ea95cc0c26ec8171b0b2368b045e1
+platform/test/vts-testcase/security b1756096afd1ace78afd297caa1aa674bc3320e5
+platform/test/vts-testcase/vndk 92e3b185b06b805b4aa5b32d523ef7c5df26dbfe
platform/tools/aadevtools dc96ecb9c7bd037e4064c788954eba042e916283
-platform/tools/acloud b41a41f68be4012cbd0b570cbc3f799c34cc6334
-platform/tools/adt/idea 02ea205354eee5ce730a544f812753316782e87c
-platform/tools/apifinder 76211a4219e9989871b476540b9d9f7f988237fb
-platform/tools/apksig 1b98d311c9f0c77185479ebdc67aba4b6ae252de
-platform/tools/apkzlib ce27bf835057fd81a3ffeaec0e0541d597eb1a72
-platform/tools/asuite 1fd1141ae6453e519f18da324de7330642ba7f83
+platform/tools/acloud 0ebda242c930b13e32b248920e2b434e32853626
+platform/tools/adt/idea 513d33282e4078b778bee5d9ee4e651246327f7c
+platform/tools/apifinder 2b067bfe06186c8921f7b2e0ea95e5b74a916342
+platform/tools/apksig a996359300e8f111958bb3b5dd872a56f3bcbfeb
+platform/tools/apkzlib a32152bbb13b01ab059e5b583cb5457e92060e5d
+platform/tools/asuite afba6eaa4bde03c8e8f1b93d129dca66dfd04629
platform/tools/base 05590cea66d0c1031d50418d41c8c2b3ea904bb3
platform/tools/build 6b1bb180690cf463f31b6c1dd0a92e704713bb5d
-platform/tools/carrier_settings 4cea30d22603be1a0f89d9a72c364f078b800534
+platform/tools/carrier_settings f1f8b4294857e1ee88f60a2088ea3e0c4a026708
platform/tools/currysrc fb432841c4458cebcca7caa3073ab9809f69fcd4
-platform/tools/dexter c0b53a066f11b29e758dd215ff89a2962e569c86
-platform/tools/doc_generation 5cedf5989d2cd5a3f2f30e84a8facf43195b4264
-platform/tools/external/fat32lib 55e85d76376af94738ca47df5e4d6e9d31a78342
-platform/tools/external_updater 2b85342ca8accf6318de5595448869b9dab48ac6
+platform/tools/dexter d9457557da23548b76f970f37857f25092c47820
+platform/tools/doc_generation 2eccdc7e5e66d7736894ea8031e4e54a6f70db82
+platform/tools/external/fat32lib f0c8abee9e685986df1de01e66438dc3c5bd6882
+platform/tools/external_updater dcebbaffc1bdcc71092c57df9cc99338314a3b8d
platform/tools/idea 9b5d02ac8c92b1e71523cc15cb3d168d57fbd898
-platform/tools/loganalysis 642b346a54cfeebf860c7442f3474a59f1ebacee
-platform/tools/metalava ee592b1e8e0919e7b26d96a5df2b9368d20fa0a6
+platform/tools/loganalysis 24fcf75fe51f4e1f833d9e99aff492b3f73a0e98
+platform/tools/metalava 7dd307ad0117ea3322422eb84fa3df3389373135
platform/tools/motodev 69989786cefbde82527960a1e100ec9afba46a98
platform/tools/ndkports 9bf1830e2bc0719142a96a3a86821b5a82b71921
-platform/tools/repohooks d010f3b43172c222ef9feb38050a4c8f5542a314
-platform/tools/security 1fd32930b1f3e2d1c4640d9758f0ff23886837d7
+platform/tools/repohooks 712ec11c936f8a39c086e749b10978b3ccc5b94c
+platform/tools/security 95998679f32e4b4a4723d9abd13aa92de1d70131
platform/tools/studio/cloud 58f06e77e051fff3903adabca7acdaa9dd12ec2d
platform/tools/swt 8996e71047a2bd11efee46ef14e02435ab5fa07a
-platform/tools/test/connectivity f9dd75b330f94c7e482de9cf0cd989a232318694
-platform/tools/test/graphicsbenchmark efe9c50da9e7c80575bba6a22af42e51cfac36b0
+platform/tools/test/connectivity 251a1b66c499643a1285f0ed9ad3b74f8fb4410f
+platform/tools/test/graphicsbenchmark d50de4b7fc121e9171cc08a6e476f8250876de6d
platform/tools/test/openhst ea2a59957ca27660622bf30111b8129e32cfef71
-platform/tools/tradefederation 9a21fa3fade0771044ff498c9eeebca32bccc25a
-platform/tools/tradefederation/contrib b233b8aca1b39848581df62fa28f963260cc975c
-platform/tools/tradefederation/prebuilts b35d9d7cea4454948d35e31381d8a554002c1e50
-platform/tools/treble f248b0f545bbee5308a2c4be588c287ff2338f44
-platform/tools/trebuchet cd4942d71cbcc3ac117d71c9680ddd0a72d7ef1c
+platform/tools/tradefederation e130244d452e903587a004f7e81793894d40a0f9
+platform/tools/tradefederation/contrib f63c4466ebeb2c62d817a2f83960d73becafc9b1
+platform/tools/tradefederation/prebuilts 2621f5d30464672c5ad72e9a6a652b010218a996
+platform/tools/treble 085c0fe20bc81ac75322b06e98480809cc54bc5e
+platform/tools/trebuchet 0e36df9dee0d54c25daccfc9b7a37cd5d371c551
toolchain/benchmark c29d67ccd5521fa1f96ec69d3da5314b3dbd77d8
toolchain/llvm-project 664b187160dc951c2cea3b69f92decf358d8e75a
toolchain/pgo-profiles b1be4c3ab11695403b97b3e9913661546e4813a7
-tools/platform-compat d02314392589dec1ac03ecce06ea5cecadb6108a
+tools/platform-compat 473b353535dc9da593e9caa0fe6759d4174ee404
diff --git a/simpleperf_utils.py b/simpleperf_utils.py
index aefb965..3bb4d57 100644
--- a/simpleperf_utils.py
+++ b/simpleperf_utils.py
@@ -153,9 +153,15 @@
'test_option': 'version',
'path_in_sdk': 'platform-tools/adb',
},
- 'readelf': {
- 'is_binutils': True,
- 'accept_tool_without_arch': True,
+ 'llvm-objdump': {
+ 'is_binutils': False,
+ 'path_in_ndk':
+ lambda platform: 'toolchains/llvm/prebuilt/%s-x86_64/bin/llvm-objdump' % platform,
+ },
+ 'llvm-readelf': {
+ 'is_binutils': False,
+ 'path_in_ndk':
+ lambda platform: 'toolchains/llvm/prebuilt/%s-x86_64/bin/llvm-readelf' % platform,
},
'llvm-symbolizer': {
'is_binutils': False,
@@ -612,11 +618,11 @@
break
def _build_symbolizer_args(self, binary_path):
- args = [self.symbolizer_path, '-print-address', '-inlining', '-obj=%s' % binary_path]
+ args = [self.symbolizer_path, '--print-address', '--inlining', '--obj=%s' % binary_path]
if self.with_function_name:
- args += ['-functions=linkage', '-demangle']
+ args += ['--functions=linkage', '--demangle']
else:
- args.append('-functions=none')
+ args.append('--functions=none')
return args
def _parse_source_location(self, line):
@@ -748,9 +754,14 @@
real_path, arch = dso_info
objdump_path = self.objdump_paths.get(arch)
if not objdump_path:
- objdump_path = find_tool_path('objdump', self.ndk_path, arch)
+ if arch == 'arm':
+ # llvm-objdump for arm is not good at showing branch targets.
+ # So still prefer objdump.
+ objdump_path = find_tool_path('objdump', self.ndk_path, arch)
if not objdump_path:
- log_exit("Can't find objdump. Please set ndk path with --ndk_path option.")
+ objdump_path = find_tool_path('llvm-objdump', self.ndk_path, arch)
+ if not objdump_path:
+ log_exit("Can't find llvm-objdump. Please set ndk path with --ndk_path option.")
self.objdump_paths[arch] = objdump_path
# 3. Run objdump.
@@ -758,6 +769,8 @@
'--start-address=0x%x' % start_addr,
'--stop-address=0x%x' % (start_addr + addr_len),
real_path]
+ if arch == 'arm' and 'llvm-objdump' in objdump_path:
+ args += ['--print-imm-hex']
try:
subproc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
(stdoutdata, _) = subproc.communicate()
@@ -782,9 +795,9 @@
class ReadElf(object):
""" A wrapper of readelf. """
def __init__(self, ndk_path):
- self.readelf_path = find_tool_path('readelf', ndk_path)
+ self.readelf_path = find_tool_path('llvm-readelf', ndk_path)
if not self.readelf_path:
- log_exit("Can't find readelf. Please set ndk path with --ndk_path option.")
+ log_exit("Can't find llvm-readelf. Please set ndk path with --ndk_path option.")
def get_arch(self, elf_file_path):
""" Get arch of an elf file. """
diff --git a/test.py b/test.py
index 257fa38..3191901 100755
--- a/test.py
+++ b/test.py
@@ -56,8 +56,8 @@
from binary_cache_builder import BinaryCacheBuilder
from simpleperf_report_lib import ReportLib
from simpleperf_utils import (
- AdbHelper, Addr2Nearestline, bytes_to_str, find_tool_path, get_script_dir, is_elf_file,
- is_python3, is_windows, log_exit, log_info, log_fatal, Objdump, ReadElf, remove,
+ AdbHelper, Addr2Nearestline, bytes_to_str, extant_dir, find_tool_path, get_script_dir,
+ is_elf_file, is_python3, is_windows, log_exit, log_info, log_fatal, Objdump, ReadElf, remove,
SourceFileSearcher, str_to_bytes)
try:
@@ -110,6 +110,7 @@
self.device_features = None
self.browser_option = []
self.progress_fh = None
+ self.ndk_path = None
def testdata_path(self, testdata_name):
""" Return the path of a test data. """
@@ -215,6 +216,10 @@
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 TEST_HELPER.ndk_path:
+ if args[0] in ['app_profiler.py', 'binary_cache_builder.py', 'pprof_proto_generator.py',
+ 'report_html.py']:
+ args += ['--ndk_path', TEST_HELPER.ndk_path]
if args[0].endswith('.py'):
args = [sys.executable, TEST_HELPER.script_path(args[0])] + args[1:]
use_shell = args[0].endswith('.bat')
@@ -1225,7 +1230,7 @@
}
],
}
- addr2line = Addr2Nearestline(None, binary_cache_path, with_function_name)
+ addr2line = Addr2Nearestline(TEST_HELPER.ndk_path, binary_cache_path, with_function_name)
for dso_path in test_map:
test_addrs = test_map[dso_path]
for test_addr in test_addrs:
@@ -1274,7 +1279,7 @@
'expected_items': [
('main():', 0),
('system/extras/simpleperf/runtest/two_functions.cpp:20', 0),
- (' 694: add x20, x20, #0x6de', 0x694),
+ ('694: add x20, x20, #1758', 0x694),
],
},
'/simpleperf_runtest_two_functions_arm': {
@@ -1283,7 +1288,7 @@
'expected_items': [
('main():', 0),
('system/extras/simpleperf/runtest/two_functions.cpp:20', 0),
- (' 7ae: bne.n 7a6 <main+0x22>', 0x7ae),
+ ('7ae: bne.n 7a6 <main+0x22>', 0x7ae),
],
},
'/simpleperf_runtest_two_functions_x86_64': {
@@ -1292,7 +1297,7 @@
'expected_items': [
('main():', 0),
('system/extras/simpleperf/runtest/two_functions.cpp:20', 0),
- (' 96e: mov %edx,(%rbx,%rax,4)', 0x96e),
+ ('96e: movl %edx, (%rbx,%rax,4)', 0x96e),
],
},
'/simpleperf_runtest_two_functions_x86': {
@@ -1301,21 +1306,31 @@
'expected_items': [
('main():', 0),
('system/extras/simpleperf/runtest/two_functions.cpp:20', 0),
- (' 748: cmp $0x5f5e100,%ebp', 0x748),
+ ('748: cmpl $100000000, %ebp', 0x748),
],
},
}
- objdump = Objdump(None, binary_cache_path)
+ objdump = Objdump(TEST_HELPER.ndk_path, binary_cache_path)
for dso_path in test_map:
dso = test_map[dso_path]
dso_info = objdump.get_dso_info(dso_path)
self.assertIsNotNone(dso_info, dso_path)
disassemble_code = objdump.disassemble_code(dso_info, dso['start_addr'], dso['len'])
self.assertTrue(disassemble_code, dso_path)
- for item in dso['expected_items']:
- self.assertIn(
- item, disassemble_code, 'for %s: %s not found %s' %
- (dso_path, item, disassemble_code))
+ i = 0
+ for expected_line, expected_addr in dso['expected_items']:
+ found = False
+ while i < len(disassemble_code):
+ line, addr = disassemble_code[i]
+ if addr == expected_addr and expected_line in line:
+ found = True
+ i += 1
+ break
+ i += 1
+ if not found:
+ s = '\n'.join('%s:0x%x' % item for item in disassemble_code)
+ self.fail('for %s, %s:0x%x not found in disassemble code:\n%s' %
+ (dso_path, expected_line, expected_addr, s))
def test_readelf(self):
test_map = {
@@ -1342,7 +1357,7 @@
'arch': 'x86',
}
}
- readelf = ReadElf(None)
+ readelf = ReadElf(TEST_HELPER.ndk_path)
for dso_path in test_map:
dso_info = test_map[dso_path]
path = os.path.join(TEST_HELPER.testdata_dir, dso_path)
@@ -1396,6 +1411,7 @@
super(TestNativeLibDownloader, self).setUp()
self.adb = TEST_HELPER.adb
self.adb.check_run(['shell', 'rm', '-rf', '/data/local/tmp/native_libs'])
+ self.ndk_path = TEST_HELPER.ndk_path
def tearDown(self):
self.adb.check_run(['shell', 'rm', '-rf', '/data/local/tmp/native_libs'])
@@ -1408,7 +1424,7 @@
def test_smoke(self):
# Sync all native libs on device.
- downloader = NativeLibDownloader(None, 'arm64', self.adb)
+ downloader = NativeLibDownloader(self.ndk_path, 'arm64', self.adb)
downloader.collect_native_libs_on_host(TEST_HELPER.testdata_path(
'SimpleperfExampleWithNative/app/build/intermediates/cmake/profiling'))
self.assertEqual(len(downloader.host_build_id_map), 2)
@@ -1450,12 +1466,12 @@
self.adb.check_run(['shell', 'mkdir', '-p', '/data/local/tmp/native_libs'])
self.adb.check_run(['push', 'build_id_list', '/data/local/tmp/native_libs'])
remove('build_id_list')
- downloader = NativeLibDownloader(None, 'arm64', self.adb)
+ downloader = NativeLibDownloader(self.ndk_path, 'arm64', self.adb)
downloader.collect_native_libs_on_device()
self.assertEqual(len(downloader.device_build_id_map), 0)
def test_download_file_without_build_id(self):
- downloader = NativeLibDownloader(None, 'x86_64', self.adb)
+ downloader = NativeLibDownloader(self.ndk_path, 'x86_64', self.adb)
name = 'elf.so'
shutil.copyfile(TEST_HELPER.testdata_path('data/symfs_without_build_id/elf'), name)
downloader.collect_native_libs_on_host('.')
@@ -1546,7 +1562,7 @@
class TestBinaryCacheBuilder(TestBase):
def test_copy_binaries_from_symfs_dirs(self):
- readelf = ReadElf(None)
+ readelf = ReadElf(TEST_HELPER.ndk_path)
strip = find_tool_path('strip', arch='arm')
self.assertIsNotNone(strip)
symfs_dir = os.path.join(self.test_dir, 'symfs_dir')
@@ -1557,7 +1573,7 @@
source_file = os.path.join(symfs_dir, filename)
target_file = os.path.join('binary_cache', filename)
expected_build_id = readelf.get_build_id(origin_file)
- binary_cache_builder = BinaryCacheBuilder(None, False)
+ binary_cache_builder = BinaryCacheBuilder(TEST_HELPER.ndk_path, False)
binary_cache_builder.binaries['simpleperf_runtest_two_functions_arm'] = expected_build_id
# Copy binary if target file doesn't exist.
@@ -1577,7 +1593,7 @@
self.assertTrue(filecmp.cmp(target_file, source_file))
def test_copy_elf_without_build_id_from_symfs_dir(self):
- binary_cache_builder = BinaryCacheBuilder(None, False)
+ binary_cache_builder = BinaryCacheBuilder(TEST_HELPER.ndk_path, False)
binary_cache_builder.binaries['elf'] = ''
symfs_dir = TEST_HELPER.testdata_path('data/symfs_without_build_id')
source_file = os.path.join(symfs_dir, 'elf')
@@ -1827,6 +1843,7 @@
parser.add_argument('--test-from', nargs=1, help='Run left tests from the selected test.')
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('--ndk-path', type=extant_dir, help='Set the path of a ndk release')
parser.add_argument('pattern', nargs='*', help='Run tests matching the selected pattern.')
args = parser.parse_args()
tests = get_all_tests()
@@ -1850,6 +1867,8 @@
print("Skip tests on Android version < N.", file=TEST_LOGGER)
return False
+ TEST_HELPER.ndk_path = args.ndk_path
+
remove(TEST_HELPER.test_base_dir)
if not args.browser:
diff --git a/test_monitor.py b/test_monitor.py
new file mode 100755
index 0000000..d7ae950
--- /dev/null
+++ b/test_monitor.py
@@ -0,0 +1,314 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2020 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+"""test_monitor.py: Run test.py and report test summary.
+
+1. Support testing multiple devices at the same time.
+2. Support repeating tests.
+3. Continue test if test.py aborts in the middle.
+4. Handle both parallel tests and serialized tests.
+
+"""
+
+import argparse
+import collections
+import fnmatch
+import os
+import re
+import shutil
+import subprocess
+import sys
+import time
+
+from simpleperf_utils import AdbHelper, extant_dir, log_exit, log_info
+
+Device = collections.namedtuple('Device', ['name', 'serial_number'])
+
+Config = collections.namedtuple(
+ 'Config',
+ ['devices', 'python_interpreters', 'repeat_times', 'test_patterns', 'test_dir', 'ndk_path'])
+
+CONFIG = None
+
+TEST_TIMEOUT_IN_SEC = 180
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument(
+ '-d', '--device', nargs='+',
+ help='set devices used to run tests. Each device in format name:serial-number')
+ parser.add_argument('--python-version', choices=['2', '3', 'both'], default='both', help="""
+ Run tests on which python versions.""")
+ parser.add_argument('-r', '--repeat', type=int, default=1, help='times to repeat tests')
+ parser.add_argument('--test-dir', default='.', help='test dir')
+ parser.add_argument('-p', '--pattern', nargs='+',
+ help='Run tests matching the selected pattern.')
+ parser.add_argument('--ndk-path', type=extant_dir, help='Set the path of a ndk release')
+ args = parser.parse_args()
+
+ devices = []
+ if args.device:
+ for s in args.device:
+ name, serial_number = s.split(':')
+ devices.append(Device(name=name, serial_number=serial_number))
+ else:
+ devices.append(Device(name='default', serial_number=None))
+
+ if args.python_version == '2':
+ python_interpreters = ['python']
+ elif args.python_version == '3':
+ python_interpreters = ['python3']
+ else:
+ python_interpreters = ['python', 'python3']
+
+ global CONFIG
+ CONFIG = Config(
+ devices=devices, python_interpreters=python_interpreters, repeat_times=args.repeat,
+ test_patterns=args.pattern, test_dir=args.test_dir, ndk_path=args.ndk_path)
+ log_info('config = %s' % (CONFIG,))
+
+def get_test_script_path():
+ return os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test.py')
+
+
+def is_serialized_test(test):
+ return test in ['TestExamplePureJava.test_run_simpleperf_without_usb_connection']
+
+
+def get_tests():
+ res = subprocess.run('%s %s --list-tests' % (sys.executable, get_test_script_path()),
+ check=True, shell=True, stdout=subprocess.PIPE, encoding='utf-8')
+ tests = [x.strip() for x in res.stdout.split('\n') if x.strip()]
+ if CONFIG.test_patterns:
+ patterns = [re.compile(fnmatch.translate(x)) for x in CONFIG.test_patterns]
+ tests = [t for t in tests if any(pattern.match(t) for pattern in patterns)]
+ parallel_tests = [t for t in tests if not is_serialized_test(t)]
+ serialized_tests = [t for t in tests if is_serialized_test(t)]
+ if not parallel_tests and not serialized_tests:
+ log_exit('no test to run')
+ return parallel_tests, serialized_tests
+
+
+class Task:
+ """ Run test.py one time for a device and python interpreter.
+ """
+
+ def __init__(self, name, device, python_interpreter, tests, repeat_index):
+ self.name = name
+ self.device = device
+ self.python_interpreter = python_interpreter
+ self.tests = tests
+ self.repeat_index = repeat_index
+ self.try_time = 0
+ self.test_results = {}
+ self.test_proc = None
+ self.test_dir = None
+ self.progress_file = None
+ self.failed_to_setup_test = None
+ self.last_update_time = None
+
+ def start_task(self):
+ assert not self.test_proc
+ not_started_tests = [t for t in self.tests if t not in self.test_results]
+ assert not_started_tests
+ self.try_time += 1
+ self._create_test_dir()
+ with open(os.path.join(self.test_dir, 'tests.txt'), 'w') as fh:
+ fh.write('\n'.join(not_started_tests) + '\n')
+
+ self.progress_file = os.path.join(self.test_dir, 'progress_file.txt')
+ env = os.environ.copy()
+ if self.device.serial_number:
+ env['ANDROID_SERIAL'] = self.device.serial_number
+ if not self._is_device_available():
+ for t in self.tests:
+ if t not in self.test_results:
+ self.test_results[t] = 'DEVICE_NOT_AVAILABLE'
+ return
+ args = [self.python_interpreter, get_test_script_path(),
+ '--progress-file', self.progress_file]
+ if CONFIG.ndk_path:
+ args += ['--ndk-path', CONFIG.ndk_path]
+ args += not_started_tests
+ self.test_proc = subprocess.Popen(args, cwd=self.test_dir, env=env)
+ self.last_update_time = time.time()
+ log_info('start task for %s' % self.test_dir)
+
+ def _create_test_dir(self):
+ test_name = '%s_%s_%s_repeat%d_try%d' % (
+ self.name, self.device.name, self.python_interpreter, self.repeat_index, self.try_time)
+ self.test_dir = os.path.abspath(test_name)
+ if os.path.isdir(self.test_dir):
+ shutil.rmtree(self.test_dir)
+ os.mkdir(self.test_dir)
+
+ def _is_device_available(self):
+ adb = AdbHelper()
+ if self.device.serial_number:
+ adb.serial_number = self.device.serial_number
+ res, _ = adb.run_and_return_output(['shell', 'pwd'], log_output=False, log_stderr=False)
+ return res
+
+ def update_status(self):
+ if self.finished():
+ return
+ assert self.test_proc
+ has_update = False
+ if os.path.isfile(self.progress_file):
+ with open(self.progress_file, 'r', encoding='utf-8') as fh:
+ for line in fh.readlines():
+ items = line.strip().split()
+ if len(items) == 2 and items[1] in ['OK', 'FAILED']:
+ if self.test_results.get(items[0]) != items[1]:
+ has_update = True
+ self.test_results[items[0]] = items[1]
+ if has_update:
+ self.last_update_time = time.time()
+ elif time.time() - self.last_update_time > TEST_TIMEOUT_IN_SEC:
+ self.test_proc.kill()
+
+ if self.test_proc.poll() is not None:
+ self.test_proc = None
+ if not self.finished():
+ # Test process ends without finishing all tests.
+ # It should be caused by failing to setup a test.
+ for t in self.tests:
+ if t not in self.test_results:
+ self._on_failed_to_setup_test(t)
+ break
+
+ def _on_failed_to_setup_test(self, test):
+ if self.failed_to_setup_test is None or self.failed_to_setup_test[0] != test:
+ self.failed_to_setup_test = [test, 1]
+ else:
+ self.failed_to_setup_test[1] += 1
+ # Mark a test as failed if failing to setup it for multiple times.
+ if self.failed_to_setup_test[1] == 5:
+ self.test_results[test] = 'FAILED_TO_SETUP'
+
+ def started(self):
+ return self.test_proc is not None
+
+ def finished(self):
+ return all([t in self.test_results for t in self.tests])
+
+ def enumerate_new_task(self):
+ """ When one task finishes, it can enumerate a new task to run, for repeat testing or
+ another python version.
+ """
+ if self.repeat_index < CONFIG.repeat_times:
+ return Task(
+ self.name, self.device, self.python_interpreter, self.tests, self.repeat_index + 1)
+ if self.python_interpreter != CONFIG.python_interpreters[-1]:
+ i = CONFIG.python_interpreters.index(self.python_interpreter)
+ return Task(self.name, self.device, CONFIG.python_interpreters[i+1], self.tests, 1)
+ return None
+
+ def force_stop(self):
+ if self.test_proc:
+ self.test_proc.kill()
+
+
+class TestSummary:
+ def __init__(self, tests):
+ tests.sort()
+ self.results = {}
+ for device in CONFIG.devices:
+ for python_interpreter in CONFIG.python_interpreters:
+ results = self.results['%s_%s' % (device.name, python_interpreter)] = {}
+ for test in tests:
+ for repeat_index in range(1, CONFIG.repeat_times + 1):
+ test_name = '%s_repeat_%d' % (test, repeat_index)
+ results[test_name] = 'None'
+
+ def update(self, task):
+ config_name = '%s_%s' % (task.device.name, task.python_interpreter)
+ results = self.results[config_name]
+ for t, status in task.test_results.items():
+ test_name = '%s_repeat_%d' % (t, task.repeat_index)
+ results[test_name] = status
+
+ self._write_summary()
+
+ def _write_summary(self):
+ with open('test_summary.txt', 'w') as fh:
+ for config_name in sorted(self.results):
+ fh.write('%s\n' % config_name)
+ results = self.results[config_name]
+ for test_name in sorted(results):
+ result = results[test_name]
+ fh.write('\t%s: %s\n' % (test_name, result))
+
+ with open('failed_test_summary.txt', 'w') as fh:
+ for config_name in sorted(self.results):
+ results = self.results[config_name]
+ has_failure = any(result not in ['OK', 'None'] for result in results.values())
+ if not has_failure:
+ continue
+ fh.write('%s\n' % config_name)
+ for test_name in sorted(results):
+ result = results[test_name]
+ if result not in ['OK', 'None']:
+ fh.write('\t%s: %s\n' % (test_name, result))
+
+
+def run_tasks(tasks, test_summary):
+ try:
+ while tasks:
+ for task in tasks:
+ if not task.started():
+ task.start_task()
+ task.update_status()
+ test_summary.update(task)
+ new_tasks = []
+ for task in tasks:
+ if task.finished():
+ new_task = task.enumerate_new_task()
+ if new_task:
+ new_tasks.append(new_task)
+ else:
+ new_tasks.append(task)
+ tasks = new_tasks
+ time.sleep(2)
+ except KeyboardInterrupt:
+ for task in tasks:
+ task.force_stop()
+
+
+def main():
+ parse_args()
+ parallel_tests, serialized_tests = get_tests()
+ test_summary = TestSummary(parallel_tests + serialized_tests)
+ if parallel_tests:
+ tasks = []
+ for device in CONFIG.devices:
+ tasks.append(
+ Task(
+ 'test', device, CONFIG.python_interpreters[0],
+ parallel_tests, 1))
+ run_tasks(tasks, test_summary)
+ if serialized_tests:
+ for device in CONFIG.devices:
+ tasks = [
+ Task(
+ 'serialized_test', device, CONFIG.python_interpreters[0],
+ serialized_tests, 1)]
+ run_tasks(tasks, test_summary)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/update.py b/update.py
index 9f871b7..0ff7eaa 100755
--- a/update.py
+++ b/update.py
@@ -138,7 +138,7 @@
def list_prebuilts():
"""List all prebuilts in current directory."""
result = []
- for d in ['bin', 'doc', 'inferno', 'testdata', 'app_api']:
+ for d in ['bin', 'doc', 'inferno', 'testdata', 'app_api', 'purgatorio']:
if os.path.isdir(d):
result.append(d)
result += glob.glob('*.py') + glob.glob('*.js')