<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.yoctoproject.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>16429</bug_id>
          
          <creation_ts>2026-09-17 18:17:37 +0000</creation_ts>
          <short_desc>server/process: make the runCommand reply timeout configurable (hardcoded 30s+30s too short for large images)</short_desc>
          <delta_ts>2026-10-20 10:38:04 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>7</classification_id>
          <classification>Build System, Metadata &amp; Runtime</classification>
          <product>BitBake</product>
          <component>bitbake</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Multiple</op_sys>
          <bug_status>NEEDINFO</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>Medium</priority>
          <bug_severity>minor</bug_severity>
          <target_milestone>6.2</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bogdan Prădatu">bogdan.pradatu</reporter>
          <assigned_to name="Bogdan Prădatu">bogdan.pradatu</assigned_to>
          <cc>paul</cc>
    
    <cc>poky.bs.watcher</cc>
    
    <cc>poky.watcher</cc>
    
    <cc>randy.macleod</cc>
    
    <cc>richard.purdie</cc>
    
    <cc>ross.burton</cc>
    
    <cc>yoann.congal</cc>
          
          
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>Yes (doc changes required)</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106877</commentid>
    <comment_count>0</comment_count>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-09-17 18:17:37 +0000</bug_when>
    <thetext>ServerCommunicator.runCommand() in lib/bb/server/process.py (https://github.com/openembedded/bitbake/blob/62be9113d98fccb347c6aa0a10d5c4ee2857f8b6/lib/bb/server/process.py#L476) enforces a hardcoded 30s + 30s reply timeout. On large image builds the server can legitimately be busy longer than 60s inside a single GIL-holding operation, so an otherwise-healthy build is sporadically aborted with:
```
    NOTE: No reply from server in 30s (for command ping at ...)
    Timeout while waiting for a reply from the bitbake server (60s at ...)
```

There is currently no way to raise this threshold, not via a variable and not via a command-line option. I would like to propose making it configurable via an environment variable (e.g. `BB_COMMAND_TIMEOUT`), keeping the current 30s/60s as the default.

Note that `BB_SERVER_TIMEOUT` does not help here: it only controls how long the resident server stays alive when idle, which is unrelated to the command reply poll.

Affected code (still present on master, bitbake 2.19.1):
```python
    # lib/bb/server/process.py
    class ServerCommunicator():
        def runCommand(self, command):
            ...
            if not self.recv.poll(30):
                logger.info(&quot;No reply from server in 30s (for command %s at %s)&quot;
                            % (command[0], currenttime()))
                if not self.recv.poll(30):
                    raise ProcessTimeout(
                        &quot;Timeout while waiting for a reply from the bitbake &quot;
                        &quot;server (60s at %s)&quot; % currenttime())
```

Why the server exceeds 60s
==========================
I traced this to the runqueue&apos;s per-task dispatch. Live py-spy stack of the server process at the moment the UI reported &quot;No reply&quot;, captured on bitbake 2.8.0 / Python 3.12.10. The idle thread was in state &quot;active+gil&quot; and was still in the same frame 10 seconds later:

```
    Thread (active+gil): &quot;Thread-1 (idle_thread)&quot;
        __getnewargs__ (collections/__init__.py:476)
        send_pickled_data (bb/runqueue.py:1359)   # pickle.dumps(data)
        execute (bb/runqueue.py:2403)             # send_pickled_data(w, runtask, &quot;runtask&quot;)
        _execute_runqueue (bb/runqueue.py:1620)
        execute_runqueue (bb/runqueue.py:1654)
        buildTargetsIdle (bb/cooker.py:1488)
        idle_thread_internal (bb/server/process.py:435)

    Thread (idle): &quot;MainThread&quot;
        idle_commands (bb/server/process.py:505)  # cannot reply: GIL is held
```

Probable mechanism:
 - `execute()` builds a per-task runtask dict containing &apos;taskdepdata&apos;: `self.build_taskdepdata(task)`.

 - `build_taskdepdata()` walks the task&apos;s entire transitive dependency closure and returns `{tid: bb.TaskData(...)}`. `bb.TaskData` is a namedtuple, so pickling each entry calls `__getnewargs__`, matching the captured frame.

 - For late image tasks (`do_image_complete`, `do_rootfs`, `do_flush_pseudodb`, `do_image_ext4/cpio`) that closure is effectively the whole build (thousands of tasks). `pickle.dumps()` of that structure runs for tens of seconds on the server&apos;s idle thread while holding the GIL, starving the MainThread that answers the ping.

The `build_taskdepdata_cache` optimisation (commit c4519b542) helps building the dict, but the full taskdepdata is still pickled per task on the GIL thread, unchanged on master (runqueue.py:2405 / 2422).

Observed impact
===============
Intermittent CI failures on a large Yocto image build (~7900 tasks), roughly 30-45% of builds, always in the final image-assembly phase, and reproducible across different build machines.

The machine is otherwise idle at the stall: no I/O pressure, no memory pressure, no OOM, and no process in D state. That is consistent with a pure CPU/GIL stall in userspace Python rather than any resource exhaustion.

Precedent
=========
This class of failure has been addressed twice before by raising the hardcoded literal:

 - 131d4b8a5 (2017) &quot;server/process: Increase runCommand timeout&quot;, 5s -&gt; 30s:
   &quot;We were seeing cases where we could hit the 5s timeout on large/fast machines running many different tasks at once.&quot;  [YOCTO #12116]

 - e567743e7 (2020) &quot;server/process: Increase timeout for commands&quot;, added the second 30s poll: &quot;We&apos;re running into this timeout on loaded autobuilders in situations where things should otherwise succeed.&quot;

This is the third occurrence of the same pattern as builds continue to grow.
Rather than bumping the constant a third time, I suggest making it tunable.

Proposed change
===============
Make the poll interval configurable, defaulting to the current 30s so existing behaviour is unchanged:

```python
    class ServerCommunicator():
        def __init__(self, connection, recv):
            self.connection = connection
            self.recv = recv
            try:
                self.timeout = float(os.environ.get(&quot;BB_COMMAND_TIMEOUT&quot;, 30))
            except ValueError:
                logger.warning(&quot;Ignoring invalid BB_COMMAND_TIMEOUT, using 30s&quot;)
                self.timeout = 30

        def runCommand(self, command):
            ...
            if not self.recv.poll(self.timeout):
                logger.info(&quot;No reply from server in %ss (for command %s at %s)&quot;
                            % (self.timeout, command[0], currenttime()))
                if not self.recv.poll(self.timeout):
                    raise ProcessTimeout(
                        &quot;Timeout while waiting for a reply from the bitbake &quot;
                        &quot;server (%ss at %s)&quot;
                        % (2 * self.timeout, currenttime()))
```

Let me know what you think. I could, probably, submit a patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106923</commentid>
    <comment_count>1</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2026-09-24 14:37:23 +0000</bug_when>
    <thetext>Please don&apos;t send such a patch. The issue is likely to be too much over the IPC rather than the timeout and that should be fixed instead.

8000 tasks is normal and shouldn&apos;t be an issue and our systems run this regularly. Is this machine heavily resource constrained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106933</commentid>
    <comment_count>2</comment_count>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-09-25 07:42:47 +0000</bug_when>
    <thetext>Hi,

I have to be honest, I have no idea what IPC is. The machines are not resource constrained, they are virtual machines with 16 CPU (1 thread per core) / 32 GB RAM (32GB swap), otherwise idle during the failures.

We are also running the yocto build on k9s pods where disk swap isn&apos;t available, so I am applying these settings in CI for all builds:
```
# Deriving Yocto parallelism: available_cpus=16, available_memory_gib=31.30, gib_per_thread=3.00, memory_threads=10 -&gt; BB_NUMBER_THREADS=10, PARALLEL_MAKE=-j 10
# Use conservative no-swap Kubernetes parallelism capped by both the cgroup-aware CPU count
# and the available memory (roughly 3.0 GiB per BitBake thread).
BB_NUMBER_THREADS:forcevariable = &quot;10&quot;
PARALLEL_MAKE:forcevariable = &quot;-j 10&quot;

# Dynamically throttle BitBake task scheduling when Linux memory PSI pressure is high.
BB_PRESSURE_MAX_MEMORY = &quot;50000&quot;
```

At the moment of &quot;No reply from server&quot;:
 - PSI cpu/io/memory &quot;full&quot; ~0% (no stall or queueing)
 - No processes in D state (no I/O block)
 - No OOM (cgroup memory.events oom=0), GBs of RAM free
 - Reproduces on multiple different hosts, with cache on and off, and at two different BB_NUMBER_THREADS/PARALLEL_MAKE settings
 - The stall lands on different tasks between runs (do_flush_pseudodb, do_image_complete, do_rootfs, do_packagedata, ...), i.e. not always one slow task

So, as much as I can tell, it isn&apos;t disk, memory pressure or host contention since the machine is pretty much idle while the server goes quiet.

attaching py-spy to the live bitbake-server at the exact &quot;No reply&quot; moment (and again 10s later) shows the idle_thread in the same frame both times, holding the GIL:

```python
    __getnewargs__ (collections/__init__.py:476)
    send_pickled_data (bb/runqueue.py:1359)   # pickle.dumps(data)
    execute (bb/runqueue.py:2403)             # send_pickled_data(worker, runtask, &quot;runtask&quot;)
    buildTargetsIdle (bb/cooker.py:1488)
```

That&apos;s what led me to point at the per-task taskdepdata pickle. I don&apos;t have visibility into how large that taskdepdata payload is for our image, so we may well be hitting a scaling edge on that side.

If there&apos;s a specific thing you&apos;d like me to measure or instrument to better diagnose this issue, let me know.

A colleague applied a patch to the bitbake code, increasing the timeout to 120s and we&apos;re not seeing issues so far, but we may as well just be covering up the symptoms instead of actually fixing the root cause.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106936</commentid>
    <comment_count>3</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2026-09-25 16:20:34 +0000</bug_when>
    <thetext>The 120s is almost certainly masking some other issue. I&apos;d have a look at the size of the data being transferred by send_pickled_data(), maybe log that somewhere.

IPC is &quot;Inter Process Communication&quot;, i.e. how bitbake communicates between it&apos;s workers, the server (cooker) and the UI (knotty) which are all separate processes.

My suspicion is there is a large chunk of data unintentionally being transferred between them and this is what is taking up the time, if you profile shows it in this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106984</commentid>
    <comment_count>4</comment_count>
      <attachid>5250</attachid>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-10-01 15:11:49 +0000</bug_when>
    <thetext>Created attachment 5250
Instrumented bitbake server patch for timeout diagnosis

I (and when I say &quot;I&quot;, I mean my AI companion) instrumented send_pickled_data() to time the pickle and the pipe write separately, and also profiled the taskdepdata entries individually when the payload is large.

I am building this image: https://github.com/nxp-auto/meta-grayvip/blob/release/GrayVIP-1.0.6.4/recipes-fsl/images/fsl-image-grayvip.bb

Well, an internal unreleased version, not the exact one from the url. We&apos;re on poky scarthgap (BB 2.8.0, Python 3.12). There are ~7900 tasks, 10 consecutive builds on the same code/image.

The data size is normal, but pickle.dumps() non-deterministically degenerates on it.

The runtask payload for late image tasks (do_rootfs, do_image_*, do_flush_pseudodb) is ~6.6 MiB with ~7800-7900 taskdepdata entries. The pipe write is consistently fast (0.01-0.02s). The pickle is where all the time goes:

Build  Result  Stalling task        entries  pickle_time
-----  ------  -------------------  -------  -------------------
37     FAIL    do_image_cpio        7840     146.37s
38     PASS    (none)               7826     max 0.98s
39     FAIL    do_flush_pseudodb    7827     136.04s
40     PASS    (none)               7826     max 2.28s
44     FAIL    do_image_tar         7830     154.08s
45     PASS    (none)               7826     max 0.27s
46     PASS    (none)               7826     max 0.33s
47     FAIL    do_image_qa          7828     &gt;120s (killed)
48     PASS    (none)               7826     max 1.21s
49     PASS    (none)               7826     max 0.80s

Builds 47 shows &apos;&gt;120s (killed)&apos; because the 60s heartbeat timeout terminated the server before pickle.dumps() returned. The build_taskdepdata log (emitted before the pickle call) appeared ~2 minutes before the kill.

Also seems like different tasks hit the pickle stall each time, it&apos;s not consistently halting in one place.

When pickling each taskdepdata entry separately, the sum is ~0.6-0.9s for all ~7800 entries, with the slowest single entry at 0.015s. But pickling the same entries as a single dict takes 2-146s (or hangs).

From build 48 (passing):
- Pickle 7826 entries one by one: 0.46s total
- Pickle the same entries as one dict: 1.21s

From build 39 (failing):
- Pickle 7826 entries one by one: 0.93s total  
- Pickle the same entries as one dict: 136.04s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107082</commentid>
    <comment_count>5</comment_count>
    <who name="Paul Barker">paul</who>
    <bug_when>2026-10-15 15:26:11 +0000</bug_when>
    <thetext>Hi,

What&apos;s the full list of layers you have included in the build? For public layers could you share the specific commits used?

I wonder if this is reproducible without third party BSP layers. If you take just poky and try `bitbake core-image-full-cmdline core-image-sato core-image-weston`, that should exercise the same do_image* tasks a few times. You could collect the pickle time for that and see if it significantly different.

There are a couple of possible causes for the stall - either something on your build infrastructure or something in the layers you&apos;re using. Trying to reproduce with just the core layers would help to determine which is the likely culprit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107083</commentid>
    <comment_count>6</comment_count>
    <who name="Randy MacLeod">randy.macleod</who>
    <bug_when>2026-10-15 17:46:40 +0000</bug_when>
    <thetext>Set to NEEDINFO state so we don&apos;t loose track of this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107105</commentid>
    <comment_count>7</comment_count>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-10-19 07:20:24 +0000</bug_when>
    <thetext>You&apos;re not gonna make this easy on me are you :))?

The layer list:
BBLAYERS ?= &quot; \
  {yocto_workspace_dir}/sources/poky/meta \
  {yocto_workspace_dir}/sources/poky/meta-poky \
  {yocto_workspace_dir}/sources/poky/meta-yocto-bsp \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-oe \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-multimedia \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-python \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-networking \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-gnome \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-filesystems \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-webserver \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-perl \
  {yocto_workspace_dir}/sources/meta-openembedded/meta-xfce \
  {yocto_workspace_dir}/sources/meta-virtualization \
  {yocto_workspace_dir}/sources/meta-security \
  {yocto_workspace_dir}/sources/meta-freescale \
  {yocto_workspace_dir}/sources/meta-rust-bin \
  {yocto_workspace_dir}/sources/meta-alb/meta-alb-bsp \
  {yocto_workspace_dir}/sources/meta-alb/meta-alb-sdk \
  {yocto_workspace_dir}/sources/meta-alb-dev \
  {yocto_workspace_dir}/sources/meta-alb-url-proxy \
  {yocto_workspace_dir}/sources/meta-aws \
  {yocto_workspace_dir}/sources/meta-vip \
  {yocto_workspace_dir}/sources/meta-grayvip \
  {yocto_workspace_dir}/sources/meta-grayvip-dev \
  {yocto_workspace_dir}/sources/meta-eiqa \
  {yocto_workspace_dir}/sources/meta-carv \
  {yocto_workspace_dir}/sources/meta-alb/hw-partitions/hw-partition-1.2/meta-alb-hw-partition-1.2.1 \
  &quot;

The public layers:
Layer                               Remote                           Revision
-----                                -----                           --------
poky (scarthgap)                     git.yoctoproject.org            077627338ac18aeca34bfe0c52777fab38e2e0c0
meta-openembedded                    git.openembedded.org            e621da947048842109db1b4fd3917a02e0501aa2
meta-freescale                       git.yoctoproject.org            62423c69631d7f7cffe2bd20997412d76caa94ef
meta-security                        git.yoctoproject.org            bc865c5276c2ab4031229916e8d7c20148dfbac3
meta-virtualization                  git.yoctoproject.org            af1db2042caf8021d767dce1b26c08b59b96f3d1
meta-rust-bin                        github.com/rust-embedded        63d677de912551b8f5606ce459748532c6ae529d
meta-qoriq                           github.com/nxp-qoriq            533e78f92774326d48f15adb5982a516fe114ee7
meta-aws (upstream: scarthgap)       git.yoctoproject.org            d82f0cdbda398d3fbab92318ced32c37b6c1d0d4


Reran 10 builds with a minimal config, as you suggested (`bitbake core-image-full-cmdline core-image-sato core-image-weston`):
BBLAYERS ?= &quot; \
  {yocto_workspace_dir}/sources/poky/meta \
  {yocto_workspace_dir}/sources/poky/meta-poky \
  {yocto_workspace_dir}/sources/poky/meta-yocto-bsp \
  &quot;

This is how it looks like:
Build  Host         Max pickle_time  Task                    Entries  Size
-----  -----------  ---------------  ----------------------  -------  -------
1      Host 1       55.978s          do_create_runtime_spdx  2848     2.11 MiB
2      Host 2        8.288s          do_package              2763     1.67 MiB
3      Host 3       47.200s          do_write_qemuboot_conf  5141     4.28 MiB
4      Host 2       25.588s          do_packagedata          2764     1.67 MiB
5      Host 1       50.977s          do_package_write_rpm    3030     1.97 MiB
6      Host 4        9.121s          do_rootfs               7935     6.82 MiB
7      Host 3       54.986s          do_image                5144     4.28 MiB
8      Host 1       49.595s          do_image                5144     4.28 MiB
9      Host 4        9.568s          do_package_write_rpm    3129     2.09 MiB
10     Host 2       23.789s          do_package              2715     1.65 MiB

Some of them are pretty close to the 60s timeout threshold.

Should I try anything else, send some of my collected data or what&apos;s the next step?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107113</commentid>
    <comment_count>8</comment_count>
    <who name="Paul Barker">paul</who>
    <bug_when>2026-10-19 07:50:10 +0000</bug_when>
    <thetext>That is good data!

Being that close to the 60s timeout with only the core layers is unexpected. With more layers and more to pickle it&apos;s no surprise that it is pushed over the timeout. So I don&apos;t think there is likely to be a specific issue in the other layers you&apos;re using.

What&apos;s interesting is that the max pickle duration doesn&apos;t correlate with the size of the data being pickled.

The remaining possibilities:
- Poor/inconsistent pickle performance in oe-core/bitbake
- Issue in your infrastructure causing stalls

Could you share the instrumentation code you used to create that table?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107117</commentid>
    <comment_count>9</comment_count>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-10-19 13:33:47 +0000</bug_when>
    <thetext>Check the attachment of this bug, there is a patch called &quot;Instrumented bitbake server patch for timeout diagnosis&quot;

Or check comment No. 4 https://bugzilla.yoctoproject.org/show_bug.cgi?id=16429#c4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107130</commentid>
    <comment_count>10</comment_count>
    <who name="Paul Barker">paul</who>
    <bug_when>2026-10-20 09:09:42 +0000</bug_when>
    <thetext>Hi,

I applied the instrumentation patch to poky (scarthgap commit 104772c5fd0653290cbb5e4b77813343957939cc) and ran `bitbake core-image-base core-image-full-cmdline core-image-weston core-image-sato` to generate lots of samples. Looking at the resulting bitbake-send-pickled-data.csv file, and sorting by pickle time (4th column), the maximum value I see is around 185 ms to pickle 168 kB for zstd:do_populate_sysroot. Only the top 4 entries took longer than 100 ms. The largest amount of data (6.76 MB for core-image-sato:do_populate_lic_deploy) took around 18ms.

I suspect the issue here is your build environment. Do you have a non-kubernetes environment you can test in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107131</commentid>
    <comment_count>11</comment_count>
    <who name="Bogdan Prădatu">bogdan.pradatu</who>
    <bug_when>2026-10-20 10:38:04 +0000</bug_when>
    <thetext>OK, thanks for testing. I was actually hitting this issue on static virtual machines, not in kubernetes. I will try to test in a different environment and see how it goes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5250</attachid>
            <date>2026-10-01 15:11:49 +0000</date>
            <delta_ts>2026-10-01 15:11:49 +0000</delta_ts>
            <desc>Instrumented bitbake server patch for timeout diagnosis</desc>
            <filename>0001-bitbake-timeout-diagnostic-instrumentation-for-send_pickl.patch</filename>
            <type>text/plain</type>
            <size>21881</size>
            <attacher name="Bogdan Prădatu">bogdan.pradatu</attacher>
            
              <data encoding="base64">RnJvbSAzYjY3YTFhMWRkYzhmYTEwMWFjMjBmYjhhMWUxYjAxNjUyYjg0YzA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBCb2dkYW4gUHJhZGF0dSA8Ym9nZGFuLW1hcml1cy5wcmFkYXR1
QG54cC5jb20+CkRhdGU6IEZyaSwgMjUgU2VwIDIwMjYgMTc6Mzg6MTggKzAwMDAKU3ViamVjdDog
W1BBVENIXSBBQ0lDRC0zMzc0OiBkaWFnbm9zdGljIGluc3RydW1lbnRhdGlvbiBmb3Igc2VuZF9w
aWNrbGVkX2RhdGEKIElQQy9waWNrbGUgdGltaW5nCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt
VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n
OiA4Yml0CgpOb3QgZm9yIHVwc3RyZWFtIHN1Ym1pc3Npb24gLSB0ZW1wb3JhcnkgZGlhZ25vc3Rp
YyByZXF1ZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUKKGJpdGJha2UtZGV2ZWwpIHRvIGRpc3Rpbmd1
aXNoIHNsb3cgcGlja2xpbmcgb2YgYSBsYXJnZSB0YXNrZGVwZGF0YSBwYXlsb2FkCmZyb20gc2xv
dyBJUEMgdHJhbnNwb3J0IGFzIHRoZSBjYXVzZSBvZiBpbnRlcm1pdHRlbnQgJ05vIHJlcGx5IGZy
b20gc2VydmVyJwp0aW1lb3V0cyBvbiBvdXIgbGFyZ2UgaW1hZ2UgYnVpbGQuCgpTZXJ2ZXIgc2lk
ZSAoYmIvcnVucXVldWUucHksIFJ1blF1ZXVlLnNlbmRfcGlja2xlZF9kYXRhKToKLSB0aW1lcyBw
aWNrbGUuZHVtcHMoKSBhbmQgdGhlIHN0ZGluLndyaXRlKCkgc2VwYXJhdGVseQotIGZvciAncnVu
dGFzaycgcGF5bG9hZHMsIGFsc28gcmVjb3JkcyBmbi90YXNrbmFtZS9sZW4odGFza2RlcGRhdGEp
Ci0gbG9ncyBldmVyeSBjYWxsIHRvIGEgQ1NWIChhY2ljZDMzNzQtc2VuZC1waWNrbGVkLWRhdGEu
Y3N2KSBhbmQgYWRkaXRpb25hbGx5CiAgdmlhIGxvZ2dlci53YXJuaW5nKCkgd2hlbiBzaXplL3Rp
bWUgY3Jvc3MgYSB0aHJlc2hvbGQsIHNvIGl0J3MgdmlzaWJsZSBpbgogIHRoZSBub3JtYWwgYnVp
bGQgbG9nIHdpdGhvdXQgZ3JlcHBpbmcgYSBzaWRlIGZpbGUKCldvcmtlciBzaWRlIChiaW4vYml0
YmFrZS13b3JrZXIsIEJpdGJha2VXb3JrZXIuaGFuZGxlX2l0ZW0pOgotIHRpbWVzIGhvdyBsb25n
IGEgZnJhbWVkIG1lc3NhZ2Ugc2l0cyBwYXJ0aWFsbHktcmVjZWl2ZWQgaW4gdGhlIHBpcGUKICAo
SVBDL3RyYW5zaXQpIHNlcGFyYXRlbHkgZnJvbSBob3cgbG9uZyB1bnBpY2tsaW5nIGl0IHRha2Vz
IChDUFUpLCBsb2dnZWQKICB0byBhY2ljZDMzNzQtd29ya2VyLmNzdgoKRW50aXJlbHkgb3B0LWlu
IHZpYSBBQ0lDRDMzNzRfRElBRz0xIChkZWZhdWx0IG9mZik7IHZlcmlmaWVkIGEgbm8tb3Agb24g
dGhlCmRpc2FibGVkIHBhdGggYW5kIGZ1bmN0aW9uYWxseSB2ZXJpZmllZCBib3RoIGluc3RydW1l
bnRhdGlvbiBwb2ludHMgd2l0aApzeW50aGV0aWMgcGF5bG9hZHMgKGluY2wuIHBhcnRpYWwtcmVj
ZWl2ZSBmcmFtaW5nKSBiZWZvcmUgdXNlLgoKQUNJQ0QtMzM3NDogZ2l2ZSB3b3JrZXIgZGlhZyBs
b2cgaXRzIG93biBlbnYgdmFyIChhdm9pZCBpbnRlcmxlYXZpbmcpCgpSZW5hbWUgdGhlIHdvcmtl
ci1zaWRlIGRpYWcgbG9nIHZhcmlhYmxlIHRvIEFDSUNEMzM3NF9ESUFHX1dPUktFUl9MT0cgc28g
aXQKbm8gbG9uZ2VyIHNoYXJlcyBBQ0lDRDMzNzRfRElBR19MT0cgd2l0aCB0aGUgc2VydmVyJ3Mg
c2VuZF9waWNrbGVkX2RhdGEoKQpsb2cuIE11bHRpcGxlIGJpdGJha2Utd29ya2VyIHByb2Nlc3Nl
cyBydW4gY29uY3VycmVudGx5LCBzbyB3cml0aW5nIHRvIHRoZQpzYW1lIGZpbGUgYXMgdGhlIHNl
cnZlciByaXNrZWQgaW50ZXJsZWF2ZWQvY29ycnVwdGVkIENTViBsaW5lcy4KCkFDSUNELTMzNzQ6
IHJlbW92ZSBBQ0lDRDMzNzRfRElBRyBlbmFibGUvZGlzYWJsZSBndWFyZCwgYWx3YXlzIGluc3Ry
dW1lbnQKCkJ1aWxkIFZJUC1TMzJONDk5LUJMRExJTi0zMCBwcm9kdWNlZCBubyBkaWFnIENTVnMg
YmVjYXVzZSBhIGJpdGJha2Ugc2VydmVyCnByb2Nlc3MgcGVyc2lzdGVkL3dhcyByZXVzZWQgZnJv
bSBhbiBlYXJsaWVyLCB1bmZsYWdnZWQgJ2JpdGJha2UgLWMgY2xlYW4nCmludm9jYXRpb24gLSBS
dW5RdWV1ZS5fZGlhZ19lbmFibGVkIGhhZCBhbHJlYWR5IGxhdGNoZWQgRmFsc2UgYXQgdGhhdApz
ZXJ2ZXIncyBzdGFydHVwLCBiZWZvcmUgdGhlIENJIHNjcmlwdCBleHBvcnRlZCBBQ0lDRDMzNzRf
RElBRz0xIGZvciB0aGUKbGF0ZXIgbW9uaXRvcmVkIGJ1aWxkLiBUaGF0IGV4cG9ydC1vcmRlcmlu
ZyBoYXphcmQgaXMgZml4ZWQgb24gdGhlIENJIHNpZGUsCmJ1dCB0aGUgZ3VhcmQgaXRzZWxmIGFk
ZHMgbm8gdmFsdWUgZm9yIGEgdGVtcG9yYXJ5LCB0aHJvd2F3YXkgZGlhZ25vc3RpYwpmb3JrIGFu
ZCBpcyBvbmUgbGVzcyB0aGluZyB0aGF0IGNhbiBzaWxlbnRseSBkaXNhYmxlIHRoZSBpbnN0cnVt
ZW50YXRpb24KKGUuZy4gQkJfRU5WX1BBU1NUSFJPVUdIIGRvZXMgbm90IGFwcGx5IGhlcmUgc2lu
Y2UgdGhpcyByZWFkcyBvcy5lbnZpcm9uCmRpcmVjdGx5IHJhdGhlciB0aGFuIGdvaW5nIHRocm91
Z2ggdGhlIGJpdGJha2UgZGF0YXN0b3JlLCBidXQgdGhlcmUncyBubwpyZWFzb24gdG8ga2VlcCB0
aGUgZXh0cmEgZmxhZyByZWdhcmRsZXNzKS4gSW5zdHJ1bWVudGF0aW9uIGlzIG5vdyBhbHdheXMK
YWN0aXZlIGluIGJvdGggYmIvcnVucXVldWUucHkgc2VuZF9waWNrbGVkX2RhdGEoKSBhbmQgYmlu
L2JpdGJha2Utd29ya2VyCmhhbmRsZV9pdGVtKCk7IG9ubHkgdGhlIGxvZyBwYXRoIGFuZCB3YXJu
IHRocmVzaG9sZHMgcmVtYWluIGNvbmZpZ3VyYWJsZS4KVmVyaWZpZWQgZW5kLXRvLWVuZCB3aXRo
IG5vIEFDSUNEMzM3NF9ESUFHIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgYXQgYWxsLgoKQUNJQ0Qt
MzM3NDogbWFrZSBDU1Ytd3JpdGUgZmFpbHVyZXMgbG91ZCwgYWRkIGNzdnBhdGggdG8gdGhlIHNp
emUvdGltZSB3YXJuaW5nCgpWSVAtUzMyTjQ5OS1CTERMSU4tMzMgc2hvd2VkIHRoZSBzZW5kX3Bp
Y2tsZWRfZGF0YSBzaXplL3RpbWUgdGhyZXNob2xkCndhcm5pbmcgZmlyaW5nIG5vcm1hbGx5ICh0
d28gfjYuNk1pQiBydW50YXNrIHBheWxvYWRzLCBib3RoIHBpY2tsZWQvd3JpdHRlbgppbiB3ZWxs
IHVuZGVyIDAuMXMpLCBidXQgdGhlIENTViBmaWxlIHdhcyBuZXZlciBwcmVzZW50IGluIHRoZSBj
b2xsZWN0ZWQKYXJ0aWZhY3RzIGFuZCBubyBlcnJvciBhcHBlYXJlZCBhbnl3aGVyZSBpbiB0aGUg
YnVpbGQgbG9nLgoKVGhlIENTVi13cml0ZSBleGNlcHRpb24gaGFuZGxlciBsb2dnZWQgYXQgZGVi
dWcyLCB3aGljaCBpcyBzdXBwcmVzc2VkIGJ5CmRlZmF1bHQsIHNvIGEgd3JpdGUgZmFpbHVyZSAo
cGVybWlzc2lvbnMsIG1pc3NpbmcgZGlyLCBldGMuKSB3b3VsZCBiZQpjb21wbGV0ZWx5IHNpbGVu
dCAtIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIGNvZGUgc2ltcGx5IG5vdCBydW5uaW5nLgpC
dW1wIGJvdGggdGhlIHNlcnZlciAoYmIvcnVucXVldWUucHkpIGFuZCB3b3JrZXIgKGJpbi9iaXRi
YWtlLXdvcmtlcikgc2lkZQpoYW5kbGVycyB0byBhbHdheXMtdmlzaWJsZSBsb2dnaW5nLCBhbmQg
YWRkIHRoZSByZXNvbHZlZCBjc3YgcGF0aCB0byB0aGUKZXhpc3Rpbmcgc2l6ZS90aW1lIHdhcm5p
bmcgbGluZSBzbyB3ZSBjYW4gZGlyZWN0bHkgc2VlLCBpbiBldmVyeSBmdXR1cmUKdGltZW91dCwg
d2hldGhlciB0aGUgd3JpdGUgYWN0dWFsbHkgZmFpbGVkIG9yIHdoZXJlIGl0IHdvdWxkIGhhdmUg
Z29uZS4KCkFDSUNELTMzNzQ6IHBhc3MgZGlhZyBDU1YgZGlyIHZpYSBhdXRvLmNvbmY7IGFyY2hp
dmUgQ1NWIHNhZmV0eS1uZXQKClN0b3AgZXhwb3J0aW5nIEFDSUNEMzM3NF9ESUFHX0xPRyAvIEFD
SUNEMzM3NF9ESUFHX1dPUktFUl9MT0c6IHRoZQpiaXRiYWtlIGNvb2tlci93b3JrZXJzIG5ldmVy
IHNhdyB0aG9zZSBlbnYgdmFycyAocmVzaWRlbnQgc2VydmVyICsgd29ya2Vycwp3aXRoIGEgc2Fu
aXRpc2VkIGVudmlyb25tZW50KSwgc28gdGhlIElQQyBkaWFnIENTVnMgd2VyZSBtaXNzaW5nIGZy
b20gdGhlCkNJIGFydGlmYWN0cyBldmVuIHRob3VnaCBldmVyeSBvdGhlciBidWlsZC1tb25pdG9y
IGZpbGUgd2FzIGFyY2hpdmVkLgoKYnVpbGRfYnNwLnNoIG5vdyB3cml0ZXMgQUNJQ0QzMzc0X0RJ
QUdfRElSIGludG8gY29uZi9hdXRvLmNvbmYgYmVmb3JlIHRoZQpmaXJzdCBiaXRiYWtlIGNhbGws
IHNvIHRoZSBkYXRhc3RvcmUgY2FycmllcyB0aGUgcGF0aCB0byB0aGUgY29va2VyIGFuZAppdHMg
d29ya2VycyAobWF0Y2hpbmcgdGhlIHBva3kgZm9yayBjaGFuZ2UpLiB5b2N0b19jaV9hcnRpZmFj
dHMuc2ggZ2FpbnMgYQpiZWx0LWFuZC1icmFjZXMgc3RlcCB0aGF0IGZpbmRzIGFueSBhY2ljZDMz
NzQtKi5jc3YgdW5kZXIgdGhlIGJ1aWxkIGRpciwKY29waWVzIHRoZW0gaW50byB0aGUgYXJjaGl2
ZWQgYnVpbGQtbW9uaXRvci8gZGlyLCBhbmQgcmVjb3JkcyBhIGRpc2NvdmVyeQptYW5pZmVzdCBz
byBhIG1pc3NpbmcgQ1NWIGlzIGRpYWdub3NhYmxlIGZyb20gdGhlIGFyY2hpdmUgaXRzZWxmLgoK
U2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcml1cyBQcsSDZGF0dSA8Ym9nZGFuLW1hcml1cy5wcmFk
YXR1QG54cC5jb20+CgpBQ0lDRC0zMzc0OiBhZGQgZW50cnkgYnJlYWRjcnVtYiwgcGVyLWtleSBi
cmVha2Rvd24sIGFuZCBidWlsZF90YXNrZGVwZGF0YSB0aW1pbmcKClRocmVlIGVuaGFuY2VtZW50
cyB0byBkaWFnbm9zZSBXSFkgYSBzcGVjaWZpYyBzZW5kX3BpY2tsZWRfZGF0YSgpIGNhbGwgaGFu
Z3MKZm9yIDkwKyBzZWNvbmRzIChWSVAtUzMyTjQ5OS1CTERMSU4tMzM6IHB5LXNweSBjYXVnaHQg
dGhlIGlkbGVfdGhyZWFkIHN0dWNrCmluIHBpY2tsZS5kdW1wcygpIGZvciBhICdydW50YXNrJyBw
YXlsb2FkLCBidXQgdGhlIGNvZGUgbmV2ZXIgcmVhY2hlZCB0aGUKcG9zdC1waWNrbGUgbG9nZ2lu
ZykuCgoxLiBFbnRyeSBicmVhZGNydW1iIChpbmZsaWdodCBmaWxlKTogYSBzbWFsbCBmaWxlIG92
ZXJ3cml0dGVuIG9uIGV2ZXJ5IEVOVEVSCiAgIGFuZCBjbGVhcmVkIG9uIGV2ZXJ5IEVYSVQgb2Yg
c2VuZF9waWNrbGVkX2RhdGEoKS4gSWYgcGlja2xlLmR1bXBzKCkgaGFuZ3MsCiAgIHRoZSBmaWxl
IHNob3dzIGEgc3RhbGUgRU5URVIgd2l0aCB0aGUgdGFzayBpZGVudGl0eS4gR2F0ZWQgb24KICAg
QUNJQ0QzMzc0X0RJQUdfRElSIChzYW1lIGFzIHRoZSBDU1YpLCBwYXRoOiBhY2ljZDMzNzQtaW5m
bGlnaHQubG9nLgoKMi4gUGVyLWtleSBicmVha2Rvd246IHdoZW4gYSAncnVudGFzaycgcGlja2xl
IGV4Y2VlZHMgdGhlIHRpbWUgdGhyZXNob2xkLAogICBzZXBhcmF0ZWx5IHBpY2tsZSBlYWNoIHRv
cC1sZXZlbCBrZXkgYW5kIGxvZyBwZXIta2V5IHNpemUvdGltZSAoc29ydGVkCiAgIGRlc2NlbmRp
bmcpLiBPbmx5IHBhaWQgb24gc2xvdyBjYWxscy4KCjMuIGJ1aWxkX3Rhc2tkZXBkYXRhKCkgdGlt
aW5nOiB0aGUgY2FsbCBzaXRlIGluIGV4ZWN1dGUoKSBub3cgc2VwYXJhdGVseQogICB0aW1lcyBh
bmQgbG9ncyBob3cgbG9uZyBidWlsZGluZyB0aGUgdGFza2RlcGRhdGEgZGljdCB0YWtlcyBhbmQg
aG93IG1hbnkKICAgZW50cmllcyBpdCBwcm9kdWNlcywgYmVmb3JlIGl0IHJlYWNoZXMgc2VuZF9w
aWNrbGVkX2RhdGEuIExvZ3MgYSB3YXJuaW5nCiAgIHdoZW4gYnVpbGRfdGltZSBleGNlZWRzIHRo
ZSB0aHJlc2hvbGQgb3IgZW50cmllcyA+PSA1MDAwLgoKQUNJQ0QtMzM3NDogZHJpbGwgaW50byB0
YXNrZGVwZGF0YSBwZXItZW50cnkgcGlja2xlIGNvc3Qgd2hlbiBzbG93CgpCdWlsZCAzNyBzaG93
ZWQgZG9faW1hZ2VfY3BpbydzIHJ1bnRhc2sgcGlja2xlIHRha2luZyAxNDZzIHdoaWxlIHNpYmxp
bmcKdGFza3Mgd2l0aCBuZWFybHkgaWRlbnRpY2FsIHBheWxvYWQgc2l6ZSAofjYuOU1pQiwgfjc4
MzAtNzkxNiBlbnRyaWVzKQpwaWNrbGVkIGluIDwwLjFzLiBUaGUgcGVyLWtleSBicmVha2Rvd24g
d2lsbCBjb25maXJtIHRhc2tkZXBkYXRhIGlzIHRoZQpzbG93IGtleSwgYnV0IHdlIG5lZWQgdG8g
a25vdyBXSFk6IGlzIG9uZSBzcGVjaWZpYyBlbnRyeSBwYXRob2xvZ2ljYWwsIG9yCmlzIGl0IHBp
Y2tsZSdzIGNyb3NzLXJlZmVyZW5jZSBtZW1vIGhhbmRsaW5nIGdvaW5nIHF1YWRyYXRpYyBvbiB0
aGUgd2hvbGUKZGljdD8KCldoZW4gdGFza2RlcGRhdGEgcGlja2xpbmcgZXhjZWVkcyAxcyBpbiB0
aGUgcGVyLWtleSBicmVha2Rvd246Ci0gUGlja2xlIGVhY2ggaW5kaXZpZHVhbCBlbnRyeSBzZXBh
cmF0ZWx5IGFuZCBmaW5kIHRoZSB0b3AgMTAgc2xvd2VzdCwKICBsb2dnaW5nIHRoZWlyIHRpZCwg
c2l6ZSwgdGltZSwgYW5kIHJlcHIgKHRydW5jYXRlZCB0byA1MDAgY2hhcnMpLgotIExvZyBzdW0t
b2YtaW5kaXZpZHVhbC1waWNrbGUtdGltZXMgdnMuIHRoZSB3aG9sZS1kaWN0IHRpbWUgZnJvbSB0
aGUKICBwZXIta2V5IGJyZWFrZG93bi4gSWYgc3VtX2luZGl2aWR1YWwgPDwgd2hvbGVfZGljdCwg
dGhlIGNvc3QgaXMgaW4KICBwaWNrbGUncyBtZW1vIGRlZHVwbGljYXRpb24gKHF1YWRyYXRpYyBm
b3IgbGFyZ2UgZGljdHMgd2l0aCBzaGFyZWQKICBvYmplY3RzKSwgbm90IGluIGFueSBzaW5nbGUg
ZW50cnkgLSBhIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IGZpbmRpbmcKICB0aGF0IHBvaW50cyBh
dCBwaWNrbGUgcHJvdG9jb2wvc3RydWN0dXJlLCBub3QgcGF5bG9hZCBjb250ZW50LgoKU2lnbmVk
LW9mZi1ieTogQm9nZGFuIE1hcml1cyBQcsSDZGF0dSA8Ym9nZGFuLW1hcml1cy5wcmFkYXR1QG54
cC5jb20+Ci0tLQogYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIgfCAgNDMgKysrKysrKysrCiBi
aXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weSB8IDE3NiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDIxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0
aW9uKC0pCgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIgYi9iaXRiYWtl
L2Jpbi9iaXRiYWtlLXdvcmtlcgppbmRleCBlODA3M2YyYWMzLi5jNzcwNzc0OGFmIDEwMDc1NQot
LS0gYS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlcgorKysgYi9iaXRiYWtlL2Jpbi9iaXRiYWtl
LXdvcmtlcgpAQCAtMTcsNiArMTcsNyBAQCBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgZXJybm8KIGlt
cG9ydCBzaWduYWwKIGltcG9ydCBwaWNrbGUKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNr
CiBpbXBvcnQgcXVldWUKIGltcG9ydCBzaGxleApAQCAtNjAsNiArNjEsMzcgQEAgYmIudXRpbHMu
bm9uYmxvY2tpbmdmZCh3b3JrZXJfcGlwZSkKICMgYW5kIG11bHRpcGxlIHByb2Nlc3NlcyB0cnlp
bmcgdG8gd3JpdGUgdG8gdGhlIHBhcmVudCBhdCB0aGUgc2FtZSB0aW1lCiB3b3JrZXJfcGlwZV9s
b2NrID0gTm9uZQogCisjIFdvcmtlci1zaWRlIGNvdW50ZXJwYXJ0IHRvIHRoZSBzZW5kX3BpY2ts
ZWRfZGF0YSgpIGluc3RydW1lbnRhdGlvbiBpbiBiYi9ydW5xdWV1ZS5weToKKyMgdGltZXMgaG93
IGxvbmcgYSBmcmFtZWQgbWVzc2FnZSBzaXRzIHBhcnRpYWxseS1yZWNlaXZlZCBpbiB0aGUgcGlw
ZSAoSVBDL3RyYW5zaXQpCisjIHZlcnN1cyBob3cgbG9uZyB1bnBpY2tsaW5nIGl0IHRha2VzIChD
UFUpLCBzbyB0aGUgdHdvIGNhbiBiZSB0b2xkIGFwYXJ0LgorRElBR19MT0cgPSBOb25lCisKK2Rl
ZiBzZXRfZGlhZ19kaXIoZGlhZ19kaXIpOgorICAgICIiIgorICAgIFJlc29sdmUgdGhlIHBlci13
b3JrZXIgQ1NWIHBhdGggZnJvbSB0aGUgZGF0YXN0b3JlLXByb3ZpZGVkIGRpcmVjdG9yeS4KKyAg
ICBDYWxsZWQgb25jZSB0aGUgd29ya2VyIHJlY2VpdmVzIGl0cyB3b3JrZXJkYXRhLiBOZXZlciBy
YWlzZXMuCisgICAgIiIiCisgICAgZ2xvYmFsIERJQUdfTE9HCisgICAgaWYgbm90IGRpYWdfZGly
OgorICAgICAgICByZXR1cm4KKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpYWdfZGly
LCBleGlzdF9vaz1UcnVlKQorICAgICAgICBESUFHX0xPRyA9IG9zLnBhdGguam9pbihkaWFnX2Rp
ciwgImJpdGJha2Utd29ya2VyLmNzdiIpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAg
RElBR19MT0cgPSBOb25lCisKK2RlZiBkaWFnX3JlY29yZChuYW1lLCBuYnl0ZXMsIHRyYW5zaXRf
dGltZSwgdW5waWNrbGVfdGltZSwgZXh0cmE9IiIpOgorICAgICIiIkRpc2FibGVkIHVubGVzcyB0
aGUgc2VydmVyIGhhbmRlZCB1cyBhIGRpYWcgZGlyIHZpYSB3b3JrZXJkYXRhLiIiIgorICAgIGlm
IG5vdCBESUFHX0xPRzoKKyAgICAgICAgcmV0dXJuCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9w
ZW4oRElBR19MT0csICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiUuNmYsJXMsJWQs
JS42ZiwlLjZmLCVkLCVzXG4iICUgKAorICAgICAgICAgICAgICAgIHRpbWUudGltZSgpLCBuYW1l
LCBuYnl0ZXMsIHRyYW5zaXRfdGltZSwgdW5waWNrbGVfdGltZSwgb3MuZ2V0cGlkKCksIGV4dHJh
KSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHdvcmtlcmxvZ193cml0ZSgi
Qml0YmFrZVRpbWVvdXREaWFnOiB3b3JrZXIgQ1NWIHdyaXRlIHRvICVzIEZBSUxFRDogJXNcbiIg
JSAoRElBR19MT0csIGUpKQorCisKIGhhbmRsZXIgPSBiYi5ldmVudC5Mb2dIYW5kbGVyKCkKIGxv
Z2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCiAKQEAgLTM5Miw2ICs0MjQsNyBAQCBjbGFzcyBCaXRi
YWtlV29ya2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuZXh0cmFjb25maWdkYXRhID0gTm9uZQog
ICAgICAgICBzZWxmLmJ1aWxkX3BpZHMgPSB7fQogICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzID0g
e30KKyAgICAgICAgc2VsZi5fZGlhZ19wYXJ0aWFsID0ge30gICMgaXRlbSAtPiBmaXJzdC1zZWVu
LXBhcnRpYWwgdGltZQogICAgIAogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJN
LCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQogICAgICAgICAjIExldCBTSUdIVVAgZXhpdCBhcyBT
SUdURVJNCkBAIC00NDcsMjEgKzQ4MCwyOCBAQCBjbGFzcyBCaXRiYWtlV29ya2VyKG9iamVjdCk6
CiAgICAgICAgIHRhZ19sZW4gPSBsZW4ob3BlbmluZ190YWcpCiAgICAgICAgIGlmIGxlbihzZWxm
LnF1ZXVlKSA8IHRhZ19sZW4gKyA0OgogICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIHJlY2VpdmUg
bW9yZSBkYXRhCisgICAgICAgICAgICBzZWxmLl9kaWFnX3BhcnRpYWwuc2V0ZGVmYXVsdChpdGVt
LCB0aW1lLnRpbWUoKSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBoZWFkZXIgPSBzZWxm
LnF1ZXVlW3RhZ19sZW46dGFnX2xlbiArIDRdCiAgICAgICAgIHBheWxvYWRfbGVuID0gaW50LmZy
b21fYnl0ZXMoaGVhZGVyLCAnYmlnJykKICAgICAgICAgIyBjbG9zaW5nIHRhZyBoYXMgbGVuZ3Ro
ICh0YWdfbGVuICsgMSkKICAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpIDwgdGFnX2xlbiAqIDIg
KyAxICsgcGF5bG9hZF9sZW46CiAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gcmVjZWl2ZSBtb3Jl
IGRhdGEKKyAgICAgICAgICAgIHNlbGYuX2RpYWdfcGFydGlhbC5zZXRkZWZhdWx0KGl0ZW0sIHRp
bWUudGltZSgpKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaW5kZXggPSBzZWxmLnF1
ZXVlLmZpbmQoYiI8LyIgKyBpdGVtICsgYiI+IikKICAgICAgICAgaWYgaW5kZXggIT0gLTE6Cisg
ICAgICAgICAgICBfdF9maXJzdF9zZWVuID0gc2VsZi5fZGlhZ19wYXJ0aWFsLnBvcChpdGVtLCB0
aW1lLnRpbWUoKSkKKyAgICAgICAgICAgIF90cmFuc2l0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIF90
X2ZpcnN0X3NlZW4KKyAgICAgICAgICAgIF90X3VucGlja2xlMCA9IHRpbWUudGltZSgpCiAgICAg
ICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZnVuYyhzZWxmLnF1ZXVlWyh0YWdfbGVuICsg
NCk6aW5kZXhdKQogICAgICAgICAgICAgZXhjZXB0IHBpY2tsZS5VbnBpY2tsaW5nRXJyb3I6CiAg
ICAgICAgICAgICAgICAgd29ya2VybG9nX3dyaXRlKCJVbmFibGUgdG8gdW5waWNrbGUgZGF0YTog
JXNcbiIgJSAiOiIuam9pbigiezowMnh9Ii5mb3JtYXQoYykgZm9yIGMgaW4gc2VsZi5xdWV1ZSkp
CiAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIF91bnBpY2tsZV90aW1lID0gdGlt
ZS50aW1lKCkgLSBfdF91bnBpY2tsZTAKKyAgICAgICAgICAgIGRpYWdfcmVjb3JkKGl0ZW0uZGVj
b2RlKCksIHBheWxvYWRfbGVuLCBfdHJhbnNpdF90aW1lLCBfdW5waWNrbGVfdGltZSkKICAgICAg
ICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlWyhpbmRleCArIGxlbihiIjwvIikgKyBsZW4o
aXRlbSkgKyBsZW4oYiI+IikpOl0KIAogICAgIGRlZiBoYW5kbGVfY29va2VyY2ZnKHNlbGYsIGRh
dGEpOgpAQCAtNDc1LDYgKzUxNSw5IEBAIGNsYXNzIEJpdGJha2VXb3JrZXIob2JqZWN0KToKIAog
ICAgIGRlZiBoYW5kbGVfd29ya2VyZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi53b3Jr
ZXJkYXRhID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgICMgcGljayB1cCB0aGUgZGlhZ25v
c3RpYyBDU1YgZGlyZWN0b3J5IGRlbGl2ZXJlZCB2aWEgd29ya2VyZGF0YS4KKyAgICAgICAgIyAu
Z2V0KCkga2VlcHMgdGhpcyBhIG5vLW9wIGFnYWluc3QgYSBub24taW5zdHJ1bWVudGVkIHNlcnZl
ciB0aGF0IG5ldmVyIHNldHMgdGhlIGtleS4KKyAgICAgICAgc2V0X2RpYWdfZGlyKHNlbGYud29y
a2VyZGF0YS5nZXQoImRpYWdfZGlyIikpCiAgICAgICAgIGJiLmJ1aWxkLnZlcmJvc2VTaGVsbExv
Z2dpbmcgPSBzZWxmLndvcmtlcmRhdGFbImJ1aWxkX3ZlcmJvc2Vfc2hlbGwiXQogICAgICAgICBi
Yi5idWlsZC52ZXJib3NlU3Rkb3V0TG9nZ2luZyA9IHNlbGYud29ya2VyZGF0YVsiYnVpbGRfdmVy
Ym9zZV9zdGRvdXQiXQogICAgICAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdExvZ0xldmVsID0gc2Vs
Zi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0bGV2ZWwiXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIv
YmIvcnVucXVldWUucHkgYi9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQppbmRleCA1ZGM2ZmMw
NDdmLi5iYWM3ZGJiMzQ5IDEwMDY0NAotLS0gYS9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQor
KysgYi9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQpAQCAtMTMzMyw2ICsxMzMzLDIxIEBAIGNs
YXNzIFJ1blF1ZXVlOgogCiAgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCiAgICAgICAgIHNl
bGYuY2ZnRGF0YSA9IGNmZ0RhdGEKKworICAgICAgICBfZGlhZ19kaXIgPSBjZmdEYXRhLmdldFZh
cigiRElBR19ESVIiKQorICAgICAgICBpZiBfZGlhZ19kaXI6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoX2RpYWdfZGlyLCBleGlzdF9vaz1UcnVlKQorICAg
ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAg
ICAgICBSdW5RdWV1ZS5fZGlhZ19sb2dfcGF0aCA9IG9zLnBhdGguam9pbihfZGlhZ19kaXIsICJi
aXRiYWtlLXNlbmQtcGlja2xlZC1kYXRhLmNzdiIpCisgICAgICAgICAgICBSdW5RdWV1ZS5fZGlh
Z19pbmZsaWdodF9wYXRoID0gb3MucGF0aC5qb2luKF9kaWFnX2RpciwgImJpdGJha2UtZGlhZy1p
bmZsaWdodC5sb2ciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBSdW5RdWV1ZS5fZGlhZ19z
aXplX3RocmVzaG9sZCA9IGZsb2F0KGNmZ0RhdGEuZ2V0VmFyKCJESUFHX1NJWkVfTUIiKSBvciAy
KSAqIDEwMjQgKiAxMDI0CisgICAgICAgICAgICBSdW5RdWV1ZS5fZGlhZ190aW1lX3RocmVzaG9s
ZCA9IGZsb2F0KGNmZ0RhdGEuZ2V0VmFyKCJESUFHX1RJTUVfUyIpIG9yIDEpCisgICAgICAgIGV4
Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKwogICAgICAg
ICBzZWxmLnJxZGF0YSA9IFJ1blF1ZXVlRGF0YShzZWxmLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFD
YWNoZXMsIHRhc2tEYXRhLCB0YXJnZXRzKQogCiAgICAgICAgIHNlbGYuaGFzaHZhbGlkYXRlID0g
Y2ZnRGF0YS5nZXRWYXIoIkJCX0hBU0hDSEVDS19GVU5DVElPTiIpIG9yIE5vbmUKQEAgLTEzNTMs
MTUgKzEzNjgsMTU5IEBAIGNsYXNzIFJ1blF1ZXVlOgogICAgICAgICBzZWxmLndvcmtlciA9IHt9
CiAgICAgICAgIHNlbGYuZmFrZXdvcmtlciA9IHt9CiAKKyAgICAjIE1lYXN1cmUgdGhlIHNpemUv
dGltZSBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCBieSBzZW5kX3BpY2tsZWRfZGF0YSgpLAorICAg
ICMgdG8gZGlzdGluZ3Vpc2ggInNsb3cgcGlja2xpbmcgb2YgYSBsYXJnZSBwYXlsb2FkIgorICAg
ICMgZnJvbSAic2xvdyBJUEMiIGFzIHRoZSBjYXVzZSBvZiBpbnRlcm1pdHRlbnQgIk5vIHJlcGx5
IGZyb20gc2VydmVyIiBoYW5ncy4KKyAgICBfZGlhZ19sb2dfcGF0aCA9IE5vbmUKKyAgICBfZGlh
Z19zaXplX3RocmVzaG9sZCA9IDIgKiAxMDI0ICogMTAyNAorICAgIF9kaWFnX3RpbWVfdGhyZXNo
b2xkID0gMQorICAgIF9kaWFnX2luZmxpZ2h0X3BhdGggPSBOb25lICAjIHNldCBhbG9uZ3NpZGUg
X2RpYWdfbG9nX3BhdGggaW4gX19pbml0X18KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
X2RpYWdfcmVjb3JkKG5hbWUsIG5ieXRlcywgcGlja2xlX3RpbWUsIHdyaXRlX3RpbWUsIGV4dHJh
KToKKyAgICAgICAgIiIiCisgICAgICAgIEJlc3QtZWZmb3J0IG9ubHk6IGluc3RydW1lbnRhdGlv
biBtdXN0IG5ldmVyIGJyZWFrL3Nsb3cgdGhlIHJlYWwgYnVpbGQgcGF0aC4KKyAgICAgICAgRGlz
YWJsZWQgdW5sZXNzIGEgYnVpbGQgZGlyIHNldCBESUFHX0RJUiBpbiBpdHMgY29uZmlndXJhdGlv
bi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBSdW5RdWV1ZS5fZGlhZ19sb2dfcGF0aDoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lID0gIiUu
NmYsJXMsJWQsJS42ZiwlLjZmLCVkLCVzXG4iICUgKAorICAgICAgICAgICAgICAgIHRpbWUudGlt
ZSgpLCBuYW1lLCBuYnl0ZXMsIHBpY2tsZV90aW1lLCB3cml0ZV90aW1lLCBvcy5nZXRwaWQoKSwg
ZXh0cmEpCisKKyAgICAgICAgICAgIHdpdGggb3BlbihSdW5RdWV1ZS5fZGlhZ19sb2dfcGF0aCwg
ImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkJpdGJha2VUaW1l
b3V0RGlhZzogQ1NWIHdyaXRlIHRvICVzIEZBSUxFRDogJXMiICUgKFJ1blF1ZXVlLl9kaWFnX2xv
Z19wYXRoLCBlKSkKKyAgICAgICAgaWYgbmJ5dGVzID49IFJ1blF1ZXVlLl9kaWFnX3NpemVfdGhy
ZXNob2xkIG9yIHBpY2tsZV90aW1lID49IFJ1blF1ZXVlLl9kaWFnX3RpbWVfdGhyZXNob2xkOgor
ICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgIkJpdGJha2VUaW1l
b3V0RGlhZzogc2VuZF9waWNrbGVkX2RhdGEgbmFtZT0lcyBzaXplPSUuMmZNaUIgcGlja2xlX3Rp
bWU9JS4zZnMgIgorICAgICAgICAgICAgICAgICJ3cml0ZV90aW1lPSUuM2ZzIHBpZD0lZCBjc3Zw
YXRoPSVzICVzIiAlICgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgbmJ5dGVzIC8gKDEwMjQg
KiAxMDI0KSwgcGlja2xlX3RpbWUsIHdyaXRlX3RpbWUsIG9zLmdldHBpZCgpLAorICAgICAgICAg
ICAgICAgICAgICBSdW5RdWV1ZS5fZGlhZ19sb2dfcGF0aCwgZXh0cmEpKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBfZGlhZ19tYXJrX2luZmxpZ2h0KG5hbWUsIGV4dHJhKToKKyAgICAg
ICAgIiIiCisgICAgICAgIE92ZXJ3cml0ZSAobm90IGFwcGVuZCkgYSBzbWFsbCBicmVhZGNydW1i
IGZpbGUgb24gZXZlcnkgRU5URVIgb2Ygc2VuZF9waWNrbGVkX2RhdGEuCisgICAgICAgIENsZWFy
ZWQgb24gRVhJVC4KKyAgICAgICAgSWYgcGlja2xlLmR1bXBzKCkgaGFuZ3MsIHRoaXMgZmlsZSBp
cyBsZWZ0IHNob3dpbmcgYSBzdGFsZSBFTlRFUiB3aXRoIHRoZSB0YXNrIGlkZW50aXR5LAorICAg
ICAgICBwcm9vZiB0aGUgaGFuZyBpcyBpbnNpZGUgdGhlIHBpY2tsZSBmb3IgVEhJUyBzcGVjaWZp
YyB0YXNrLAorICAgICAgICB3aXRob3V0IHNwYW1taW5nIHRoZSBjb25zb2xlIGxvZyBvbiBldmVy
eSBvbmUgb2YgdGhlIH44MDAwIG5vcm1hbCBjYWxscy4KKyAgICAgICAgIiIiCisgICAgICAgIGlm
IG5vdCBSdW5RdWV1ZS5fZGlhZ19pbmZsaWdodF9wYXRoOgorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihSdW5RdWV1ZS5fZGlhZ19pbmZsaWdo
dF9wYXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJS42ZiBwaWQ9JWQg
RU5URVIgc2VuZF9waWNrbGVkX2RhdGEgbmFtZT0lcyAlc1xuIiAlICgKKyAgICAgICAgICAgICAg
ICAgICAgdGltZS50aW1lKCksIG9zLmdldHBpZCgpLCBuYW1lLCBleHRyYSkpCisgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIF9kaWFnX2NsZWFyX2luZmxpZ2h0KCk6CisgICAgICAgIGlmIG5vdCBSdW5RdWV1ZS5f
ZGlhZ19pbmZsaWdodF9wYXRoOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHdpdGggb3BlbihSdW5RdWV1ZS5fZGlhZ19pbmZsaWdodF9wYXRoLCAidyIpIGFz
IGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RpYWdf
YnJlYWtkb3duX3J1bnRhc2soZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBQaWNrbGUgZWFj
aCB0b3AtbGV2ZWwga2V5IG9mIGEgJ3J1bnRhc2snIGRpY3Qgc2VwYXJhdGVseSBzbyB3ZSBjYW4g
c2VlIFdISUNIIGtleSBpcyBzbG93L2h1Z2UuCisgICAgICAgIE9ubHkgY2FsbGVkIHdoZW4gdGhl
IHdob2xlLWRpY3QgcGlja2xlIHdhcyBhbHJlYWR5IHNsb3csCisgICAgICAgIHNvIHRoZSBleHRy
YSBwZXIta2V5IHBpY2tsZS5kdW1wcygpIGNhbGxzIGFyZSBub3QgcGFpZCBvbiB0aGUgKGxhcmdl
IG1ham9yaXR5IG9mKSBmYXN0IGNhbGxzLgorICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBb
XQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChkYXRhLmtleXMoKSk6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgX3QwID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBf
YmxvYiA9IHBpY2tsZS5kdW1wcyhkYXRhW2tleV0pCisgICAgICAgICAgICAgICAgcGFydHMuYXBw
ZW5kKChrZXksIGxlbihfYmxvYiksIHRpbWUudGltZSgpIC0gX3QwKSkKKyAgICAgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoKGtleSwg
LTEsIC0xKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiQml0YmFrZVRpbWVvdXRE
aWFnOiBwZXIta2V5IHBpY2tsZSBvZiBydW50YXNrWyVzXSBGQUlMRUQ6ICVzIiAlIChrZXksIGUp
KQorICAgICAgICBwYXJ0cy5zb3J0KGtleT1sYW1iZGEgcDogcFsyXSwgcmV2ZXJzZT1UcnVlKQor
ICAgICAgICBzdW1tYXJ5ID0gIiwgIi5qb2luKCIlcz0lLjJmTWlCLyUuM2ZzIiAlIChrLCBuIC8g
KDEwMjQgKiAxMDI0KSwgdCkgZm9yIGssIG4sIHQgaW4gcGFydHMpCisKKyAgICAgICAgIyBJZiB0
YXNrZGVwZGF0YSBpcyB0aGUgc2xvdyBrZXkgKD4xcyksIGRyaWxsIGludG8gaW5kaXZpZHVhbCBl
bnRyaWVzCisgICAgICAgICMgdG8gZmluZCB3aGljaCBzcGVjaWZpYyB0aWQocykgY2F1c2UgdGhl
IGRlZ2VuZXJhdGUgcGlja2xlIGJlaGF2aW9yLgorICAgICAgICB0ZGQgPSBkYXRhLmdldCgndGFz
a2RlcGRhdGEnKQorICAgICAgICB0ZGRfa2V5X3RpbWUgPSBuZXh0KCh0IGZvciBrLCBfLCB0IGlu
IHBhcnRzIGlmIGsgPT0gJ3Rhc2tkZXBkYXRhJyksIDApCisgICAgICAgIGlmIHRkZCBhbmQgaXNp
bnN0YW5jZSh0ZGQsIGRpY3QpIGFuZCB0ZGRfa2V5X3RpbWUgPj0gMS4wOgorICAgICAgICAgICAg
ZW50cnlfdGltZXMgPSBbXQorICAgICAgICAgICAgZm9yIHRpZCwgZW50cnkgaW4gdGRkLml0ZW1z
KCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfdDAgPSB0aW1l
LnRpbWUoKQorICAgICAgICAgICAgICAgICAgICBfYmxvYiA9IHBpY2tsZS5kdW1wcyhlbnRyeSkK
KyAgICAgICAgICAgICAgICAgICAgZW50cnlfdGltZXMuYXBwZW5kKCh0aWQsIGxlbihfYmxvYiks
IHRpbWUudGltZSgpIC0gX3QwKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz
IGU6CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X3RpbWVzLmFwcGVuZCgodGlkLCAtMSwgLTEp
KQorICAgICAgICAgICAgZW50cnlfdGltZXMuc29ydChrZXk9bGFtYmRhIHA6IHBbMl0sIHJldmVy
c2U9VHJ1ZSkKKyAgICAgICAgICAgICMgTG9nIHRoZSB0b3AgMTAgc2xvd2VzdCBpbmRpdmlkdWFs
IGVudHJpZXMgd2l0aCB0aGVpciByZXByICh0cnVuY2F0ZWQpCisgICAgICAgICAgICBzbG93X2Vu
dHJpZXMgPSBlbnRyeV90aW1lc1s6MTBdCisgICAgICAgICAgICBmb3IgdGlkLCBuYnl0ZXMsIHQg
aW4gc2xvd19lbnRyaWVzOgorICAgICAgICAgICAgICAgIGVudHJ5X3JlcHIgPSByZXByKHRkZFt0
aWRdKVs6NTAwXSBpZiB0aWQgaW4gdGRkIGVsc2UgIj8iCisgICAgICAgICAgICAgICAgbG9nZ2Vy
Lndhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICJCaXRiYWtlVGltZW91dERpYWc6IHRhc2tk
ZXBkYXRhIFNMT1cgRU5UUlkgdGlkPSVzIHNpemU9JWQgcGlja2xlX3RpbWU9JS42ZnMgcmVwcj0l
LjUwMHMiCisgICAgICAgICAgICAgICAgICAgICUgKHRpZCwgbmJ5dGVzLCB0LCBlbnRyeV9yZXBy
KSkKKyAgICAgICAgICAgICMgQWxzbyBsb2cgb3ZlcmFsbCBzdGF0cyArIHRoZSBjcml0aWNhbCBj
b21wYXJpc29uOgorICAgICAgICAgICAgIyBpZiBzdW0tb2YtaW5kaXZpZHVhbCBwaWNrbGUgdGlt
ZXMgaXMgbXVjaCBsZXNzIHRoYW4gdGhlIHdob2xlLWRpY3QgcGlja2xlIHRpbWUKKyAgICAgICAg
ICAgICMgKGZyb20gdGhlIGNhbGxlciksIHRoZSBwYXRob2xvZ3kgaXMgaW4gcGlja2xlJ3MgY3Jv
c3MtcmVmZXJlbmNlIG1lbW8gaGFuZGxpbmcKKyAgICAgICAgICAgICMgKHF1YWRyYXRpYyBmb3Ig
bGFyZ2UgZGljdHMgd2l0aCBzaGFyZWQgb2JqZWN0cyksIG5vdCBpbiBhbnkgc2luZ2xlIGVudHJ5
LgorICAgICAgICAgICAgdG90YWxfZW50cnlfdGltZSA9IHN1bSh0IGZvciBfLCBfLCB0IGluIGVu
dHJ5X3RpbWVzIGlmIHQgPj0gMCkKKyAgICAgICAgICAgIHRvdGFsX2VudHJ5X2J5dGVzID0gc3Vt
KG4gZm9yIF8sIG4sIF8gaW4gZW50cnlfdGltZXMgaWYgbiA+PSAwKQorICAgICAgICAgICAgZmFz
dF9jb3VudCA9IHN1bSgxIGZvciBfLCBfLCB0IGluIGVudHJ5X3RpbWVzIGlmIHQgPCAwLjAwMSkK
KyAgICAgICAgICAgIHNsb3dfY291bnQgPSBzdW0oMSBmb3IgXywgXywgdCBpbiBlbnRyeV90aW1l
cyBpZiB0ID49IDAuMDEpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAg
ICAgICAiQml0YmFrZVRpbWVvdXREaWFnOiB0YXNrZGVwZGF0YSBwZXItZW50cnkgc3RhdHM6IHRv
dGFsX2VudHJpZXM9JWQgIgorICAgICAgICAgICAgICAgICJzdW1faW5kaXZpZHVhbF9waWNrbGVf
dGltZT0lLjNmcyBzdW1faW5kaXZpZHVhbF9ieXRlcz0lZCAiCisgICAgICAgICAgICAgICAgImZh
c3QoPDFtcyk9JWQgc2xvdyg+PTEwbXMpPSVkICIKKyAgICAgICAgICAgICAgICAidG9wMV90aWQ9
JXMgdG9wMV90aW1lPSUuNmZzICIKKyAgICAgICAgICAgICAgICAiTk9URTogaWYgc3VtX2luZGl2
aWR1YWxfcGlja2xlX3RpbWUgPDwgd2hvbGVfZGljdF9waWNrbGVfdGltZSBmcm9tIHRoZSBwZXIt
a2V5IGJyZWFrZG93biBhYm92ZSwgIgorICAgICAgICAgICAgICAgICJ0aGUgY29zdCBpcyBpbiBw
aWNrbGUncyBjcm9zcy1yZWZlcmVuY2UgbWVtbyAocXVhZHJhdGljKSwgbm90IGluIGFueSBzaW5n
bGUgZW50cnkiICUgKAorICAgICAgICAgICAgICAgICAgICBsZW4oZW50cnlfdGltZXMpLCB0b3Rh
bF9lbnRyeV90aW1lLCB0b3RhbF9lbnRyeV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgZmFz
dF9jb3VudCwgc2xvd19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgZW50cnlfdGltZXNbMF1b
MF0gaWYgZW50cnlfdGltZXMgZWxzZSAiPyIsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5X3Rp
bWVzWzBdWzJdIGlmIGVudHJ5X3RpbWVzIGVsc2UgMCkpCisKKyAgICAgICAgcmV0dXJuIHN1bW1h
cnkKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgc2VuZF9waWNrbGVkX2RhdGEod29ya2Vy
LCBkYXRhLCBuYW1lKToKKyAgICAgICAgX2RpYWdfZXh0cmEgPSAiIgorICAgICAgICBpZiBuYW1l
ID09ICJydW50YXNrIiBhbmQgaXNpbnN0YW5jZShkYXRhLCBkaWN0KToKKyAgICAgICAgICAgIHRk
ZCA9IGRhdGEuZ2V0KCd0YXNrZGVwZGF0YScpCisgICAgICAgICAgICBfZGlhZ19leHRyYSA9ICJm
bj0lcyB0YXNrbmFtZT0lcyB0YXNrZGVwZGF0YV9lbnRyaWVzPSVzIiAlICgKKyAgICAgICAgICAg
ICAgICBkYXRhLmdldCgnZm4nKSwgZGF0YS5nZXQoJ3Rhc2tuYW1lJyksCisgICAgICAgICAgICAg
ICAgbGVuKHRkZCkgaWYgdGRkIGlzIG5vdCBOb25lIGVsc2UgIm4vYSIpCisgICAgICAgIFJ1blF1
ZXVlLl9kaWFnX21hcmtfaW5mbGlnaHQobmFtZSwgX2RpYWdfZXh0cmEpCisKICAgICAgICAgbXNn
ID0gYnl0ZWFycmF5KCkKICAgICAgICAgbXNnLmV4dGVuZChiIjwiICsgbmFtZS5lbmNvZGUoKSAr
IGIiPiIpCisgICAgICAgIF9kaWFnX3QwID0gdGltZS50aW1lKCkKICAgICAgICAgcGlja2xlZF9k
YXRhID0gcGlja2xlLmR1bXBzKGRhdGEpCisgICAgICAgIF9kaWFnX3BpY2tsZV90aW1lID0gdGlt
ZS50aW1lKCkgLSBfZGlhZ190MAogICAgICAgICBtc2cuZXh0ZW5kKGxlbihwaWNrbGVkX2RhdGEp
LnRvX2J5dGVzKDQsICdiaWcnKSkKICAgICAgICAgbXNnLmV4dGVuZChwaWNrbGVkX2RhdGEpCiAg
ICAgICAgIG1zZy5leHRlbmQoYiI8LyIgKyBuYW1lLmVuY29kZSgpICsgYiI+IikKKyAgICAgICAg
X2RpYWdfdDEgPSB0aW1lLnRpbWUoKQogICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUobXNnKQor
ICAgICAgICBfZGlhZ193cml0ZV90aW1lID0gdGltZS50aW1lKCkgLSBfZGlhZ190MQorICAgICAg
ICBSdW5RdWV1ZS5fZGlhZ19jbGVhcl9pbmZsaWdodCgpCisKKyAgICAgICAgZXh0cmEgPSBfZGlh
Z19leHRyYQorICAgICAgICBpZiBuYW1lID09ICJydW50YXNrIiBhbmQgaXNpbnN0YW5jZShkYXRh
LCBkaWN0KSBhbmQgX2RpYWdfcGlja2xlX3RpbWUgPj0gUnVuUXVldWUuX2RpYWdfdGltZV90aHJl
c2hvbGQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnJlYWtkb3duID0gUnVu
UXVldWUuX2RpYWdfYnJlYWtkb3duX3J1bnRhc2soZGF0YSkKKyAgICAgICAgICAgICAgICBleHRy
YSA9ICIlcyB8IHBlci1rZXk6ICVzIiAlIChleHRyYSwgYnJlYWtkb3duKQorICAgICAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGV4dHJhID0gIiVzIHwgcGVy
LWtleSBicmVha2Rvd24gRkFJTEVEOiAlcyIgJSAoZXh0cmEsIGUpCisKKyAgICAgICAgUnVuUXVl
dWUuX2RpYWdfcmVjb3JkKG5hbWUsIGxlbihwaWNrbGVkX2RhdGEpLCBfZGlhZ19waWNrbGVfdGlt
ZSwgX2RpYWdfd3JpdGVfdGltZSwgZXh0cmEpCiAKICAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxm
LCBtYywgZmFrZXJvb3QgPSBGYWxzZSwgcnFleGVjID0gTm9uZSk6CiAgICAgICAgIGxvZ2dlci5k
ZWJ1ZygiU3RhcnRpbmcgYml0YmFrZS13b3JrZXIiKQpAQCAtMTM5OCw2ICsxNTU3LDcgQEAgY2xh
c3MgUnVuUXVldWU6CiAgICAgICAgICAgICAidGltZSIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJU
SU1FIiksCiAgICAgICAgICAgICAiaGFzaHNlcnZhZGRyIiA6IHNlbGYuY29va2VyLmhhc2hzZXJ2
YWRkciwKICAgICAgICAgICAgICJ1bWFzayIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9ERUZB
VUxUX1VNQVNLIiksCisgICAgICAgICAgICAiZGlhZ19kaXIiIDogc2VsZi5jZmdEYXRhLmdldFZh
cigiRElBR19ESVIiKSwKICAgICAgICAgfQogCiAgICAgICAgIFJ1blF1ZXVlLnNlbmRfcGlja2xl
ZF9kYXRhKHdvcmtlciwgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbiwgImNvb2tlcmNvbmZpZyIp
CkBAIC0yMzc1LDYgKzI1MzUsMjAgQEAgY2xhc3MgUnVuUXVldWVFeGVjdXRlOgogCiAgICAgICAg
ICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlc1ttY10udGFza19kZXBzW3Rhc2tm
bl0KICAgICAgICAgICAgIHJlYWxmbiA9IGJiLmNhY2hlLnZpcnR1YWxmbjJyZWFsZm4odGFza2Zu
KVswXQorCisgICAgICAgICAgICAjIEJpdGJha2VUaW1lb3V0RGlhZzoKKyAgICAgICAgICAgICMg
VGltZSBidWlsZF90YXNrZGVwZGF0YSgpIHNlcGFyYXRlbHkgZnJvbSB0aGUgcGlja2xpbmcgb2Yg
aXRzIHJlc3VsdC4KKyAgICAgICAgICAgICMgSWYgYnVpbGRpbmcgdGhlIGRpY3QgaXRzZWxmIGlz
IHNsb3cvaHVnZSwgdGhhdCBwb2ludHMgYXQgYW4gZWFybGllciBzdGFnZSB0aGFuIElQQy9waWNr
bGluZy4KKyAgICAgICAgICAgIF9kaWFnX3RkZF90MCA9IHRpbWUudGltZSgpCisgICAgICAgICAg
ICBfZGlhZ190YXNrZGVwZGF0YSA9IHNlbGYuYnVpbGRfdGFza2RlcGRhdGEodGFzaykKKyAgICAg
ICAgICAgIF9kaWFnX3RkZF90aW1lID0gdGltZS50aW1lKCkgLSBfZGlhZ190ZGRfdDAKKyAgICAg
ICAgICAgIF9kaWFnX3RkZF9lbnRyaWVzID0gbGVuKF9kaWFnX3Rhc2tkZXBkYXRhKQorICAgICAg
ICAgICAgaWYgX2RpYWdfdGRkX3RpbWUgPj0gUnVuUXVldWUuX2RpYWdfdGltZV90aHJlc2hvbGQg
b3IgX2RpYWdfdGRkX2VudHJpZXMgPj0gNTAwMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2Fy
bmluZygKKyAgICAgICAgICAgICAgICAgICAgIkJpdGJha2VUaW1lb3V0RGlhZzogYnVpbGRfdGFz
a2RlcGRhdGEgdGFzaz0lcyB0YXNrbmFtZT0lcyBlbnRyaWVzPSVkICIKKyAgICAgICAgICAgICAg
ICAgICAgImJ1aWxkX3RpbWU9JS4zZnMgcGlkPSVkIiAlICgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRhc2ssIHRhc2tuYW1lLCBfZGlhZ190ZGRfZW50cmllcywgX2RpYWdfdGRkX3RpbWUsIG9z
LmdldHBpZCgpKSkKKwogICAgICAgICAgICAgcnVudGFzayA9IHsKICAgICAgICAgICAgICAgICAn
Zm4nIDogdGFza2ZuLAogICAgICAgICAgICAgICAgICd0YXNrJyA6IHRhc2ssCkBAIC0yMzg0LDcg
KzI1NTgsNyBAQCBjbGFzcyBSdW5RdWV1ZUV4ZWN1dGU6CiAgICAgICAgICAgICAgICAgJ3F1aWV0
ZXJyb3JzJyA6IEZhbHNlLAogICAgICAgICAgICAgICAgICdhcHBlbmRzJyA6IHNlbGYuY29va2Vy
LmNvbGxlY3Rpb25zW21jXS5nZXRfZmlsZV9hcHBlbmRzKHRhc2tmbiksCiAgICAgICAgICAgICAg
ICAgJ2xheWVybmFtZScgOiBzZWxmLmNvb2tlci5jb2xsZWN0aW9uc1ttY10uY2FsY19iYmZpbGVf
cHJpb3JpdHkocmVhbGZuKVsyXSwKLSAgICAgICAgICAgICAgICAndGFza2RlcGRhdGEnIDogc2Vs
Zi5idWlsZF90YXNrZGVwZGF0YSh0YXNrKSwKKyAgICAgICAgICAgICAgICAndGFza2RlcGRhdGEn
IDogX2RpYWdfdGFza2RlcGRhdGEsCiAgICAgICAgICAgICAgICAgJ2RyeV9ydW4nIDogc2VsZi5y
cWRhdGEuc2V0c2NlbmVfZW5mb3JjZSwKICAgICAgICAgICAgICAgICAndGFza2RlcCc6IHRhc2tk
ZXAsCiAgICAgICAgICAgICAgICAgJ2Zha2Vyb290ZW52JyA6IHNlbGYucnFkYXRhLmRhdGFDYWNo
ZXNbbWNdLmZha2Vyb290ZW52W3Rhc2tmbl0sCi0tIAoyLjU1LjAud2luZG93cy4zCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>