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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>301178</bug_id>
          
          <creation_ts>2025-10-21 01:44:26 -0700</creation_ts>
          <short_desc>Assertion Failure in PageCount::fromBytes() via Malicious maxByteLength (Potential DoS)</short_desc>
          <delta_ts>2025-10-23 20:40:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="gandalf4a">baksmali404</reporter>
          <assigned_to name="Shu-yu Guo">syg</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>syg</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2152915</commentid>
    <comment_count>0</comment_count>
      <attachid>477158</attachid>
    <who name="gandalf4a">baksmali404</who>
    <bug_when>2025-10-21 01:44:26 -0700</bug_when>
    <thetext>Created attachment 477158
poc_file.js

Credit:  Gandalf4a of PKU-ICODE
Product: WebKit / JavaScriptCore  
Code Version：commit 7fd0359ffa67a16628870bba5b09d84fd1db0a5c
Code Date:   Sun Oct 19 22:52:43 2025 -0700
Affected Component: JavaScriptCore (JSC) – Memory Management (`PageCount`)  
Build Configuration: ASan-enabled debug build (assertions enabled)  
Severity:  (Denial-of-Service in debug builds; potential undefined behavior in release)

---

### Summary

A controlled input to the `maxByteLength` property of resizable memory objects (e.g., `WebAssembly.Memory` or `ArrayBuffer`) can trigger an assertion failure in `PageCount::fromBytes()`, causing the JavaScriptCore engine to abort. This occurs when an excessively large value is provided, leading to an invalid page count during internal memory size validation.

While the crash is currently limited to assertion-enabled builds (e.g., debug or ASan builds), the lack of input validation prior to page-count conversion may result in undefined behavior or memory corruption in release builds under certain conditions.

---

### Steps to Reproduce

The following  JavaScript snippet reliably triggers the assertion failure in an ASan-enabled JSC build:

the attachment

### Crash Details

```
/home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc /home/gandalf/fuzz/fuzzilli/Targets/JavaScriptCore/out/crashes/program_20251021131017_8B665E35-6381-4268-AE29-A3EADD9410A3_deterministic.js
WARNING: ASAN interferes with JSC signal handlers; useWasmFastMemory and useWasmFaultSignalHandler will be disabled.
Fuzzer output channel not available, printing to stdout instead.
EXPLORE_ACTION: {&quot;operation&quot;:&quot;SET_PROPERTY&quot;,&quot;inputs&quot;:[{&quot;special&quot;:{&quot;name&quot;:&quot;exploredValue&quot;}},{&quot;string&quot;:{&quot;value&quot;:&quot;maxByteLength&quot;}},{&quot;argument&quot;:{&quot;index&quot;:1}}],&quot;isGuarded&quot;:false,&quot;id&quot;:&quot;v35&quot;}
ASSERTION FAILED: PageCount::isValid(numPages)
build_asan/JavaScriptCore/PrivateHeaders/JavaScriptCore/PageCount.h(79) : static PageCount JSC::PageCount::fromBytes(uint64_t)
1   0x5f1470b3c6e0 /home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc(+0x6c136e0) [0x5f1470b3c6e0]
2   0x5f146eebf240 /home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc(+0x4f96240) [0x5f146eebf240]
3   0x5f146eeba41d /home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc(+0x4f9141d) [0x5f146eeba41d]
4   0x5f146eebf558 /home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc(+0x4f96558) [0x5f146eebf558]
5   0x5f146f3091c1 /home/gandalf/fuzz/fuzz_jsc/WebKit/build_asan/bin/jsc(+0x53e01c1) [0x5f146f3091c1]
6   0x769a50e0c3e7 [0x769a50e0c3e7]
已中止 (核心已转储)
```

The crash occurs because `numPages = bytes / pageSize` exceeds `PageCount`’s maximum representable value (`0xFFFFFFFF` pages), causing `PageCount::isValid()` to return false.

---

### Impact

- **Debug/ASan builds**: Immediate abort (Denial-of-Service).
- **Release builds**: Assertions are disabled, but the resulting invalid `PageCount` may lead to:
  - Integer truncation
  - Incorrect memory reservation
  - Potential heap corruption or out-of-bounds access (depending on downstream usage)

This could be exploitable in environments where untrusted JavaScript controls memory sizing parameters.

---

### Recommended Fix

Add explicit bounds checking **before** converting user-provided byte sizes to `PageCount`. For example:

```cpp
// In WebAssembly.Memory constructor or ArrayBuffer options parsing
if (maxByteLength &gt; PageCount::max().bytes()) {
    throwException(..., &quot;Maximum memory size exceeds engine limits&quot;);
    return;
}
```

Ensure all code paths that accept `maxByteLength` or similar size parameters validate against `PageCount::max().bytes()`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2152916</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-10-21 01:44:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/163099450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2153854</commentid>
    <comment_count>2</comment_count>
    <who name="Shu-yu Guo">syg</who>
    <bug_when>2025-10-23 15:53:30 -0700</bug_when>
    <thetext>This is a controlled RELEASE_ASSERT, and not a security bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2153856</commentid>
    <comment_count>3</comment_count>
    <who name="Shu-yu Guo">syg</who>
    <bug_when>2025-10-23 15:55:03 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/52914</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2153912</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-10-23 20:40:12 -0700</bug_when>
    <thetext>Committed 302068@main (db97275cee41): &lt;https://commits.webkit.org/302068@main&gt;

Reviewed commits have been landed. Closing PR #52914 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>477158</attachid>
            <date>2025-10-21 01:44:26 -0700</date>
            <delta_ts>2025-10-21 01:44:26 -0700</delta_ts>
            <desc>poc_file.js</desc>
            <filename>program_20251021131017_8B665E35-6381-4268-AE29-A3EADD9410A3_deterministic.js</filename>
            <type>text/javascript</type>
            <size>51669</size>
            <attacher name="gandalf4a">baksmali404</attacher>
            
              <data encoding="base64">Ly8gSWYgYSBzYW1wbGUgd2l0aCB0aGlzIGluc3RydW1lbnRhdGlvbiBjcmFzaGVzLCBpdCBtYXkg
bmVlZCB0aGUgYGZ1enppbGxpYCBmdW5jdGlvbiB0byByZXByb2R1Y2UgdGhlIGNyYXNoLgppZiAo
dHlwZW9mIGZ1enppbGxpID09PSAndW5kZWZpbmVkJykgZnV6emlsbGkgPSBmdW5jdGlvbigpIHt9
Owpjb25zdCBleHBsb3JlID0gKGZ1bmN0aW9uKCkgewogICAgLy8KICAgIC8vICJJbXBvcnQiIHRo
ZSBjb21tb24gcnVudGltZS1hc3Npc3RlZCBtdXRhdG9yIGNvZGUuIFRoaXMgd2lsbCBtYWtlIHZh
cmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgYXZhaWxhYmxlLgogICAgLy8KICAgICAgICAvLyBOb3Rl
OiBydW50aW1lIGluc3RydW1lbnRhdGlvbiBjb2RlIG11c3QgZ2VuZXJhbGx5IGFzc3VtZSB0aGF0
IGFueSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIGFueSBvYmplY3QgY29taW5nIGZyb20gdGhlICJv
dXRzaWRlIiwgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiwgZm9yIGV4YW1wbGUgZHVlIHRvIHRyaWdn
ZXJpbmcgYSBQcm94eSB0cmFwLgogICAgLy8gRnVydGhlciwgaXQgbXVzdCBhbHNvIGFzc3VtZSB0
aGF0IHRoZSBlbnZpcm9ubWVudCBoYXMgYmVlbiBtb2RpZmllZCBhcmJpdHJhcmlseS4gRm9yIGV4
YW1wbGUsIHRoZSBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0gbWF5IGhhdmUgYmVlbiBzZXQg
dG8gYW4gaW52YWxpZCB2YWx1ZSwgc28gdXNpbmcgYGZvci4uLm9mYCBzeW50YXggY291bGQgdHJp
Z2dlciBhbiBleGNlcHRpb24uCiAgICAvLyBMb2FkIGFsbCBuZWNlc3Nhcnkgcm91dGluZXMgYW5k
IG9iamVjdHMgaW50byBsb2NhbCB2YXJpYWJsZXMgYXMgdGhleSBtYXkgYmUgb3ZlcndyaXR0ZW4g
YnkgdGhlIHByb2dyYW0uCiAgICAvLyBXZSBnZW5lcmFsbHkgd2FudCB0byBhdm9pZCB0cmlnZ2Vy
cmluZyBvYnNlcnZhYmxlIHNpZGUtZWZmZWN0cywgc3VjaCBhcyBzdG9yaW5nIG9yIGxvYWRpbmcK
ICAgIC8vIHByb3BlcnRpZXMuIEZvciB0aGF0IHJlYXNvbiwgd2UgcHJlZmVyIHRvIHVzZSBidWls
dGlucyBsaWtlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eS4KICAgIGNvbnN0IFByb3h5Q29uc3RydWN0
b3IgPSBQcm94eTsKICAgIGNvbnN0IEJpZ0ludENvbnN0cnVjdG9yID0gQmlnSW50OwogICAgY29u
c3QgU2V0Q29uc3RydWN0b3IgPSBTZXQ7CiAgICBjb25zdCBPYmplY3RQcm90b3R5cGUgPSBPYmpl
Y3QucHJvdG90eXBlOwogICAgY29uc3QgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eU5hbWVzOwogICAgY29uc3QgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJv
dG90eXBlT2Y7CiAgICBjb25zdCBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVP
ZjsKICAgIGNvbnN0IHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5OwogICAgY29uc3QgaGFzT3du
UHJvcGVydHkgPSBPYmplY3QuaGFzT3duOwogICAgY29uc3QgZGVmaW5lUHJvcGVydHkgPSBPYmpl
Y3QuZGVmaW5lUHJvcGVydHk7CiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlcyA9IE9iamVjdC52YWx1
ZXM7CiAgICBjb25zdCBwYXJzZUludGVnZXIgPSBwYXJzZUludDsKICAgIGNvbnN0IE51bWJlcklz
SW50ZWdlciA9IE51bWJlci5pc0ludGVnZXI7CiAgICBjb25zdCBpc05hTiA9IE51bWJlci5pc05h
TjsKICAgIGNvbnN0IGlzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlOwogICAgY29uc3QgdHJ1bmNh
dGUgPSBNYXRoLnRydW5jOwogICAgY29uc3QgYXBwbHkgPSBSZWZsZWN0LmFwcGx5OwogICAgY29u
c3QgY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7CiAgICBjb25zdCBSZWZsZWN0R2V0ID0g
UmVmbGVjdC5nZXQ7CiAgICBjb25zdCBSZWZsZWN0U2V0ID0gUmVmbGVjdC5zZXQ7CiAgICBjb25z
dCBSZWZsZWN0SGFzID0gUmVmbGVjdC5oYXM7CiAgICAvLyBCaW5kIG1ldGhvZHMgdG8gbG9jYWwg
dmFyaWFibGVzLiBUaGVzZSBhbGwgZXhwZWN0IHRoZSAndGhpcycgb2JqZWN0IGFzIGZpcnN0IHBh
cmFtZXRlci4KICAgIGNvbnN0IGNvbmNhdCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQo
QXJyYXkucHJvdG90eXBlLmNvbmNhdCk7CiAgICBjb25zdCBmaW5kSW5kZXggPSBGdW5jdGlvbi5w
cm90b3R5cGUuY2FsbC5iaW5kKEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpOwogICAgY29uc3Qg
aW5jbHVkZXMgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbC5iaW5kKEFycmF5LnByb3RvdHlwZS5p
bmNsdWRlcyk7CiAgICBjb25zdCBzaGlmdCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQo
QXJyYXkucHJvdG90eXBlLnNoaWZ0KTsKICAgIGNvbnN0IHBvcCA9IEZ1bmN0aW9uLnByb3RvdHlw
ZS5jYWxsLmJpbmQoQXJyYXkucHJvdG90eXBlLnBvcCk7CiAgICBjb25zdCBwdXNoID0gRnVuY3Rp
b24ucHJvdG90eXBlLmNhbGwuYmluZChBcnJheS5wcm90b3R5cGUucHVzaCk7CiAgICBjb25zdCBm
aWx0ZXIgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbC5iaW5kKEFycmF5LnByb3RvdHlwZS5maWx0
ZXIpOwogICAgY29uc3QgZXhlY1JlZ0V4cCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQo
UmVnRXhwLnByb3RvdHlwZS5leGVjKTsKICAgIGNvbnN0IHN0cmluZ1NsaWNlID0gRnVuY3Rpb24u
cHJvdG90eXBlLmNhbGwuYmluZChTdHJpbmcucHJvdG90eXBlLnNsaWNlKTsKICAgIGNvbnN0IHRv
VXBwZXJDYXNlID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChTdHJpbmcucHJvdG90eXBl
LnRvVXBwZXJDYXNlKTsKICAgIGNvbnN0IG51bWJlclRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90
eXBlLmNhbGwuYmluZChOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nKTsKICAgIGNvbnN0IGJpZ2lu
dFRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChCaWdJbnQucHJvdG90eXBl
LnRvU3RyaW5nKTsKICAgIGNvbnN0IHN0cmluZ1N0YXJ0c1dpdGggPSBGdW5jdGlvbi5wcm90b3R5
cGUuY2FsbC5iaW5kKFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCk7CiAgICBjb25zdCBzZXRB
ZGQgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbC5iaW5kKFNldC5wcm90b3R5cGUuYWRkKTsKICAg
IGNvbnN0IHNldEhhcyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLmJpbmQoU2V0LnByb3RvdHlw
ZS5oYXMpOwogICAgY29uc3QgTUlOX1NBRkVfSU5URUdFUiA9IE51bWJlci5NSU5fU0FGRV9JTlRF
R0VSOwogICAgY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VS
OwogICAgLy8gU2ltcGxlLCBzZWVkYWJsZSBQUk5HIGJhc2VkIG9uIGEgTENHLgogICAgY2xhc3Mg
Uk5HIHsKICAgICAgICBtID0gMiAqKiAzMjsKICAgICAgICBhID0gMTY2NDUyNTsKICAgICAgICBj
ID0gMTAxMzkwNDIyMzsKICAgICAgICB4OwogICAgICAgIGNvbnN0cnVjdG9yKHNlZWQpIHsKICAg
ICAgICAgICAgdGhpcy54ID0gc2VlZDsKICAgICAgICB9CiAgICAgICAgcmFuZG9tSW50KCkgewog
ICAgICAgICAgICB0aGlzLnggPSAodGhpcy54ICogdGhpcy5hICsgdGhpcy5jKSAlIHRoaXMubTsK
ICAgICAgICAgICAgaWYgKCFpc0ludGVnZXIodGhpcy54KSkgdGhyb3cgIlJORyBzdGF0ZSBpcyBu
b3QgYW4gSW50ZWdlciEiCiAgICAgICAgICAgIHJldHVybiB0aGlzLng7CiAgICAgICAgfQogICAg
ICAgIHJhbmRvbUZsb2F0KCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5kb21JbnQoKSAv
IHRoaXMubTsKICAgICAgICB9CiAgICAgICAgcHJvYmFiaWxpdHkocCkgewogICAgICAgICAgICBy
ZXR1cm4gdGhpcy5yYW5kb21GbG9hdCgpIDwgcDsKICAgICAgICB9CiAgICAgICAgcmVzZWVkKHNl
ZWQpIHsKICAgICAgICAgICAgdGhpcy54ID0gc2VlZDsKICAgICAgICB9CiAgICB9CiAgICAvLyBX
aGVuIGNyZWF0aW5nIGVtcHR5IGFycmF5cyB0byB3aGljaCBlbGVtZW50cyBhcmUgbGF0ZXIgYWRk
ZWQsIHVzZSBhIGN1c3RvbSBhcnJheSB0eXBlIHRoYXQgaGFzIGEgbnVsbCBwcm90b3R5cGUuIFRo
aXMgd2F5LCB0aGUgYXJyYXlzIGFyZSBub3QKICAgIC8vIGFmZmVjdGVkIGJ5IGNoYW5nZXMgdG8g
dGhlIEFycmF5LnByb3RvdHlwZSB0aGF0IGNvdWxkIGludGVyZmVyZSB3aXRoIGFycmF5IGJ1aWx0
aW5zIChlLmcuIGluZGV4ZWQgc2V0dGVycyBvciBhIG1vZGlmaWVkIC5jb25zdHJ1Y3RvciBwcm9w
ZXJ0eSkuCiAgICBmdW5jdGlvbiBFbXB0eUFycmF5KCkgewogICAgICAgIGxldCBhcnJheSA9IFtd
OwogICAgICAgIHNldFByb3RvdHlwZU9mKGFycmF5LCBudWxsKTsKICAgICAgICByZXR1cm4gYXJy
YXk7CiAgICB9CiAgICAvLwogICAgLy8gTWlzYy4gaGVscGVyIGZ1bmN0aW9ucy4KICAgIC8vCiAg
ICAvLyBUeXBlIGNoZWNrIGhlbHBlcnMuIFRoZXNlIGFyZSBsZXNzIGVycm9yLXByb25lIHRoYW4g
bWFudWFsbHkgdXNpbmcgdHlwZW9mIGFuZCBjb21wYXJpbmcgYWdhaW5zdCBhIHN0cmluZy4KICAg
IGZ1bmN0aW9uIGlzT2JqZWN0KHYpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmpl
Y3QnOwogICAgfQogICAgZnVuY3Rpb24gaXNGdW5jdGlvbih2KSB7CiAgICAgICAgcmV0dXJuIHR5
cGVvZiB2ID09PSAnZnVuY3Rpb24nOwogICAgfQogICAgZnVuY3Rpb24gaXNTdHJpbmcodikgewog
ICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZyc7CiAgICB9CiAgICBmdW5jdGlvbiBp
c051bWJlcih2KSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJzsKICAgIH0K
ICAgIGZ1bmN0aW9uIGlzQmlnaW50KHYpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdi
aWdpbnQnOwogICAgfQogICAgZnVuY3Rpb24gaXNTeW1ib2wodikgewogICAgICAgIHJldHVybiB0
eXBlb2YgdiA9PT0gJ3N5bWJvbCc7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odikgewog
ICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nOwogICAgfQogICAgZnVuY3Rpb24g
aXNVbmRlZmluZWQodikgewogICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCc7
CiAgICB9CiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMg
YW4gaW50ZWdlciwgYW5kIHdpdGhpbiBbTUlOX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdF
Ul0uCiAgICBmdW5jdGlvbiBpc0ludGVnZXIobikgewogICAgICAgIHJldHVybiBpc051bWJlcihu
KSAmJiBOdW1iZXJJc0ludGVnZXIobikgJiYgbj49IE1JTl9TQUZFX0lOVEVHRVIgJiYgbiA8PSBN
QVhfU0FGRV9JTlRFR0VSOwogICAgfQogICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWlu
ZSBpZiBhIHN0cmluZyBpcyAic2ltcGxlIi4gV2Ugb25seSBpbmNsdWRlIHNpbXBsZSBzdHJpbmdz
IGZvciBwcm9wZXJ0eS9tZXRob2QgbmFtZXMgb3Igc3RyaW5nIGxpdGVyYWxzLgogICAgLy8gQSBz
aW1wbGUgc3RyaW5nIGlzIGJhc2ljYWxseSBhIHZhbGlkLCBwcm9wZXJ0eSBuYW1lIHdpdGggYSBt
YXhpbXVtIGxlbmd0aC4KICAgIGNvbnN0IHNpbXBsZVN0cmluZ1JlZ0V4cCA9IC9eWzAtOWEtekEt
Wl8kXSskLzsKICAgIGZ1bmN0aW9uIGlzU2ltcGxlU3RyaW5nKHMpIHsKICAgICAgICBpZiAoIWlz
U3RyaW5nKHMpKSB0aHJvdyAiTm9uLXN0cmluZyBhcmd1bWVudCB0byBpc1NpbXBsZVN0cmluZzog
IiArIHM7CiAgICAgICAgcmV0dXJuIHMubGVuZ3RoIDwgNTAgJiYgZXhlY1JlZ0V4cChzaW1wbGVT
dHJpbmdSZWdFeHAsIHMpICE9PSBudWxsOwogICAgfQogICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IGRldGVybWluZSBpZiBhIHN0cmluZyBpcyBudW1lcmljIGFuZCBpdHMgbnVtZXJpYyB2YWx1ZSBy
ZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIuCiAgICBmdW5jdGlvbiBpc051bWVyaWNTdHJpbmco
cykgewogICAgICAgIGlmICghaXNTdHJpbmcocykpIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQg
bnVtYmVyID0gcGFyc2VJbnRlZ2VyKHMpOwogICAgICAgIHJldHVybiBudW1iZXIgPj0gTUlOX1NB
RkVfSU5URUdFUiAmJiBudW1iZXIgPD0gTUFYX1NBRkVfSU5URUdFUiAmJiBudW1iZXJUb1N0cmlu
ZyhudW1iZXIpID09PSBzOwogICAgfQogICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWlu
ZSB3aGV0aGVyIGEgcHJvcGVydHkgY2FuIGJlIGFjY2Vzc2VkIHdpdGhvdXQgcmFpc2luZyBhbiBl
eGNlcHRpb24uCiAgICBmdW5jdGlvbiB0cnlBY2Nlc3NQcm9wZXJ0eShwcm9wLCBvYmopIHsKICAg
ICAgICB0cnkgewogICAgICAgICAgICBvYmpbcHJvcF07CiAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
IH0KICAgIH0KICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0
eSBleGlzdHMgb24gYW4gb2JqZWN0IG9yIG9uZSBvZiBpdHMgcHJvdG90eXBlcy4gSWYgYW4gZXhj
ZXB0aW9uIGlzIHJhaXNlZCwgZmFsc2UgaXMgcmV0dXJuZWQuCiAgICBmdW5jdGlvbiB0cnlIYXNQ
cm9wZXJ0eShwcm9wLCBvYmopIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gcHJv
cCBpbiBvYmo7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgfQogICAgfQogICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGxvYWQgYSBwcm9wZXJ0
eSBmcm9tIGFuIG9iamVjdC4gSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5kZWZpbmVkIGlz
IHJldHVybmVkLgogICAgZnVuY3Rpb24gdHJ5R2V0UHJvcGVydHkocHJvcCwgb2JqKSB7CiAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG9ialtwcm9wXTsKICAgICAgICB9IGNhdGNoIChl
KSB7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgfQogICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgb3duIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0
LiBJZiB0aGF0IHJhaXNlcyBhbiBleGNlcHRpb24gKGUuZy4gb24gYSBQcm94eSBvYmplY3QpLCBh
biBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC4KICAgIGZ1bmN0aW9uIHRyeUdldE93blByb3BlcnR5
TmFtZXMob2JqKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIGdldE93blByb3Bl
cnR5TmFtZXMob2JqKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHJldHVybiBu
ZXcgQXJyYXkoKTsKICAgICAgICB9CiAgICB9CiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmV0
Y2ggdGhlIHByb3RvdHlwZSBvZiBhbiBvYmplY3QuIElmIHRoYXQgcmFpc2VzIGFuIGV4Y2VwdGlv
biAoZS5nLiBvbiBhIFByb3h5IG9iamVjdCksIG51bGwgaXMgcmV0dXJuZWQuCiAgICBmdW5jdGlv
biB0cnlHZXRQcm90b3R5cGVPZihvYmopIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1
cm4gZ2V0UHJvdG90eXBlT2Yob2JqKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAg
IHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB0
aGF0IGNyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2hp
Y2ggd2lsbCBjYWxsIGl0IGluIGEgdHJ5LWNhdGNoIGFuZCByZXR1cm4gZmFsc2Ugb24gZXhjZXB0
aW9uLgogICAgZnVuY3Rpb24gd3JhcEluVHJ5Q2F0Y2goZikgewogICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBhcHBseShm
LCB0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQogICAgLy8K
ICAgIC8vIEJhc2ljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiB1dGlsaXR5IGZ1bmN0aW9ucy4K
ICAgIC8vCiAgICAvLyBJbml0aWFsbHkgdGhlIHJuZyBpcyBzZWVkZWQgcmFuZG9tbHksIHNwZWNp
ZmljIG11dGF0b3JzIGNhbiByZXNlZWQoKSB0aGUgcm5nIGlmIHRoZXkgbmVlZCBkZXRlcm1pbmlz
dGljIGJlaGF2aW9yLgogICAgLy8gU2VlIHRoZSBleHBsb3JlIG9wZXJhdGlvbiBpbiBKc09wZXJh
dGlvbnMuc3dpZnQgZm9yIGFuIGV4YW1wbGUuCiAgICBsZXQgcm5nID0gbmV3IFJORyh0cnVuY2F0
ZShNYXRoLnJhbmRvbSgpICogMioqMzIpKTsKICAgIGZ1bmN0aW9uIHByb2JhYmlsaXR5KHApIHsK
ICAgICAgICBpZiAocCA8IDAgfHwgcCA+IDEpIHRocm93ICJBcmd1bWVudCB0byBwcm9iYWJpbGl0
eSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gemVybyBhbmQgb25lIjsKICAgICAgICByZXR1cm4g
cm5nLnByb2JhYmlsaXR5KHApOwogICAgfQogICAgZnVuY3Rpb24gcmFuZG9tSW50QmV0d2Vlbihz
dGFydCwgZW5kKSB7CiAgICAgICAgaWYgKCFpc0ludGVnZXIoc3RhcnQpIHx8ICFpc0ludGVnZXIo
ZW5kKSkgdGhyb3cgIkFyZ3VtZW50cyB0byByYW5kb21JbnRCZXR3ZWVuIG11c3QgYmUgaW50ZWdl
cnMiOwogICAgICAgIHJldHVybiAocm5nLnJhbmRvbUludCgpICUgKGVuZCAtIHN0YXJ0KSkgKyBz
dGFydDsKICAgIH0KICAgIGZ1bmN0aW9uIHJhbmRvbUZsb2F0KCkgewogICAgICAgIHJldHVybiBy
bmcucmFuZG9tRmxvYXQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJhbmRvbUJpZ2ludEJldHdlZW4o
c3RhcnQsIGVuZCkgewogICAgICAgIGlmICghaXNCaWdpbnQoc3RhcnQpIHx8ICFpc0JpZ2ludChl
bmQpKSB0aHJvdyAiQXJndW1lbnRzIHRvIHJhbmRvbUJpZ2ludEJldHdlZW4gbXVzdCBiZSBiaWdp
bnRzIjsKICAgICAgICBpZiAoIWlzSW50ZWdlcihOdW1iZXIoc3RhcnQpKSB8fCAhaXNJbnRlZ2Vy
KE51bWJlcihlbmQpKSkgdGhyb3cgIkFyZ3VtZW50cyB0byByYW5kb21CaWdpbnRCZXR3ZWVuIG11
c3QgYmUgcmVwcmVzZW50YWJsZSBhcyByZWd1bGFyIGludGVyZ2VycyI7CiAgICAgICAgcmV0dXJu
IEJpZ0ludENvbnN0cnVjdG9yKHJhbmRvbUludEJldHdlZW4oTnVtYmVyKHN0YXJ0KSwgTnVtYmVy
KGVuZCkpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJhbmRvbUludEJlbG93KG4pIHsKICAgICAgICBp
ZiAoIWlzSW50ZWdlcihuKSkgdGhyb3cgIkFyZ3VtZW50IHRvIHJhbmRvbUludEJlbG93IG11c3Qg
YmUgYW4gaW50ZWdlciI7CiAgICAgICAgcmV0dXJuIHJuZy5yYW5kb21JbnQoKSAlIG47CiAgICB9
CiAgICBmdW5jdGlvbiByYW5kb21FbGVtZW50KGFycmF5KSB7CiAgICAgICAgcmV0dXJuIGFycmF5
W3JhbmRvbUludEJlbG93KGFycmF5Lmxlbmd0aCldOwogICAgfQogICAgLy8KICAgIC8vICJJbXBv
cnQiIHRoZSBvYmplY3QgaW50cm9zcGVjdGlvbiBjb2RlLiBUaGlzIGlzIHVzZWQgdG8gZmluZCBw
cm9wZXJ0aWVzIGFuZCBtZXRob2RzIHdoZW4gZXhwbG9yaW5nIGFuIG9iamVjdC4KICAgIC8vCiAg
ICAgICAgLy8gTm90ZTogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgY29tbW9uIGNvZGUgZnJv
bSBhYm92ZSBoYXMgYmVlbiBpbmNsdWRlZCBiZWZvcmUuCiAgICAvLwogICAgLy8gT2JqZWN0IGlu
dHJvc3BlY3Rpb24uCiAgICAvLwogICAgLy8KICAgIC8vIEVudW1lcmF0ZSBhbGwgcHJvcGVydGll
cyBvbiB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBpdHMgcHJvdG90eXBlcy4KICAgIC8vCiAgICAvLyBU
aGVzZSBpbmNsdWRlIGVsZW1lbnRzIGFuZCBtZXRob2RzIChjYWxsYWJsZSBwcm9wZXJ0aWVzKS4g
RWFjaCBwcm9wZXJ0eSBpcyBhc3NpZ25lZCBhICJ3ZWlnaHQiIHdoaWNoIGV4cHJlc3NlcyByb3Vn
aGx5IGhvdyAiaW1wb3J0YW50Ii8iaW50ZXJlc3RpbmciIGEgcHJvcGVydHkgaXM6CiAgICAvLyBh
IHByb3BlcnR5IHRoYXQgZXhpc3RzIG9uIGEgcHJvdG90eXBlIGlzIGNvbnNpZGVyZWQgbGVzcyBp
bnRlcmVzdGluZyBhcyBpdCBjYW4gcHJvYmFibHkgYmUgcmVhY2hlZCB0aHJvdWdoIG90aGVyIG9i
amVjdHMgYXMgd2VsbCwgc28gd2UgcHJlZmVyIHByb3BlcnRpZXMgY2xvc2VyIHRvIHRoZSBzdGFy
dCBvYmplY3QuCiAgICAvLwogICAgLy8gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiBhbiBhcnJh
eSBsaWtlIHRoZSBmb2xsb3dpbmc6CiAgICAvLyBbCiAgICAvLyAgIGxlbmd0aDogPHRvdGFsIG51
bWJlciBvZiBwcm9wZXJ0aWVzPgogICAgLy8gICB0b3RhbFdlaWdodDogPGNvbWJpbmVkIHdlaWdo
dCBvZiBhbGwgcHJvcGVydGllcz4KICAgIC8vICAgMCwgMSwgLi4uLCBsZW5ndGggLSAxOiB7IG5h
bWU6IDxwcm9wZXJ0eSBuYW1lL2luZGV4Piwgd2VpZ2h0OiA8d2VpZ2h0IGFzIG51bWJlcj4gfQog
ICAgLy8gXQogICAgZnVuY3Rpb24gZW51bWVyYXRlUHJvcGVydGllc09mKG8pIHsKICAgICAgICAv
LyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgZnJvbSBwcm90b3R5cGVz
LCBpbiB0aGlzIGFycmF5LgogICAgICAgIGxldCBwcm9wZXJ0aWVzID0gRW1wdHlBcnJheSgpOwog
ICAgICAgIC8vIEdpdmUgcHJvcGVydGllcyBmcm9tIHByb3RvdHlwZXMgYSBsb3dlciB3ZWlnaHQu
IEN1cnJlbnRseSwgdGhlIHdlaWdodCBpcyBoYWx2ZWQgZm9yIGV2ZXJ5IG5ldyBsZXZlbCBvZiB0
aGUgcHJvdG90eXBlIGNoYWluLgogICAgICAgIGxldCBjdXJyZW50V2VpZ2h0ID0gMS4wOwogICAg
ICAgIHByb3BlcnRpZXMudG90YWxXZWlnaHQgPSAwLjA7CiAgICAgICAgZnVuY3Rpb24gcmVjb3Jk
UHJvcGVydHkocCkgewogICAgICAgICAgICBwdXNoKHByb3BlcnRpZXMsIHtuYW1lOiBwLCB3ZWln
aHQ6IGN1cnJlbnRXZWlnaHR9KTsKICAgICAgICAgICAgcHJvcGVydGllcy50b3RhbFdlaWdodCAr
PSBjdXJyZW50V2VpZ2h0OwogICAgICAgIH0KICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHBy
b3RvdHlwZSBjaGFpbiBhbmQgcmVjb3JkIGFsbCBwcm9wZXJ0aWVzLgogICAgICAgIGxldCBvYmog
PSBvOwogICAgICAgIHdoaWxlIChvYmogIT09IG51bGwpIHsKICAgICAgICAgICAgLy8gU3BlY2lh
bCBoYW5kbGluZyBmb3IgYXJyYXktbGlrZSB0aGluZ3M6IGlmIHRoZSBhcnJheSBpcyB0b28gbGFy
Z2UsIHNraXAgdGhpcyBsZXZlbCBhbmQganVzdCBpbmNsdWRlIGEgY291cGxlIHJhbmRvbSBpbmRp
Y2VzLgogICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBhY2Nlc3Npbmcg
dGhlIGxlbmd0aCB0aG91Z2g6IGZvciBUeXBlZEFycmF5cywgdGhlIGxlbmd0aCBwcm9wZXJ0eSBp
cyBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUgYnV0CiAgICAgICAgICAgIC8vIG11c3QgYmUgYWNj
ZXNzZWQgd2l0aCB0aGUgVHlwZWRBcnJheSBhcyB8dGhpc3wgdmFsdWUgKG5vdCB0aGUgcHJvdG90
eXBlKS4KICAgICAgICAgICAgbGV0IG1heWJlTGVuZ3RoID0gdHJ5R2V0UHJvcGVydHkoJ2xlbmd0
aCcsIG9iaik7CiAgICAgICAgICAgIGlmIChpc0ludGVnZXIobWF5YmVMZW5ndGgpICYmIG1heWJl
TGVuZ3RoID4gMTAwKSB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBp
KyspIHsKICAgICAgICAgICAgICAgICAgICBsZXQgcmFuZG9tRWxlbWVudCA9IHJhbmRvbUludEJl
bG93KG1heWJlTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICByZWNvcmRQcm9wZXJ0eShyYW5k
b21FbGVtZW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIC8vIFRPRE8gZG8gd2Ugd2FudCB0byBhbHNvIGVudW1lcmF0ZSBzeW1ib2wgcHJv
cGVydGllcyBoZXJlICh1c2luZyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKT8gSWYgd2Ug
ZG8sIHdlIHNob3VsZCBwcm9iYWJsZSBhbHNvIGFkZCBJTC1sZXZlbCBzdXBwb3J0IGZvciBTeW1i
b2xzIChpLmUuIGEgYExvYWRTeW1ib2xgIGluc3RydWN0aW9uIHRoYXQgZW5zdXJlcyB0aGUgc3lt
Ym9sIGlzIGluIHRoZSBnbG9iYWwgU3ltYm9sIHJlZ2lzdHJ5KS4KICAgICAgICAgICAgICAgIGxl
dCBhbGxPd25Qcm9wZXJ0eU5hbWVzID0gdHJ5R2V0T3duUHJvcGVydHlOYW1lcyhvYmopOwogICAg
ICAgICAgICAgICAgbGV0IGFsbE93bkVsZW1lbnRzID0gRW1wdHlBcnJheSgpOwogICAgICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxPd25Qcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHAgPSBhbGxPd25Qcm9wZXJ0eU5hbWVzW2ldOwog
ICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlSW50ZWdlcihwKTsKICAgICAgICAg
ICAgICAgICAgICAvLyBUT0RPIHNob3VsZCB3ZSBhbGxvdyBuZWdhdGl2ZSBpbmRpY2VzIGhlcmUg
YXMgd2VsbD8KICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSBN
QVhfU0FGRV9JTlRFR0VSICYmIG51bWJlclRvU3RyaW5nKGluZGV4KSA9PT0gcCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKGFsbE93bkVsZW1lbnRzLCBpbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc1NpbXBsZVN0cmluZyhwKSAmJiB0cnlBY2Nlc3NQcm9wZXJ0
eShwLCBvKSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGluY2x1ZGUgcHJvcGVy
dGllcyB3aXRoICJzaW1wbGUiIG5hbWVzIGFuZCBvbmx5IGlmIHRoZXkgY2FuIGJlIGFjY2Vzc2Vk
IG9uIHRoZSBvcmlnaW5hbCBvYmplY3Qgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjb3JkUHJvcGVydHkocCk7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTGltaXQgYXJyYXktbGlr
ZSBvYmplY3RzIHRvIGF0IG1vc3QgMTAgcmFuZG9tIGVsZW1lbnRzLgogICAgICAgICAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMCAmJiBhbGxPd25FbGVtZW50cy5sZW5ndGggPiAwOyBpKysp
IHsKICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSByYW5kb21JbnRCZWxvdyhhbGxPd25F
bGVtZW50cy5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgIHJlY29yZFByb3BlcnR5KGFsbE93
bkVsZW1lbnRzW2luZGV4XSk7CiAgICAgICAgICAgICAgICAgICAgYWxsT3duRWxlbWVudHNbaW5k
ZXhdID0gcG9wKGFsbE93bkVsZW1lbnRzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICBvYmogPSB0cnlHZXRQcm90b3R5cGVPZihvYmopOwogICAgICAgICAgICBj
dXJyZW50V2VpZ2h0IC89IDIuMDsKICAgICAgICAgICAgLy8gR3JlYXRseSByZWR1Y2UgdGhlIHBy
b3BlcnR5IHdlaWdodHMgZm9yIHRoZSBPYmplY3QucHJvdG90eXBlLiBUaGVzZSBtZXRob2RzIGFy
ZSBhbHdheXMgYXZhaWxhYmxlIGFuZCB3ZSBjYW4gdXNlIG1vcmUgdGFyZ2V0ZWQgbWVjaGFuaXNt
cyBsaWtlIENvZGVHZW5lcmF0b3JzIHRvIGNhbGwgdGhlbSBpZiB3ZSB3YW50IHRvLgogICAgICAg
ICAgICBpZiAob2JqID09PSBPYmplY3RQcm90b3R5cGUpIHsKICAgICAgICAgICAgICAgIC8vIFNv
bWV3aGF0IGFyYml0cmFyaWx5IHJlZHVjZSB0aGUgd2VpZ2h0IGFzIGlmIHRoZXJlIHdlcmUgYW5v
dGhlciAzIGxldmVscy4KICAgICAgICAgICAgICAgIGN1cnJlbnRXZWlnaHQgLz0gOC4wOwogICAg
ICAgICAgICAgICAgLy8gSG93ZXZlciwgaWYgd2UndmUgcmVhY2hlZCB0aGUgT2JqZWN0IHByb3Rv
dHlwZSB3aXRob3V0IGFueSBvdGhlciBwcm9wZXJ0aWVzIChpLmUuIGFyZSBpbnNwZWN0aW5nIGFu
IGVtcHR5LCBwbGFpbiBvYmplY3QpLCB0aGVuIGFsd2F5cyByZXR1cm4gYW4gZW1wdHkgbGlzdCBz
aW5jZSB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBub3QgdmVyeSBpbnRlcnN0aW5nLgogICAgICAgICAg
ICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcHJvcGVydGllczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICByZXR1cm4gcHJvcGVydGllczsKICAgIH0KICAgIC8vCiAgICAvLyBSZXR1cm5z
IGEgcmFuZG9tIHByb3BlcnR5IGF2YWlsYWJsZSBvbiB0aGUgZ2l2ZW4gb2JqZWN0IG9yIG9uZSBv
ZiBpdHMgcHJvdG90eXBlcy4KICAgIC8vCiAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG1vcmUgImlu
dGVyZXN0aW5nIiBwcm9wZXJ0aWVzIHdpdGggYSBoaWdoZXIgcHJvYmFiaWxpdHkuIEluIGdlbmVy
YWwsIHByb3BlcnRpZXMgY2xvc2VyIHRvIHRoZSBzdGFydCBvYmplY3QKICAgIC8vIGFyZSBwcmVm
ZXJyZWQgb3ZlciBwcm9wZXJ0aWVzIG9uIHByb3RvdHlwZXMgKGFzIHRoZXNlIGFyZSBsaWtlbHkg
c2hhcmVkIHdpdGggb3RoZXIgb2JqZWN0cykuCiAgICAvLwogICAgLy8gSWYgbm8gKGludGVyZXN0
aW5nKSBwcm9wZXJ0eSBleGlzdHMsIG51bGwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIGtl
eSBvZiB0aGUgcHJvcGVydHkgaXMgcmV0dXJuZWQuCiAgICBmdW5jdGlvbiByYW5kb21Qcm9wZXJ0
eU9mKG8pIHsKICAgICAgICBsZXQgcHJvcGVydGllcyA9IGVudW1lcmF0ZVByb3BlcnRpZXNPZihv
KTsKICAgICAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwcm9wZXJ0eSB0byBjaG9zZSBmcm9t
LgogICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1
cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgLy8gTm93IGNob29zZSBhIHJhbmRvbSBwcm9wZXJ0
eS4gSWYgYSBwcm9wZXJ0eSBoYXMgd2VpZ2h0IDJXLCBpdCB3aWxsIGJlIHNlbGVjdGVkIHdpdGgg
dHdpY2UgdGhlIHByb2JhYmlsaXR5IG9mIGEgcHJvcGVydHkgd2l0aCB3ZWlnaHQgVy4KICAgICAg
ICBsZXQgc2VsZWN0ZWRQcm9wZXJ0eTsKICAgICAgICBsZXQgcmVtYWluaW5nV2VpZ2h0ID0gcmFu
ZG9tRmxvYXQoKSAqIHByb3BlcnRpZXMudG90YWxXZWlnaHQ7CiAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxldCBjYW5kaWRh
dGUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICByZW1haW5pbmdXZWlnaHQgLT0gY2FuZGlk
YXRlLndlaWdodDsKICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1dlaWdodCA8IDApIHsKICAgICAg
ICAgICAgICAgIHNlbGVjdGVkUHJvcGVydHkgPSBjYW5kaWRhdGUubmFtZTsKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFNhbml0eSBjaGVj
a2luZy4gVGhpcyBtYXkgZmFpbCBmb3IgZXhhbXBsZSBpZiBQcm94aWVzIGFyZSBpbnZvbHZlZC4g
SW4gdGhhdCBjYXNlLCBqdXN0IGZhaWwgaGVyZS4KICAgICAgICBpZiAoIXRyeUhhc1Byb3BlcnR5
KHNlbGVjdGVkUHJvcGVydHksIG8pKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gc2VsZWN0
ZWRQcm9wZXJ0eTsKICAgIH0KICAgIC8vCiAgICAvLyAiSW1wb3J0IiB0aGUgQWN0aW9uIGltcGxl
bWVudGF0aW9uIGNvZGUuCiAgICAvLwogICAgICAgIC8vIE5vdGU6IHRoaXMgY29kZSBhc3N1bWVz
IHRoYXQgdGhlIGNvbW1vbiBjb2RlIGZyb20gYWJvdmUgaGFzIGJlZW4gaW5jbHVkZWQgYmVmb3Jl
LgogICAgLy8KICAgIC8vIExpc3Qgb2YgYWxsIHN1cHBvcnRlZCBvcGVyYXRpb25zLiBNdXN0IGJl
IGtlcHQgaW4gc3luYyB3aXRoIHRoZSBBY3Rpb25PcGVyYXRpb24gZW51bS4KICAgIC8vCiAgICBj
b25zdCBPUF9DQUxMX0ZVTkNUSU9OID0gJ0NBTExfRlVOQ1RJT04nOwogICAgY29uc3QgT1BfQ09O
U1RSVUNUID0gJ0NPTlNUUlVDVCc7CiAgICBjb25zdCBPUF9DQUxMX01FVEhPRCA9ICdDQUxMX01F
VEhPRCc7CiAgICBjb25zdCBPUF9DT05TVFJVQ1RfTUVUSE9EID0gJ0NPTlNUUlVDVF9NRVRIT0Qn
OwogICAgY29uc3QgT1BfR0VUX1BST1BFUlRZID0gJ0dFVF9QUk9QRVJUWSc7CiAgICBjb25zdCBP
UF9TRVRfUFJPUEVSVFkgPSAnU0VUX1BST1BFUlRZJzsKICAgIGNvbnN0IE9QX0RFTEVURV9QUk9Q
RVJUWSA9ICdERUxFVEVfUFJPUEVSVFknOwogICAgY29uc3QgT1BfQUREID0gJ0FERCc7CiAgICBj
b25zdCBPUF9TVUIgPSAnU1VCJzsKICAgIGNvbnN0IE9QX01VTCA9ICdNVUwnOwogICAgY29uc3Qg
T1BfRElWID0gJ0RJVic7CiAgICBjb25zdCBPUF9NT0QgPSAnTU9EJzsKICAgIGNvbnN0IE9QX0lO
QyA9ICdJTkMnOwogICAgY29uc3QgT1BfREVDID0gJ0RFQyc7CiAgICBjb25zdCBPUF9ORUcgPSAn
TkVHJzsKICAgIGNvbnN0IE9QX0xPR0lDQUxfQU5EID0gJ0xPR0lDQUxfQU5EJzsKICAgIGNvbnN0
IE9QX0xPR0lDQUxfT1IgPSAnTE9HSUNBTF9PUic7CiAgICBjb25zdCBPUF9MT0dJQ0FMX05PVCA9
ICdMT0dJQ0FMX05PVCc7CiAgICBjb25zdCBPUF9OVUxMX0NPQUxFU0NFID0gJ05VTExfQ09BTEVT
Q0UnOwogICAgY29uc3QgT1BfQklUV0lTRV9BTkQgPSAnQklUV0lTRV9BTkQnOwogICAgY29uc3Qg
T1BfQklUV0lTRV9PUiA9ICdCSVRXSVNFX09SJzsKICAgIGNvbnN0IE9QX0JJVFdJU0VfWE9SID0g
J0JJVFdJU0VfWE9SJzsKICAgIGNvbnN0IE9QX0xFRlRfU0hJRlQgPSAnTEVGVF9TSElGVCc7CiAg
ICBjb25zdCBPUF9TSUdORURfUklHSFRfU0hJRlQgPSAnU0lHTkVEX1JJR0hUX1NISUZUJzsKICAg
IGNvbnN0IE9QX1VOU0lHTkVEX1JJR0hUX1NISUZUID0gJ1VOU0lHTkVEX1JJR0hUX1NISUZUJzsK
ICAgIGNvbnN0IE9QX0JJVFdJU0VfTk9UID0gJ0JJVFdJU0VfTk9UJzsKICAgIGNvbnN0IE9QX0NP
TVBBUkVfRVFVQUwgPSAnQ09NUEFSRV9FUVVBTCc7CiAgICBjb25zdCBPUF9DT01QQVJFX1NUUklD
VF9FUVVBTCA9ICdDT01QQVJFX1NUUklDVF9FUVVBTCc7CiAgICBjb25zdCBPUF9DT01QQVJFX05P
VF9FUVVBTCA9ICdDT01QQVJFX05PVF9FUVVBTCc7CiAgICBjb25zdCBPUF9DT01QQVJFX1NUUklD
VF9OT1RfRVFVQUwgPSAnQ09NUEFSRV9TVFJJQ1RfTk9UX0VRVUFMJzsKICAgIGNvbnN0IE9QX0NP
TVBBUkVfR1JFQVRFUl9USEFOID0gJ0NPTVBBUkVfR1JFQVRFUl9USEFOJzsKICAgIGNvbnN0IE9Q
X0NPTVBBUkVfTEVTU19USEFOID0gJ0NPTVBBUkVfTEVTU19USEFOJzsKICAgIGNvbnN0IE9QX0NP
TVBBUkVfR1JFQVRFUl9USEFOX09SX0VRVUFMID0gJ0NPTVBBUkVfR1JFQVRFUl9USEFOX09SX0VR
VUFMJzsKICAgIGNvbnN0IE9QX0NPTVBBUkVfTEVTU19USEFOX09SX0VRVUFMID0gJ0NPTVBBUkVf
TEVTU19USEFOX09SX0VRVUFMJzsKICAgIGNvbnN0IE9QX1RFU1RfSVNfTkFOID0gJ1RFU1RfSVNf
TkFOJzsKICAgIGNvbnN0IE9QX1RFU1RfSVNfRklOSVRFID0gJ1RFU1RfSVNfRklOSVRFJzsKICAg
IGNvbnN0IE9QX1NZTUJPTF9SRUdJU1RSQVRJT04gPSAnU1lNQk9MX1JFR0lTVFJBVElPTic7CiAg
ICAvLwogICAgLy8gQWN0aW9uIGNvbnN0cnVjdG9ycy4KICAgIC8vCiAgICBmdW5jdGlvbiBBY3Rp
b24ob3BlcmF0aW9uLCBpbnB1dHMgPSBFbXB0eUFycmF5KCkpIHsKICAgICAgICB0aGlzLm9wZXJh
dGlvbiA9IG9wZXJhdGlvbjsKICAgICAgICB0aGlzLmlucHV0cyA9IGlucHV0czsKICAgICAgICB0
aGlzLmlzR3VhcmRlZCA9IGZhbHNlOwogICAgfQogICAgLy8gQSBndWFyZGVkIGFjdGlvbiBpcyBh
biBhY3Rpb24gdGhhdCBpcyBhbGxvd2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgIC8vCiAg
ICAvLyBUaGVzZSBhcmUgZm9yIGV4YW1wbGUgdXNlZCBmb3IgYnkgdGhlIEV4cGxvcmF0aW9uTXV0
YXRvciBmb3IgZnVuY3Rpb24vbWV0aG9kIGNhbGwKICAgIC8vIHdoaWNoIG1heSB0aHJvdyBhbiBl
eGNlcHRpb24gaWYgdGhleSBhcmVuJ3QgZ2l2ZW4gdGhlIHJpZ2h0IGFyZ3VtZW50cy4gSW4gdGhh
dCBjYXNlLAogICAgLy8gd2UgbWF5IHN0aWxsIHdhbnQgdG8ga2VlcCB0aGUgZnVuY3Rpb24gY2Fs
bCBzbyB0aGF0IGl0IGNhbiBiZSBtdXRhdGVkIGZ1cnRoZXIgdG8KICAgIC8vIGhvcGVmdWxseSBl
dmVudHVhbGx5IGZpbmQgdGhlIGNvcnJlY3QgYXJndW1lbnRzLiBUaGlzIGlzIGVzcGVjaWFsbHkg
dHJ1ZSBpZiBmaW5kaW5nCiAgICAvLyB0aGUgcmlnaHQgYXJndW1lbnRzIHJlcWlyZXMgdGhlIFBy
b2JpbmdNdXRhdG9yIHRvIGluc3RhbGwgdGhlIHJpZ2h0IHByb3BlcnRpZXMgb24gYW4KICAgIC8v
IGFyZ3VtZW50IG9iamVjdCwgaW4gd2hpY2ggY2FzZSB0aGUgRXhwbG9yYXRpb25NdXRhdG9yIG9u
IGl0cyBvd24gd291bGQgKGxpa2VseSkgbmV2ZXIKICAgIC8vIGJlIGFibGUgdG8gZ2VuZXJhdGUg
YSB2YWxpZCBjYWxsLCBhbmQgc28gdGhlIGZ1bmN0aW9uL21ldGhvZCBtYXkgYmUgbWlzc2VkIGVu
dGlyZWx5LgogICAgLy8KICAgIC8vIElmIGEgZ3VhcmRlZCBhY3Rpb24gc3VjY2VlZHMgKGRvZXNu
J3QgcmFpc2UgYW4gZXhjZXB0aW9uKSwgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8KICAgIC8vIGEg
cmVndWxhciBhY3Rpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBnZW5lcmF0ZWQgdHJ5LWNhdGNo
IGJsb2Nrcy4KICAgIGZ1bmN0aW9uIEd1YXJkZWRBY3Rpb24ob3BlcmF0aW9uLCBpbnB1dHMgPSBF
bXB0eUFycmF5KCkpIHsKICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICAg
ICB0aGlzLmlucHV0cyA9IGlucHV0czsKICAgICAgICB0aGlzLmlzR3VhcmRlZCA9IHRydWU7CiAg
ICB9CiAgICAvLyBTcGVjaWFsIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgbm8gYWN0aW9uIHNob3Vs
ZCBiZSBwZXJmb3JtZWQuCiAgICBjb25zdCBOT19BQ1RJT04gPSBudWxsOwogICAgLy8KICAgIC8v
IEFjdGlvbiBJbnB1dCBjb25zdHJ1Y3RvcnMuCiAgICAvLwogICAgLy8gVGhlIGlucHV0cyBmb3Ig
YWN0aW9ucyBhcmUgZW5jb2RlZCBhcyBvYmplY3RzIHRoYXQgc3BlY2lmeSBib3RoIHRoZSB0eXBl
IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGlucHV0LiBUaGV5IGFyZSBiYXNpY2FsbHkgZW51bSB2YWx1
ZXMgd2l0aCBhc3NvY2lhdGVkIHZhbHVlcy4KICAgIC8vIFRoZXNlIG11c3QgYmUga2VwdCBjb21w
YXRpYmxlIHdpdGggdGhlIEFjdGlvbi5JbnB1dCBlbnVtIGluIFJ1bnRpbWVBc3Npc3RlZE11dGF0
b3Iuc3dpZnQgYXMgdGhleSBoYXZlIHRvIGJlIGVuY29kYWJsZSB0by9kZWNvZGFibGUgZnJvbSB0
aGF0IGVudW0uCiAgICAvLwogICAgZnVuY3Rpb24gQXJndW1lbnRJbnB1dChpbmRleCkgewogICAg
ICAgIGlmICghaXNJbnRlZ2VyKGluZGV4KSkgdGhyb3cgIkFyZ3VtZW50SW5wdXQgaW5kZXggaXMg
bm90IGFuIGludGVnZXI6ICIgKyBpbmRleDsKICAgICAgICByZXR1cm4geyBhcmd1bWVudDogeyBp
bmRleCB9IH07CiAgICB9CiAgICBmdW5jdGlvbiBTcGVjaWFsSW5wdXQobmFtZSkgewogICAgICAg
IGlmICghaXNTdHJpbmcobmFtZSkgfHwgIWlzU2ltcGxlU3RyaW5nKG5hbWUpKSB0aHJvdyAiU3Bl
Y2lhbElucHV0IG5hbWUgaXMgbm90IGEgKHNpbXBsZSkgc3RyaW5nOiAiICsgbmFtZTsKICAgICAg
ICByZXR1cm4geyBzcGVjaWFsOiB7IG5hbWUgfSB9OwogICAgfQogICAgZnVuY3Rpb24gSW50SW5w
dXQodmFsdWUpIHsKICAgICAgICBpZiAoIWlzSW50ZWdlcih2YWx1ZSkpIHRocm93ICJJbnRJbnB1
dCB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlcjogIiArIHZhbHVlOwogICAgICAgIHJldHVybiB7IGlu
dDogeyB2YWx1ZSB9IH07CiAgICB9CiAgICBmdW5jdGlvbiBGbG9hdElucHV0KHZhbHVlKSB7CiAg
ICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgdGhyb3cgIkZs
b2F0SW5wdXQgdmFsdWUgaXMgbm90IGEgKGZpbml0ZSkgbnVtYmVyOiAiICsgdmFsdWU7CiAgICAg
ICAgcmV0dXJuIHsgZmxvYXQ6IHsgdmFsdWUgfSB9OwogICAgfQogICAgZnVuY3Rpb24gQmlnaW50
SW5wdXQodmFsdWUpIHsKICAgICAgICBpZiAoIWlzQmlnaW50KHZhbHVlKSkgdGhyb3cgIkJpZ2lu
dElucHV0IHZhbHVlIGlzIG5vdCBhIGJpZ2ludDogIiArIHZhbHVlOwogICAgICAgIC8vIEJpZ2lu
dHMgY2FuJ3QgYmUgc2VyaWFsaXplZCBieSBKU09OLnN0cmluZ2lmeSwgc28gc3RvcmUgdGhlbSBh
cyBzdHJpbmdzIGluc3RlYWQuCiAgICAgICAgcmV0dXJuIHsgYmlnaW50OiB7IHZhbHVlOiBiaWdp
bnRUb1N0cmluZyh2YWx1ZSkgfSB9OwogICAgfQogICAgZnVuY3Rpb24gU3RyaW5nSW5wdXQodmFs
dWUpIHsKICAgICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSB8fCAhaXNTaW1wbGVTdHJpbmcodmFs
dWUpKSB0aHJvdyAiU3RyaW5nSW5wdXQgdmFsdWUgaXMgbm90IGEgKHNpbXBsZSkgc3RyaW5nOiAi
ICsgdmFsdWU7CiAgICAgICAgcmV0dXJuIHsgc3RyaW5nOiB7IHZhbHVlIH0gfTsKICAgIH0KICAg
IC8vIFR5cGUgY2hlY2tlcnMgZm9yIElucHV0IG9iamVjdHMuIFdlIHVzZSB0aGVzZSBpbnN0ZWFk
IG9mIGZvciBleGFtcGxlICdpbnN0YW5jZW9mJyBzaW5jZSB3ZSBhbGxvdyBJbnB1dAogICAgLy8g
b2JqZWN0cyB0byBiZSBkZWNvZGVkIGZyb20gSlNPTiwgaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGwg
bm90IGhhdmUgdGhlIHJpZ2h0IC5jb25zdHJ1Y3RvciBwcm9wZXJ0eS4KICAgIGZ1bmN0aW9uIGlz
QXJndW1lbnRJbnB1dChpbnB1dCkgeyByZXR1cm4gaGFzT3duUHJvcGVydHkoaW5wdXQsICdhcmd1
bWVudCcpOyB9CiAgICBmdW5jdGlvbiBpc1NwZWNpYWxJbnB1dChpbnB1dCkgeyByZXR1cm4gaGFz
T3duUHJvcGVydHkoaW5wdXQsICdzcGVjaWFsJyk7IH0KICAgIGZ1bmN0aW9uIGlzSW50SW5wdXQo
aW5wdXQpIHsgcmV0dXJuIGhhc093blByb3BlcnR5KGlucHV0LCAnaW50Jyk7IH0KICAgIGZ1bmN0
aW9uIGlzRmxvYXRJbnB1dChpbnB1dCkgeyByZXR1cm4gaGFzT3duUHJvcGVydHkoaW5wdXQsICdm
bG9hdCcpOyB9CiAgICBmdW5jdGlvbiBpc0JpZ2ludElucHV0KGlucHV0KSB7IHJldHVybiBoYXNP
d25Qcm9wZXJ0eShpbnB1dCwgJ2JpZ2ludCcpOyB9CiAgICBmdW5jdGlvbiBpc1N0cmluZ0lucHV0
KGlucHV0KSB7IHJldHVybiBoYXNPd25Qcm9wZXJ0eShpbnB1dCwgJ3N0cmluZycpOyB9CiAgICAv
LyBIZWxwZXIgcm91dGluZXMgdG8gZXh0cmFjdCB0aGUgYXNzb2NpYXRlZCB2YWx1ZXMgZnJvbSBJ
bnB1dCBvYmplY3RzLgogICAgZnVuY3Rpb24gZ2V0QXJndW1lbnRJbnB1dEluZGV4KGlucHV0KSB7
IHJldHVybiBpbnB1dC5hcmd1bWVudC5pbmRleDsgfQogICAgZnVuY3Rpb24gZ2V0U3BlY2lhbElu
cHV0TmFtZShpbnB1dCkgeyByZXR1cm4gaW5wdXQuc3BlY2lhbC5uYW1lOyB9CiAgICBmdW5jdGlv
biBnZXRJbnRJbnB1dFZhbHVlKGlucHV0KSB7IHJldHVybiBpbnB1dC5pbnQudmFsdWU7IH0KICAg
IGZ1bmN0aW9uIGdldEZsb2F0SW5wdXRWYWx1ZShpbnB1dCkgeyByZXR1cm4gaW5wdXQuZmxvYXQu
dmFsdWU7IH0KICAgIGZ1bmN0aW9uIGdldEJpZ2ludElucHV0VmFsdWUoaW5wdXQpIHsgcmV0dXJu
IEJpZ0ludENvbnN0cnVjdG9yKGlucHV0LmJpZ2ludC52YWx1ZSk7IH0KICAgIGZ1bmN0aW9uIGdl
dFN0cmluZ0lucHV0VmFsdWUoaW5wdXQpIHsgcmV0dXJuIGlucHV0LnN0cmluZy52YWx1ZTsgfQog
ICAgLy8gSGFuZGxlcnMgZm9yIGV4ZWN1dGluZyBhY3Rpb25zLgogICAgLy8gVGhlc2Ugd2lsbCBy
ZWNlaXZlIHRoZSBhcnJheSBvZiBjb25jcmV0ZSBpbnB1dHMgKGkuZS4gSmF2YVNjcmlwdCB2YWx1
ZXMpIGFzIGZpcnN0IHBhcmFtZXRlciBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgfHRoaXN8IGFz
IHNlY29uZCBwYXJhbWV0ZXIgKHdoaWNoIGNhbiBiZSBpZ25vcmVkIGlmIG5vdCBuZWVkZWQpLgog
ICAgY29uc3QgQUNUSU9OX0hBTkRMRVJTID0gewogICAgICBbT1BfQ0FMTF9GVU5DVElPTl06IChp
bnB1dHMsIGN1cnJlbnRUaGlzKSA9PiB7IGxldCBmID0gc2hpZnQoaW5wdXRzKTsgcmV0dXJuIGFw
cGx5KGYsIGN1cnJlbnRUaGlzLCBpbnB1dHMpOyB9LAogICAgICBbT1BfQ09OU1RSVUNUXTogKGlu
cHV0cykgPT4geyBsZXQgYyA9IHNoaWZ0KGlucHV0cyk7IHJldHVybiBjb25zdHJ1Y3QoYywgaW5w
dXRzKTsgfSwKICAgICAgW09QX0NBTExfTUVUSE9EXTogKGlucHV0cykgPT4geyBsZXQgbyA9IHNo
aWZ0KGlucHV0cyk7IGxldCBtID0gc2hpZnQoaW5wdXRzKTsgcmV0dXJuIGFwcGx5KG9bbV0sIG8s
IGlucHV0cyk7IH0sCiAgICAgIFtPUF9DT05TVFJVQ1RfTUVUSE9EXTogKHYsIGlucHV0cykgPT4g
eyBsZXQgbyA9IHNoaWZ0KGlucHV0cyk7IGxldCBtID0gc2hpZnQoaW5wdXRzKTsgcmV0dXJuIGNv
bnN0cnVjdChvW21dLCBpbnB1dHMpOyB9LAogICAgICBbT1BfR0VUX1BST1BFUlRZXTogKGlucHV0
cykgPT4geyBsZXQgbyA9IGlucHV0c1swXTsgbGV0IHAgPSBpbnB1dHNbMV07IHJldHVybiBvW3Bd
OyB9LAogICAgICBbT1BfU0VUX1BST1BFUlRZXTogKGlucHV0cykgPT4geyBsZXQgbyA9IGlucHV0
c1swXTsgbGV0IHAgPSBpbnB1dHNbMV07IGxldCB2ID0gaW5wdXRzWzJdOyBvW3BdID0gdjsgfSwK
ICAgICAgW09QX0RFTEVURV9QUk9QRVJUWV06IChpbnB1dHMpID0+IHsgbGV0IG8gPSBpbnB1dHNb
MF07IGxldCBwID0gaW5wdXRzWzFdOyByZXR1cm4gZGVsZXRlIG9bcF07IH0sCiAgICAgIFtPUF9B
RERdOiAoaW5wdXRzKSA9PiBpbnB1dHNbMF0gKyBpbnB1dHNbMV0sCiAgICAgIFtPUF9TVUJdOiAo
aW5wdXRzKSA9PiBpbnB1dHNbMF0gLSBpbnB1dHNbMV0sCiAgICAgIFtPUF9NVUxdOiAoaW5wdXRz
KSA9PiBpbnB1dHNbMF0gKiBpbnB1dHNbMV0sCiAgICAgIFtPUF9ESVZdOiAoaW5wdXRzKSA9PiBp
bnB1dHNbMF0gLyBpbnB1dHNbMV0sCiAgICAgIFtPUF9NT0RdOiAoaW5wdXRzKSA9PiBpbnB1dHNb
MF0gJSBpbnB1dHNbMV0sCiAgICAgIFtPUF9JTkNdOiAoaW5wdXRzKSA9PiBpbnB1dHNbMF0rKywK
ICAgICAgW09QX0RFQ106IChpbnB1dHMpID0+IGlucHV0c1swXS0tLAogICAgICBbT1BfTkVHXTog
KGlucHV0cykgPT4gLWlucHV0c1swXSwKICAgICAgW09QX0xPR0lDQUxfQU5EXTogKGlucHV0cykg
PT4gaW5wdXRzWzBdICYmIGlucHV0c1sxXSwKICAgICAgW09QX0xPR0lDQUxfT1JdOiAoaW5wdXRz
KSA9PiBpbnB1dHNbMF0gfHwgaW5wdXRzWzFdLAogICAgICBbT1BfTE9HSUNBTF9OT1RdOiAoaW5w
dXRzKSA9PiAhaW5wdXRzWzBdLAogICAgICBbT1BfTlVMTF9DT0FMRVNDRV06IChpbnB1dHMpID0+
IGlucHV0c1swXSA/PyBpbnB1dHNbMV0sCiAgICAgIFtPUF9CSVRXSVNFX0FORF06IChpbnB1dHMp
ID0+IGlucHV0c1swXSAmIGlucHV0c1sxXSwKICAgICAgW09QX0JJVFdJU0VfT1JdOiAoaW5wdXRz
KSA9PiBpbnB1dHNbMF0gfCBpbnB1dHNbMV0sCiAgICAgIFtPUF9CSVRXSVNFX1hPUl06IChpbnB1
dHMpID0+IGlucHV0c1swXSBeIGlucHV0c1sxXSwKICAgICAgW09QX0xFRlRfU0hJRlRdOiAoaW5w
dXRzKSA9PiBpbnB1dHNbMF0gPDwgaW5wdXRzWzFdLAogICAgICBbT1BfU0lHTkVEX1JJR0hUX1NI
SUZUXTogKGlucHV0cykgPT4gaW5wdXRzWzBdID4+IGlucHV0c1sxXSwKICAgICAgW09QX1VOU0lH
TkVEX1JJR0hUX1NISUZUXTogKGlucHV0cykgPT4gaW5wdXRzWzBdID4+PiBpbnB1dHNbMV0sCiAg
ICAgIFtPUF9CSVRXSVNFX05PVF06IChpbnB1dHMpID0+IH5pbnB1dHNbMF0sCiAgICAgIFtPUF9D
T01QQVJFX0VRVUFMXTogKGlucHV0cykgPT4gaW5wdXRzWzBdID09IGlucHV0c1sxXSwKICAgICAg
W09QX0NPTVBBUkVfU1RSSUNUX0VRVUFMXTogKGlucHV0cykgPT4gaW5wdXRzWzBdID09PSBpbnB1
dHNbMV0sCiAgICAgIFtPUF9DT01QQVJFX05PVF9FUVVBTF06IChpbnB1dHMpID0+IGlucHV0c1sw
XSAhPSBpbnB1dHNbMV0sCiAgICAgIFtPUF9DT01QQVJFX1NUUklDVF9OT1RfRVFVQUxdOiAoaW5w
dXRzKSA9PiBpbnB1dHNbMF0gIT09IGlucHV0c1sxXSwKICAgICAgW09QX0NPTVBBUkVfR1JFQVRF
Ul9USEFOXTogKGlucHV0cykgPT4gaW5wdXRzWzBdID4gaW5wdXRzWzFdLAogICAgICBbT1BfQ09N
UEFSRV9MRVNTX1RIQU5dOiAoaW5wdXRzKSA9PiBpbnB1dHNbMF0gPCBpbnB1dHNbMV0sCiAgICAg
IFtPUF9DT01QQVJFX0dSRUFURVJfVEhBTl9PUl9FUVVBTF06IChpbnB1dHMpID0+IGlucHV0c1sw
XSA+PSBpbnB1dHNbMV0sCiAgICAgIFtPUF9DT01QQVJFX0xFU1NfVEhBTl9PUl9FUVVBTF06IChp
bnB1dHMpID0+IGlucHV0c1swXSA8PSBpbnB1dHNbMV0sCiAgICAgIFtPUF9URVNUX0lTX05BTl06
IChpbnB1dHMpID0+IE51bWJlci5pc05hTihpbnB1dHNbMF0pLAogICAgICBbT1BfVEVTVF9JU19G
SU5JVEVdOiAoaW5wdXRzKSA9PiBOdW1iZXIuaXNGaW5pdGUoaW5wdXRzWzBdKSwKICAgICAgW09Q
X1NZTUJPTF9SRUdJU1RSQVRJT05dOiAoaW5wdXRzKSA9PiBTeW1ib2wuZm9yKGlucHV0c1swXS5k
ZXNjcmlwdGlvbiksCiAgICB9OwogICAgLy8gRXhlY3V0ZXMgdGhlIGdpdmVuIGFjdGlvbi4KICAg
IC8vCiAgICAvLyBUaGlzIHdpbGwgY29udmVydCB0aGUgaW5wdXRzIHRvIGNvbmNyZXRlIEphdmFT
Y3JpcHQgdmFsdWVzLCB0aGVuIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZXNlIGlucHV0
cy4KICAgIC8vIEV4ZWN1dGluZyBhbiBhY3Rpb24gbWF5IGNoYW5nZSBpdHMgZ3VhcmRpbmcgc3Rh
dGU6IGlmIGEgZ3VhcmRlZCBhY3Rpb24gZXhlY3V0ZXMgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2Vw
dGlvbiwKICAgIC8vIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGFuIHVuZ3VhcmRlZCBvcGVyYXRp
b24gKGFzIHRoZSBndWFyZGluZyBhcGVhcnMgdG8gbm90IGJlIG5lZWRlZCkuIFRoaXMgd2F5LCB3
ZSB3aWxsCiAgICAvLyB1bHRpbWF0ZWx5IGVuZCB1cCBlbWl0dGluZyBmZXdlciB0cnktY2F0Y2gg
KG9yIGVxdWl2YWxlbnQpIGNvbnN0cnVjdHMgaW4gdGhlIGZpbmFsIEphdmFTY3JpcHQgY29kZSBn
ZW5lcmF0ZWQKICAgIC8vIGZyb20gdGhlc2UgYWN0aW9ucy4KICAgIC8vCiAgICAvLyBSZXR1cm5z
IHRydWUgaWYgZWl0aGVyIHRoZSBhY3Rpb24gc3VjY2VlZGVkIHdpdGhvdXQgcmFpc2luZyBhbiBl
eGNlcHRpb24gb3IgaWYgdGhlIGFjdGlvbiBpcyBndWFyZGVkLCBmYWxzZSBvdGhlcndpc2UuCiAg
ICAvLyBUaGUgb3V0cHV0IG9mIHRoZSBhY3Rpb24gaXMgc3RvcmVkIGluIHxjb250ZXh0Lm91dHB1
dHwgdXBvbiBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KICAgIGZ1bmN0aW9uIGV4ZWN1dGUoYWN0aW9u
LCBjb250ZXh0KSB7CiAgICAgICAgaWYgKGFjdGlvbiA9PT0gTk9fQUNUSU9OKSB7CiAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBDb252ZXJ0IHRoZSBhY3Rpb24n
cyBpbnB1dHMgdG8gdGhlIGNvbmNyZXRlIEpTIHZhbHVlcyB0byB1c2UgZm9yIGV4ZWN1dGluZyB0
aGUgYWN0aW9uLgogICAgICAgIGxldCBjb25jcmV0ZUlucHV0cyA9IEVtcHR5QXJyYXkoKTsKICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAg
ICAgICAgICAgbGV0IGlucHV0ID0gYWN0aW9uLmlucHV0c1tpXTsKICAgICAgICAgICAgaWYgKGlz
QXJndW1lbnRJbnB1dChpbnB1dCkpIHsKICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGdldEFy
Z3VtZW50SW5wdXRJbmRleChpbnB1dCk7CiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC5hcmd1bWVudHMubGVuZ3RoKSB0aHJvdyAiSW52YWxpZCBhcmd1bWVudCBpbmRleDogIiAr
IGluZGV4OwogICAgICAgICAgICAgICAgcHVzaChjb25jcmV0ZUlucHV0cywgY29udGV4dC5hcmd1
bWVudHNbaW5kZXhdKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NwZWNpYWxJbnB1dChpbnB1
dCkpIHsKICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0U3BlY2lhbElucHV0TmFtZShpbnB1
dCk7CiAgICAgICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5KGNvbnRleHQuc3BlY2lhbFZh
bHVlcywgbmFtZSkpIHRocm93ICJVbmtub3duIHNwZWNpYWwgdmFsdWU6ICIgKyBuYW1lOwogICAg
ICAgICAgICAgICAgcHVzaChjb25jcmV0ZUlucHV0cywgY29udGV4dC5zcGVjaWFsVmFsdWVzW25h
bWVdKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludElucHV0KGlucHV0KSkgewogICAgICAg
ICAgICAgICAgcHVzaChjb25jcmV0ZUlucHV0cywgZ2V0SW50SW5wdXRWYWx1ZShpbnB1dCkpOwog
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzRmxvYXRJbnB1dChpbnB1dCkpIHsKICAgICAgICAgICAg
ICAgIHB1c2goY29uY3JldGVJbnB1dHMsIGdldEZsb2F0SW5wdXRWYWx1ZShpbnB1dCkpOwogICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzQmlnaW50SW5wdXQoaW5wdXQpKSB7CiAgICAgICAgICAgICAg
ICAvLyBUaGVzZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBCaWdJbnRzIGNhbm5vdCBi
ZSBzZXJpYWxpemVkIGludG8gSlNPTiwgc28gYXJlIHN0b3JlZCBhcyBzdHJpbmdzLgogICAgICAg
ICAgICAgICAgcHVzaChjb25jcmV0ZUlucHV0cywgZ2V0QmlnaW50SW5wdXRWYWx1ZShpbnB1dCkp
OwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nSW5wdXQoaW5wdXQpKSB7CiAgICAgICAg
ICAgICAgICBwdXNoKGNvbmNyZXRlSW5wdXRzLCBnZXRTdHJpbmdJbnB1dFZhbHVlKGlucHV0KSk7
CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyAiVW5rbm93biBhY3Rp
b24gaW5wdXQ6ICIgKyBzdHJpbmdpZnkoaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIGxldCBoYW5kbGVyID0gQUNUSU9OX0hBTkRMRVJTW2FjdGlvbi5vcGVyYXRpb25dOwog
ICAgICAgIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSkgdGhyb3cgIlVuaGFuZGxlZCBvcGVyYXRp
b24gIiArIGFjdGlvbi5vcGVyYXRpb247CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29udGV4
dC5vdXRwdXQgPSBoYW5kbGVyKGNvbmNyZXRlSW5wdXRzLCBjb250ZXh0LmN1cnJlbnRUaGlzKTsK
ICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBzdWNjZWVkZWQsIG1hcmsgaXQgYXMgbm9uLWd1
YXJkZWQgc28gdGhhdCB3ZSBkb24ndCBlbWl0IHRyeS1jYXRjaCBibG9ja3MgZm9yIGl0IGxhdGVy
IG9uLgogICAgICAgICAgICAvLyBXZSBjb3VsZCBhbHRlcm5hdGl2ZWx5IG9ubHkgZG8gdGhhdCBp
ZiBhbGwgZXhlY3V0aW9ucyBzdWNjZWVkZWQsIGJ1dCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gZG8g
aXQgaWYgYXQgbGVhc3Qgb25lIGV4ZWN1dGlvbiBzdWNjZWVkZWQuCiAgICAgICAgICAgIGlmIChh
Y3Rpb24uaXNHdWFyZGVkKSBhY3Rpb24uaXNHdWFyZGVkID0gZmFsc2U7CiAgICAgICAgfSBjYXRj
aCAoZSkgewogICAgICAgICAgICByZXR1cm4gYWN0aW9uLmlzR3VhcmRlZDsKICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBKUyBBY3Rpb24gT3BlcmF0aW9uIGdyb3Vw
cy4gU2VlIGUuZy4gZXhwbG9yZU51bWJlcigpIGZvciBleGFtcGxlcyBvZiBob3cgdGhleSBhcmUg
dXNlZC4KICAgIGNvbnN0IFNISUZUX09QUyA9IFtPUF9MRUZUX1NISUZULCBPUF9TSUdORURfUklH
SFRfU0hJRlQsIE9QX1VOU0lHTkVEX1JJR0hUX1NISUZUXTsKICAgIC8vIFVuc2lnbmVkIHNoaWZ0
IGlzIG5vdCBkZWZpbmVkIGZvciBiaWdpbnRzLgogICAgY29uc3QgQklHSU5UX1NISUZUX09QUyA9
IFtPUF9MRUZUX1NISUZULCBPUF9TSUdORURfUklHSFRfU0hJRlRdOwogICAgY29uc3QgQklUV0lT
RV9PUFMgPSBbT1BfQklUV0lTRV9PUiwgT1BfQklUV0lTRV9BTkQsIE9QX0JJVFdJU0VfWE9SXTsK
ICAgIGNvbnN0IEFSSVRITUVUSUNfT1BTID0gW09QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX0RJ
ViwgT1BfTU9EXTsKICAgIGNvbnN0IFVOQVJZX09QUyA9IFtPUF9JTkMsIE9QX0RFQywgT1BfTkVH
LCBPUF9CSVRXSVNFX05PVF07CiAgICBjb25zdCBDT01QQVJJU09OX09QUyA9IFtPUF9DT01QQVJF
X0VRVUFMLCBPUF9DT01QQVJFX1NUUklDVF9FUVVBTCwgT1BfQ09NUEFSRV9OT1RfRVFVQUwsIE9Q
X0NPTVBBUkVfU1RSSUNUX05PVF9FUVVBTCwgT1BfQ09NUEFSRV9HUkVBVEVSX1RIQU4sIE9QX0NP
TVBBUkVfTEVTU19USEFOLCBPUF9DT01QQVJFX0dSRUFURVJfVEhBTl9PUl9FUVVBTCwgT1BfQ09N
UEFSRV9MRVNTX1RIQU5fT1JfRVFVQUxdOwogICAgY29uc3QgQk9PTEVBTl9CSU5BUllfT1BTID0g
W09QX0xPR0lDQUxfQU5ELCBPUF9MT0dJQ0FMX09SXTsKICAgIGNvbnN0IEJPT0xFQU5fVU5BUllf
T1BTID0gW09QX0xPR0lDQUxfTk9UXTsKICAgIC8vCiAgICAvLyBHbG9iYWwgY29uc3RhbnRzLgog
ICAgLy8KICAgIC8vIFByb3BlcnR5IG5hbWVzIHRvIHVzZSB3aGVuIGRlZmluaW5nIG5ldyBwcm9w
ZXJ0aWVzLiBTaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGVxdWl2YWxlbnQgc2V0IGlu
IEphdmFTY3JpcHRFbnZpcm9ubWVudC5zd2lmdAogICAgY29uc3QgY3VzdG9tUHJvcGVydHlOYW1l
cyA9IFsiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIl07CiAgICAvLyBNYXhp
bXVtIG51bWJlciBvZiBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbi9tZXRob2QgY2FsbHMuIEV2ZXJ5
dGhpbmcgYWJvdmUgdGhpcyBpcyBjb25zaWVyZWQgYW4gaW52YWxpZCAubGVuZ3RoIHByb3BlcnR5
IG9mIHRoZSBmdW5jdGlvbi4KICAgIGNvbnN0IE1BWF9QQVJBTUVURVJTID0gMTA7CiAgICAvLyBX
ZWxsIGtub3duIGludGVnZXIvbnVtYmVyIHZhbHVlcyB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIHJh
bmRvbSB2YWx1ZXMuCiAgICBjb25zdCBXRUxMX0tOT1dOX0lOVEVHRVJTID0gZmlsdGVyKFstOTIy
MzM3MjAzNjg1NDc3NTgwOCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcsIC05MDA3MTk5MjU0NzQwOTky
LCAtOTAwNzE5OTI1NDc0MDk5MSwgLTkwMDcxOTkyNTQ3NDA5OTAsIC00Mjk0OTY3Mjk3LCAtNDI5
NDk2NzI5NiwgLTQyOTQ5NjcyOTUsIC0yMTQ3NDgzNjQ5LCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2
NDcsIC0xMDczNzQxODI0LCAtNTM2ODcwOTEyLCAtMjY4NDM1NDU2LCAtNjU1MzcsIC02NTUzNiwg
LTY1NTM1LCAtNDA5NiwgLTEwMjQsIC0yNTYsIC0xMjgsIC0yLCAtMSwgMCwgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOSwgMTAsIDE2LCA2NCwgMTI3LCAxMjgsIDEyOSwgMjU1LCAyNTYsIDI1Nywg
NTEyLCAxMDAwLCAxMDI0LCA0MDk2LCAxMDAwMCwgNjU1MzUsIDY1NTM2LCA2NTUzNywgMjY4NDM1
NDM5LCAyNjg0MzU0NDAsIDI2ODQzNTQ0MSwgNTM2ODcwODg3LCA1MzY4NzA4ODgsIDUzNjg3MDg4
OSwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDEwNzM3NDE4MjMsIDEwNzM3NDE4
MjQsIDEwNzM3NDE4MjUsIDIxNDc0ODM2NDcsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDQyOTQ5
NjcyOTUsIDQyOTQ5NjcyOTYsIDQyOTQ5NjcyOTcsIDkwMDcxOTkyNTQ3NDA5OTAsIDkwMDcxOTky
NTQ3NDA5OTEsIDkwMDcxOTkyNTQ3NDA5OTIsIDkyMjMzNzIwMzY4NTQ3NzU4MDddLCBpc0ludGVn
ZXIpOwogICAgY29uc3QgV0VMTF9LTk9XTl9OVU1CRVJTID0gY29uY2F0KFdFTExfS05PV05fSU5U
RUdFUlMsIFstMWU2LCAtMWUzLCAtNS4wLCAtNC4wLCAtMy4wLCAtMi4wLCAtMS4wLCAtMC4wLCAw
LjAsIDEuMCwgMi4wLCAzLjAsIDQuMCwgNS4wLCAxZTMsIDFlNl0pOwogICAgY29uc3QgV0VMTF9L
Tk9XTl9CSUdJTlRTID0gWy05MjIzMzcyMDM2ODU0Nzc1ODA4biwgLTkyMjMzNzIwMzY4NTQ3NzU4
MDduLCAtOTAwNzE5OTI1NDc0MDk5Mm4sIC05MDA3MTk5MjU0NzQwOTkxbiwgLTkwMDcxOTkyNTQ3
NDA5OTBuLCAtNDI5NDk2NzI5N24sIC00Mjk0OTY3Mjk2biwgLTQyOTQ5NjcyOTVuLCAtMjE0NzQ4
MzY0OW4sIC0yMTQ3NDgzNjQ4biwgLTIxNDc0ODM2NDduLCAtMTA3Mzc0MTgyNG4sIC01MzY4NzA5
MTJuLCAtMjY4NDM1NDU2biwgLTY1NTM3biwgLTY1NTM2biwgLTY1NTM1biwgLTQwOTZuLCAtMTAy
NG4sIC0yNTZuLCAtMTI4biwgLTJuLCAtMW4sIDBuLCAxbiwgMm4sIDNuLCA0biwgNW4sIDZuLCA3
biwgOG4sIDluLCAxMG4sIDE2biwgNjRuLCAxMjduLCAxMjhuLCAxMjluLCAyNTVuLCAyNTZuLCAy
NTduLCA1MTJuLCAxMDAwbiwgMTAyNG4sIDQwOTZuLCAxMDAwMG4sIDY1NTM1biwgNjU1MzZuLCA2
NTUzN24sIDI2ODQzNTQzOW4sIDI2ODQzNTQ0MG4sIDI2ODQzNTQ0MW4sIDUzNjg3MDg4N24sIDUz
Njg3MDg4OG4sIDUzNjg3MDg4OW4sIDI2ODQzNTQ1Nm4sIDUzNjg3MDkxMm4sIDEwNzM3NDE4MjRu
LCAxMDczNzQxODIzbiwgMTA3Mzc0MTgyNG4sIDEwNzM3NDE4MjVuLCAyMTQ3NDgzNjQ3biwgMjE0
NzQ4MzY0OG4sIDIxNDc0ODM2NDluLCA0Mjk0OTY3Mjk1biwgNDI5NDk2NzI5Nm4sIDQyOTQ5Njcy
OTduLCA5MDA3MTk5MjU0NzQwOTkwbiwgOTAwNzE5OTI1NDc0MDk5MW4sIDkwMDcxOTkyNTQ3NDA5
OTJuLCA5MjIzMzcyMDM2ODU0Nzc1ODA3bl07CiAgICAvLwogICAgLy8gR2xvYmFsIHN0YXRlLgog
ICAgLy8KICAgIC8vIFRoZSBjb25jcmV0ZSBhcmd1bWVudCB2YWx1ZXMgdGhhdCB3aWxsIGJlIHVz
ZWQgd2hlbiBleGVjdXRpbmcgdGhlIEFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhwbG9yYXRpb24g
b3BlcmF0aW9uLgogICAgbGV0IGV4cGxvcmVBcmd1bWVudHM7CiAgICAvLyBUaGUgaW5wdXQgY29u
dGFpbmluZyB0aGUgdmFsdWUgYmVpbmcgZXhwbG9yZWQuIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0
aGUgZmlyc3QgaW5wdXQgdG8gZXZlcnkgQWN0aW9uIGNyZWF0ZWQgZHVyaW5nIGV4cGxvcmF0aW9u
LgogICAgbGV0IGV4cGxvcmVkVmFsdWVJbnB1dDsKICAgIC8vIFdoZXRoZXIgZXhwbG9yYXRpb24g
aXMgY3VycmVudGx5IGhhcHBlbmluZy4gVGhpcyBpcyByZXF1aXJlZCB0byBkZXRlY3QgcmVjdXJz
aXZlIGV4cGxvcmF0aW9uLCB3aGVyZSBmb3IgZXhhbXBsZSBhIGNhbGxiYWNrCiAgICAvLyB0cmln
Z2VyZWQgZHVyaW5nIHByb3BlcnR5IGVudW1lcmF0aW9uIHRyaWdnZXJzIGZ1cnRoZXIgZXhwbG9y
YXRpb24gY2FsbHMuIFNlZSBleHBsb3JlKCkuCiAgICBsZXQgY3VycmVudGx5RXhwbG9yaW5nID0g
ZmFsc2U7CiAgICAvLwogICAgLy8gRXJyb3IgYW5kIHJlc3VsdCByZXBvcnRpbmcuCiAgICAvLwog
ICAgLy8gUmVzdWx0cyAoaW5kZXhlZCBieSB0aGVpciBJRCkgd2lsbCBiZSBzdG9yZWQgaW4gaGVy
ZS4KICAgIGNvbnN0IHJlc3VsdHMgPSB7IF9fcHJvdG9fXzogbnVsbCB9OwogICAgZnVuY3Rpb24g
cmVwb3J0RXJyb3IobXNnKSB7CiAgICAgICAgZnV6emlsbGkoJ0ZVWlpJTExJX1BSSU5UJywgJ0VY
UExPUkVfRVJST1I6ICcgKyBtc2cpOwogICAgfQogICAgZnVuY3Rpb24gcmVjb3JkRmFpbHVyZShp
ZCkgewogICAgICAgIC8vIERlbGV0ZSB0aGUgcHJvcGVydHkgaWYgaXQgYWxyZWFkeSBleGlzdHMg
KGZyb20gcmVjb3JkQWN0aW9uKS4KICAgICAgICBkZWxldGUgcmVzdWx0c1tpZF07CiAgICAgICAg
ZGVmaW5lUHJvcGVydHkocmVzdWx0cywgaWQsIHtfX3Byb3RvX186IG51bGwsIHZhbHVlOiBOT19B
Q1RJT059KTsKICAgICAgICBmdXp6aWxsaSgnRlVaWklMTElfUFJJTlQnLCAnRVhQTE9SRV9GQUlM
VVJFOiAnICsgaWQpOwogICAgfQogICAgZnVuY3Rpb24gcmVjb3JkQWN0aW9uKGlkLCBhY3Rpb24p
IHsKICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkocmVzdWx0cywgaWQpKSB7CiAgICAgICAgICAg
IHRocm93ICJEdXBsaWNhdGUgYWN0aW9uIGZvciAiICsgaWQ7CiAgICAgICAgfQogICAgICAgIGlm
IChhY3Rpb24gPT09IE5PX0FDVElPTikgewogICAgICAgICAgICAvLyBUaGlzIGlzIGVxdWl2YWxl
bnQgdG8gYSBmYWlsdXJlLgogICAgICAgICAgICByZXR1cm4gcmVjb3JkRmFpbHVyZShpZCk7CiAg
ICAgICAgfQogICAgICAgIGFjdGlvbi5pZCA9IGlkOwogICAgICAgIC8vIFRoZXNlIGFyZSBjb25m
aWd1cmFibGUgYXMgdGhleSBtYXkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiAoYnkgcmVjb3JkRmFp
bHVyZSkgaW4gdGhlIGZ1dHVyZS4KICAgICAgICBkZWZpbmVQcm9wZXJ0eShyZXN1bHRzLCBpZCwg
e19fcHJvdG9fXzogbnVsbCwgdmFsdWU6IGFjdGlvbiwgY29uZmlndXJhYmxlOiB0cnVlfSk7CiAg
ICAgICAgZnV6emlsbGkoJ0ZVWlpJTExJX1BSSU5UJywgJ0VYUExPUkVfQUNUSU9OOiAnICsgc3Ry
aW5naWZ5KGFjdGlvbikpOwogICAgfQogICAgZnVuY3Rpb24gaGFzQWN0aW9uRm9yKGlkKSB7CiAg
ICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5KHJlc3VsdHMsIGlkKTsKICAgIH0KICAgIGZ1bmN0
aW9uIGdldEFjdGlvbkZvcihpZCkgewogICAgICAgIHJldHVybiByZXN1bHRzW2lkXTsKICAgIH0K
ICAgIC8vCiAgICAvLyBBY2Nlc3MgdG8gcmFuZG9tIGlucHV0cy4KICAgIC8vCiAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgcHJlZmVyIHRvIHRha2UgYW4gZXhpc3RpbmcgdmFyaWFibGUgZnJvbSB0aGUg
YXJndW1lbnRzIHRvIHRoZSBFeHBsb3JlIG9wZXJhdGlvbnMgaWYgaXQgc2F0aXN0aWZlcyB0aGUg
c3BlY2lmaWVkIGNyaXRlcmlhLiBPdGhlcndpc2UsIHRoZXkgZ2VuZXJhdGUgYSBuZXcgcmFuZG9t
IHZhbHVlLgogICAgLy8gVGVzdGluZyB3aGV0aGVyIGFuIGFyZ3VtZW50IHNhdGlzZmllcyBzb21l
IGNyaXRlcmlhIChlLmcuIGJlIGEgdmFsdWUgaW4gYSBjZXJ0YWluIHJhbmdlKSBtYXkgdHJpZ2dl
ciB0eXBlIGNvbnZlcnNpb25zLiBUaGlzIGlzIGV4cGVjdGVkIGFzIGl0IG1heSBsZWFkIHRvIGlu
dGVyZXN0aW5nIHZhbHVlcyBiZWluZyB1c2VkLgogICAgLy8gVGhlc2UgYXJlIGdyb3VwZWQgaW50
byBhIG5hbWVzcGFjZSBvYmplY3QgdG8gbWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhleSByZXR1
cm4gYW4gSW5wdXQgb2JqZWN0IChmcm9tIG9uZSBvZiB0aGUgYWJvdmUgY29uc3RydWN0b3JzKSwg
cmF0aGVyIHRoYW4gYSB2YWx1ZS4KICAgIC8vCiAgICBsZXQgSW5wdXRzID0gewogICAgICAgIHJh
bmRvbUFyZ3VtZW50KCkgewogICAgICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50SW5wdXQocmFu
ZG9tSW50QmVsb3coZXhwbG9yZUFyZ3VtZW50cy5sZW5ndGgpKTsKICAgICAgICB9LAogICAgICAg
IHJhbmRvbUFyZ3VtZW50cyhuKSB7CiAgICAgICAgICAgIGxldCBhcmdzID0gRW1wdHlBcnJheSgp
OwogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAg
ICAgcHVzaChhcmdzLCBuZXcgQXJndW1lbnRJbnB1dChyYW5kb21JbnRCZWxvdyhleHBsb3JlQXJn
dW1lbnRzLmxlbmd0aCkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXJnczsK
ICAgICAgICB9LAogICAgICAgIHJhbmRvbUFyZ3VtZW50Rm9yUmVwbGFjaW5nKHByb3BlcnR5TmFt
ZSwgb2JqKSB7CiAgICAgICAgICAgIGxldCBjdXJWYWx1ZSA9IHRyeUdldFByb3BlcnR5KHByb3Bl
cnR5TmFtZSwgb2JqKTsKICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGN1clZhbHVlKSkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIElucHV0cy5yYW5kb21Bcmd1bWVudCgpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShhcmcpIHsKICAgICAgICAgICAg
ICAgIGxldCBzYW1lVHlwZSA9IHR5cGVvZiBjdXJWYWx1ZSA9PT0gdHlwZW9mIGFyZzsKICAgICAg
ICAgICAgICAgIGlmIChzYW1lVHlwZSAmJiBpc09iamVjdChjdXJWYWx1ZSkpIHsKICAgICAgICAg
ICAgICAgICAgICBzYW1lVHlwZSA9IGFyZyBpbnN0YW5jZW9mIGN1clZhbHVlLmNvbnN0cnVjdG9y
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHNhbWVUeXBlOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGxldCBpZHggPSBmaW5kSW5kZXgoZXhwbG9yZUFyZ3VtZW50
cywgd3JhcEluVHJ5Q2F0Y2goaXNDb21wYXRpYmxlKSk7CiAgICAgICAgICAgIGlmIChpZHggIT0g
LTEpIHJldHVybiBuZXcgQXJndW1lbnRJbnB1dChpZHgpOwogICAgICAgICAgICByZXR1cm4gSW5w
dXRzLnJhbmRvbUFyZ3VtZW50KCk7CiAgICAgICAgfSwKICAgICAgICByYW5kb21JbnQoKSB7CiAg
ICAgICAgICAgIGxldCBpZHggPSBmaW5kSW5kZXgoZXhwbG9yZUFyZ3VtZW50cywgaXNJbnRlZ2Vy
KTsKICAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkgcmV0dXJuIG5ldyBBcmd1bWVudElucHV0KGlk
eCk7CiAgICAgICAgICAgIHJldHVybiBuZXcgSW50SW5wdXQocmFuZG9tRWxlbWVudChXRUxMX0tO
T1dOX0lOVEVHRVJTKSk7CiAgICAgICAgfSwKICAgICAgICByYW5kb21OdW1iZXIoKSB7CiAgICAg
ICAgICAgIGxldCBpZHggPSBmaW5kSW5kZXgoZXhwbG9yZUFyZ3VtZW50cywgaXNOdW1iZXIpOwog
ICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSByZXR1cm4gbmV3IEFyZ3VtZW50SW5wdXQoaWR4KTsK
ICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdElucHV0KHJhbmRvbUVsZW1lbnQoV0VMTF9LTk9X
Tl9OVU1CRVJTKSk7CiAgICAgICAgfSwKICAgICAgICByYW5kb21CaWdpbnQoKSB7CiAgICAgICAg
ICAgIGxldCBpZHggPSBmaW5kSW5kZXgoZXhwbG9yZUFyZ3VtZW50cywgaXNCaWdpbnQpOwogICAg
ICAgICAgICBpZiAoaWR4ICE9IC0xKSByZXR1cm4gbmV3IEFyZ3VtZW50SW5wdXQoaWR4KTsKICAg
ICAgICAgICAgcmV0dXJuIG5ldyBCaWdpbnRJbnB1dChyYW5kb21FbGVtZW50KFdFTExfS05PV05f
QklHSU5UUykpOwogICAgICAgIH0sCiAgICAgICAgcmFuZG9tSW50QmV0d2VlbihzdGFydCwgZW5k
KSB7CiAgICAgICAgICAgIGlmICghaXNJbnRlZ2VyKHN0YXJ0KSB8fCAhaXNJbnRlZ2VyKGVuZCkp
IHRocm93ICJBcmd1bWVudHMgdG8gcmFuZG9tSW50QmV0d2VlbiBtdXN0IGJlIGludGVnZXJzIjsK
ICAgICAgICAgICAgbGV0IGlkeCA9IGZpbmRJbmRleChleHBsb3JlQXJndW1lbnRzLCB3cmFwSW5U
cnlDYXRjaCgoZSkgPT4gTnVtYmVySXNJbnRlZ2VyKGUpICYmIChlID49IHN0YXJ0KSAmJiAoZSA8
IGVuZCkpKTsKICAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkgcmV0dXJuIG5ldyBBcmd1bWVudElu
cHV0KGlkeCk7CiAgICAgICAgICAgIHJldHVybiBuZXcgSW50SW5wdXQocmFuZG9tSW50QmV0d2Vl
bihzdGFydCwgZW5kKSk7CiAgICAgICAgfSwKICAgICAgICByYW5kb21CaWdpbnRCZXR3ZWVuKHN0
YXJ0LCBlbmQpIHsKICAgICAgICAgICAgaWYgKCFpc0JpZ2ludChzdGFydCkgfHwgIWlzQmlnaW50
KGVuZCkpIHRocm93ICJBcmd1bWVudHMgdG8gcmFuZG9tQmlnaW50QmV0d2VlbiBtdXN0IGJlIGJp
Z2ludHMiOwogICAgICAgICAgICBpZiAoIWlzSW50ZWdlcihOdW1iZXIoc3RhcnQpKSB8fCAhaXNJ
bnRlZ2VyKE51bWJlcihlbmQpKSkgdGhyb3cgIkFyZ3VtZW50cyB0byByYW5kb21CaWdpbnRCZXR3
ZWVuIG11c3QgYmUgcmVwcmVzZW50YWJsZSBhcyByZWd1bGFyIGludGVnZXJzIjsKICAgICAgICAg
ICAgbGV0IGlkeCA9IGZpbmRJbmRleChleHBsb3JlQXJndW1lbnRzLCB3cmFwSW5UcnlDYXRjaCgo
ZSkgPT4gKGUgPj0gc3RhcnQpICYmIChlIDwgZW5kKSkpOwogICAgICAgICAgICBpZiAoaWR4ICE9
IC0xKSByZXR1cm4gbmV3IEFyZ3VtZW50SW5wdXQoaWR4KTsKICAgICAgICAgICAgcmV0dXJuIG5l
dyBCaWdpbnRJbnB1dChyYW5kb21CaWdpbnRCZXR3ZWVuKHN0YXJ0LCBlbmQpKTsKICAgICAgICB9
LAogICAgICAgIHJhbmRvbU51bWJlckNsb3NlVG8odikgewogICAgICAgICAgICBpZiAoIWlzRmlu
aXRlKHYpKSB0aHJvdyAiQXJndW1lbnQgdG8gcmFuZG9tTnVtYmVyQ2xvc2VUbyBpcyBub3QgYSBm
aW5pdGUgbnVtYmVyOiAiICsgdjsKICAgICAgICAgICAgbGV0IGlkeCA9IGZpbmRJbmRleChleHBs
b3JlQXJndW1lbnRzLCB3cmFwSW5UcnlDYXRjaCgoZSkgPT4gKGUgPj0gdiAtIDEwKSAmJiAoZSA8
PSB2ICsgMTApKSk7CiAgICAgICAgICAgIGlmIChpZHggIT0gLTEpIHJldHVybiBuZXcgQXJndW1l
bnRJbnB1dChpZHgpOwogICAgICAgICAgICBsZXQgc3RlcCA9IHJhbmRvbUludEJldHdlZW4oLTEw
LCAxMCk7CiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHYgKyBzdGVwOwogICAgICAgICAgICBpZiAo
aXNJbnRlZ2VyKHZhbHVlKSkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgSW50SW5wdXQodmFs
dWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXRJ
bnB1dCh2ICsgc3RlcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJhbmRvbUJp
Z2ludENsb3NlVG8odikgewogICAgICAgICAgICBpZiAoIWlzQmlnaW50KHYpKSB0aHJvdyAiQXJn
dW1lbnQgdG8gcmFuZG9tQmlnaW50Q2xvc2VUbyBpcyBub3QgYSBiaWdpbnQ6ICIgKyB2OwogICAg
ICAgICAgICBsZXQgaWR4ID0gZmluZEluZGV4KGV4cGxvcmVBcmd1bWVudHMsIHdyYXBJblRyeUNh
dGNoKChlKSA9PiAoZSA+PSB2IC0gMTBuKSAmJiAoZSA8PSB2ICsgMTBuKSkpOwogICAgICAgICAg
ICBpZiAoaWR4ICE9IC0xKSByZXR1cm4gbmV3IEFyZ3VtZW50SW5wdXQoaWR4KTsKICAgICAgICAg
ICAgbGV0IHN0ZXAgPSByYW5kb21CaWdpbnRCZXR3ZWVuKC0xMG4sIDEwbik7CiAgICAgICAgICAg
IGxldCB2YWx1ZSA9IHYgKyBzdGVwOwogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ2ludElucHV0
KHZhbHVlKTsKICAgICAgICB9CiAgICB9CiAgICAvLyBIZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdo
ZW4gYSBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZCBhcyBhIGNvbnN0cnVjdG9yLiBVc2VkIGJ5
IHRoZSBvYmplY3QgYW5kIGZ1bmN0aW9uIGV4cGxvcmF0aW9uIGNvZGUuCiAgICBmdW5jdGlvbiBz
aG91bGRUcmVhdEFzQ29uc3RydWN0b3IoZikgewogICAgICAgIGxldCBuYW1lID0gdHJ5R2V0UHJv
cGVydHkoJ25hbWUnLCBmKTsKICAgICAgICAvLyBJZiB0aGUgZnVuY3Rpb24gaGFzIG5vIG5hbWUg
KG9yIGEgbm9uLXN0cmluZyBuYW1lKSwgaXQncyBwcm9iYWJseSBhIHJlZ3VsYXIgZnVuY3Rpb24g
KG9yIHNvbWV0aGluZyBsaWtlIGFuIGFycm93IGZ1bmN0aW9uKS4KICAgICAgICBpZiAoIWlzU3Ry
aW5nKG5hbWUpIHx8IG5hbWUubGVuZ3RoIDwgMSkgewogICAgICAgICAgICByZXR1cm4gcHJvYmFi
aWxpdHkoMC4xKTsKICAgICAgICB9CiAgICAgICAgLy8gSWYgdGhlIG5hbWUgaXMgc29tZXRoaW5n
IGxpa2UgYGY0MmAsIGl0J3MgcHJvYmFibHkgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IEZ1enppbGxp
LiBUaGVzZSBjYW4gdHlwaWNhbGwgYmUgdXNlZCBhcyBmdW5jdGlvbiBvciBjb25zdHJ1Y3Rvciwg
YnV0IHByZWZlciB0byBjYWxsIHRoZW0gYXMgcmVndWxhciBmdW5jdGlvbnMuCiAgICAgICAgaWYg
KG5hbWVbMF0gPT09ICdmJyAmJiAhaXNOYU4ocGFyc2VJbnRlZ2VyKHN0cmluZ1NsaWNlKG5hbWUs
IDEpKSkpIHsKICAgICAgICAgIHJldHVybiBwcm9iYWJpbGl0eSgwLjIpOwogICAgICAgIH0KICAg
ICAgICAvLyBPdGhlcndpc2UsIHRoZSBiYXNpYyBoZXVyaXN0aWMgaXMgdGhhdCBmdW5jdGlvbnMg
dGhhdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIgKGUuZy4gT2JqZWN0LCBVaW50OEFy
cmF5LCBldGMuKSBhcmUgcHJvYmFibHkgY29uc3RydWN0b3JzIChidXQgbm90IGFsd2F5cywgZS5n
LiBCaWdJbnQpLgogICAgICAgIC8vIFRoaXMgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggRnV6emls
bGkncyBsaWZ0aW5nIG9mIGNsYXNzZXMsIGFzIHRoZXkgd2lsbCBsb29rIHNvbWV0aGluZyBsaWtl
IHRoaXM6IGBjbGFzcyBWMyB7IC4uLmAuCiAgICAgICAgaWYgKG5hbWVbMF0gPT09IHRvVXBwZXJD
YXNlKG5hbWVbMF0pKSB7CiAgICAgICAgICByZXR1cm4gcHJvYmFiaWxpdHkoMC45KTsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHByb2JhYmlsaXR5KDAuMSk7CiAgICAgICAgfQog
ICAgfQogICAgLy8KICAgIC8vIEV4cGxvcmUgaW1wbGVtZW50YXRpb24gZm9yIGRpZmZlcmVudCBi
YXNpYyB0eXBlcy4KICAgIC8vCiAgICAvLyBUaGVzZSBhbGwgcmV0dXJuIGFuIEFjdGlvbiBvYmpl
Y3Qgb3IgdGhlIHNwZWNpYWwgTk9fQUNUSU9OIHZhbHVlIChudWxsKS4KICAgIC8vCiAgICBmdW5j
dGlvbiBleHBsb3JlT2JqZWN0KG8pIHsKICAgICAgICBpZiAobyA9PT0gbnVsbCkgewogICAgICAg
ICAgICByZXR1cm4gZXhwbG9yZU51bGxpc2gobyk7CiAgICAgICAgfQogICAgICAgIC8vIFRPRE86
IEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBBcnJheUJ1ZmZlcnM6IG1vc3Qgb2YgdGhlIHRpbWUs
IHdyYXAgdGhlc2UgaW50byBhIFVpbnQ4QXJyYXkgdG8gYmUgYWJsZSB0byBtb2RpZnkgdGhlbS4K
ICAgICAgICAvLyBUT0RPOiBTb21ldGltZXMgaXRlcmF0ZSBvdmVyIGl0ZXJhYmxlIG9iamVjdHMg
KGUuZy4gQXJyYXlzKT8KICAgICAgICAvLyBEZXRlcm1pbmUgYSByYW5kb20gcHJvcGVydHksIHdo
aWNoIGNhbiBnZW5lcmFsbHkgZWl0aGVyIGJlIGEgbWV0aG9kLCBhbiBlbGVtZW50LCBvciBhICJy
ZWd1bGFyIiBwcm9wZXJ0eS4KICAgICAgICBsZXQgcHJvcGVydHlOYW1lID0gcmFuZG9tUHJvcGVy
dHlPZihvKTsKICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiB0byBw
ZXJmb3JtIGdpdmVuIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eS4KICAgICAgICAvLyBJZiB0aGUgcHJv
cGVydHkgbG9va3VwIGZhaWxlZCAoZm9yIHdoYXRldmVyIHJlYXNvbiksIHdlIGFsd2F5cyBkZWZp
bmUgYSBuZXcgcHJvcGVydHkuCiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gbnVsbCkgewog
ICAgICAgICAgICBsZXQgcHJvcGVydHlOYW1lSW5wdXQgPSBuZXcgU3RyaW5nSW5wdXQocmFuZG9t
RWxlbWVudChjdXN0b21Qcm9wZXJ0eU5hbWVzKSk7CiAgICAgICAgICAgIHJldHVybiBuZXcgQWN0
aW9uKE9QX1NFVF9QUk9QRVJUWSwgW2V4cGxvcmVkVmFsdWVJbnB1dCwgcHJvcGVydHlOYW1lSW5w
dXQsIElucHV0cy5yYW5kb21Bcmd1bWVudCgpXSk7CiAgICAgICAgfSBlbHNlIGlmIChpc0ludGVn
ZXIocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICBsZXQgcHJvcGVydHlOYW1lSW5wdXQgPSBu
ZXcgSW50SW5wdXQocHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgaWYgKHByb2JhYmlsaXR5KDAu
NSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aW9uKE9QX0dFVF9QUk9QRVJUWSwg
W2V4cGxvcmVkVmFsdWVJbnB1dCwgcHJvcGVydHlOYW1lSW5wdXRdKTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IElucHV0cy5yYW5kb21Bcmd1bWVu
dEZvclJlcGxhY2luZyhwcm9wZXJ0eU5hbWUsIG8pOwogICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyBBY3Rpb24oT1BfU0VUX1BST1BFUlRZLCBbZXhwbG9yZWRWYWx1ZUlucHV0LCBwcm9wZXJ0eU5h
bWVJbnB1dCwgbmV3VmFsdWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNT
dHJpbmcocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICBsZXQgcHJvcGVydHlOYW1lSW5wdXQg
PSBuZXcgU3RyaW5nSW5wdXQocHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgbGV0IHByb3BlcnR5
VmFsdWUgPSB0cnlHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG8pOwogICAgICAgICAgICBpZiAo
aXNGdW5jdGlvbihwcm9wZXJ0eVZhbHVlKSkgewogICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBh
IG1ldGhvZCBjYWxsL2NvbnN0cnVjdC4KICAgICAgICAgICAgICAgIGxldCBudW1QYXJhbWV0ZXJz
ID0gdHJ5R2V0UHJvcGVydHkoJ2xlbmd0aCcsIHByb3BlcnR5VmFsdWUpOwogICAgICAgICAgICAg
ICAgaWYgKCFpc0ludGVnZXIobnVtUGFyYW1ldGVycykgfHwgbnVtUGFyYW1ldGVycyA+IE1BWF9Q
QVJBTUVURVJTIHx8IG51bVBhcmFtZXRlcnMgPCAwKSByZXR1cm4gTk9fQUNUSU9OOwogICAgICAg
ICAgICAgICAgbGV0IGlucHV0cyA9IEVtcHR5QXJyYXkoKTsKICAgICAgICAgICAgICAgIHB1c2go
aW5wdXRzLCBleHBsb3JlZFZhbHVlSW5wdXQpOwogICAgICAgICAgICAgICAgcHVzaChpbnB1dHMs
IHByb3BlcnR5TmFtZUlucHV0KTsKICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
bnVtUGFyYW1ldGVyczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaChpbnB1dHMsIElu
cHV0cy5yYW5kb21Bcmd1bWVudCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGlmIChzaG91bGRUcmVhdEFzQ29uc3RydWN0b3IocHJvcGVydHlWYWx1ZSkpIHsKICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBHdWFyZGVkQWN0aW9uKE9QX0NPTlNUUlVDVF9NRVRIT0QsIGlu
cHV0cyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IEd1YXJkZWRBY3Rpb24oT1BfQ0FMTF9NRVRIT0QsIGlucHV0cyk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGEgcHJv
cGVydHkgYWNjZXNzLgogICAgICAgICAgICAgICAgLy8gQmVzaWRlcyBnZXR0aW5nIGFuZCBzZXR0
aW5nIHRoZSBwcm9wZXJ0eSwgd2UgYWxzbyBzb21ldGltZXMgZGVmaW5lIGEgbmV3IHByb3BlcnR5
IGluc3RlYWQuCiAgICAgICAgICAgICAgICBpZiAocHJvYmFiaWxpdHkoMS8zKSkgewogICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZUlucHV0ID0gbmV3IFN0cmluZ0lucHV0KHJhbmRvbUVs
ZW1lbnQoY3VzdG9tUHJvcGVydHlOYW1lcykpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgQWN0aW9uKE9QX1NFVF9QUk9QRVJUWSwgW2V4cGxvcmVkVmFsdWVJbnB1dCwgcHJvcGVydHlO
YW1lSW5wdXQsIElucHV0cy5yYW5kb21Bcmd1bWVudCgpXSk7CiAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHByb2JhYmlsaXR5KDAuNSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IEFjdGlvbihPUF9HRVRfUFJPUEVSVFksIFtleHBsb3JlZFZhbHVlSW5wdXQsIHByb3BlcnR5TmFt
ZUlucHV0XSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxl
dCBuZXdWYWx1ZSA9IElucHV0cy5yYW5kb21Bcmd1bWVudEZvclJlcGxhY2luZyhwcm9wZXJ0eU5h
bWUsIG8pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aW9uKE9QX1NFVF9QUk9Q
RVJUWSwgW2V4cGxvcmVkVmFsdWVJbnB1dCwgcHJvcGVydHlOYW1lSW5wdXQsIG5ld1ZhbHVlXSk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgdGhyb3cgIkdvdCB1bmV4cGVjdGVkIHByb3BlcnR5IG5hbWUgZnJvbSBJbnB1dHMucmFuZG9t
UHJvcGVydHlPZigpOiAiICsgcHJvcGVydHlOYW1lOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0
aW9uIGV4cGxvcmVGdW5jdGlvbihmKSB7CiAgICAgICAgLy8gU29tZXRpbWVzIHRyZWF0IGZ1bmN0
aW9ucyBhcyBvYmplY3RzLgogICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBpbnRlcmVzdGluZyBw
cm9wZXJ0aWVzIGxpa2UgJ2FyZ3VtZW50cycgb3IgJ3Byb3RvdHlwZScgdG8gYmUgYWNjZXNzZWQs
IG1ldGhvZHMgbGlrZSAnYXBwbHknIG9yICdiaW5kJyB0byBiZSBjYWxsZWQsIGFuZCBtZXRob2Rz
IG9uIGJ1aWx0aW4gY29uc3RydWN0b3JzIGxpa2UgJ0FycmF5JywgYW5kICdPYmplY3QnIHRvIGJl
IHVzZWQuCiAgICAgICAgaWYgKHByb2JhYmlsaXR5KDAuNSkpIHsKICAgICAgICAgICAgcmV0dXJu
IGV4cGxvcmVPYmplY3QoZik7CiAgICAgICAgfQogICAgICAgIC8vIE90aGVyd2lzZSwgY2FsbCBv
ciBjb25zdHJ1Y3QgdGhlIGZ1bmN0aW9uL2NvbnN0cnVjdG9yLgogICAgICAgIGxldCBudW1QYXJh
bWV0ZXJzID0gdHJ5R2V0UHJvcGVydHkoJ2xlbmd0aCcsIGYpOwogICAgICAgIGlmICghaXNJbnRl
Z2VyKG51bVBhcmFtZXRlcnMpIHx8IG51bVBhcmFtZXRlcnMgPiBNQVhfUEFSQU1FVEVSUyB8fCBu
dW1QYXJhbWV0ZXJzIDwgMCkgewogICAgICAgICAgICBudW1QYXJhbWV0ZXJzID0gMDsKICAgICAg
ICB9CiAgICAgICAgbGV0IGlucHV0cyA9IEVtcHR5QXJyYXkoKTsKICAgICAgICBwdXNoKGlucHV0
cywgZXhwbG9yZWRWYWx1ZUlucHV0KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBh
cmFtZXRlcnM7IGkrKykgewogICAgICAgICAgICBwdXNoKGlucHV0cywgSW5wdXRzLnJhbmRvbUFy
Z3VtZW50KCkpOwogICAgICAgIH0KICAgICAgICBsZXQgb3BlcmF0aW9uID0gc2hvdWxkVHJlYXRB
c0NvbnN0cnVjdG9yKGYpID8gT1BfQ09OU1RSVUNUIDogT1BfQ0FMTF9GVU5DVElPTjsKICAgICAg
ICByZXR1cm4gbmV3IEd1YXJkZWRBY3Rpb24ob3BlcmF0aW9uLCBpbnB1dHMpOwogICAgfQogICAg
ZnVuY3Rpb24gZXhwbG9yZVN0cmluZyhzKSB7CiAgICAgICAgLy8gU29tZXRpbWVzIChyYXJlbHkp
IGNvbXBhcmUgdGhlIHN0cmluZyBhZ2FpbnN0IGl0J3Mgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lz
ZSwgdHJlYXQgdGhlIHN0cmluZyBhcyBhbiBvYmplY3QuCiAgICAgICAgLy8gVE9ETzogc29tZXRp
bWVzIGFjY2VzcyBhIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIG9yIGl0ZXJhdGUgb3ZlciBpdD8K
ICAgICAgICBpZiAocHJvYmFiaWxpdHkoMC4xKSAmJiBpc1NpbXBsZVN0cmluZyhzKSkgewogICAg
ICAgICAgICByZXR1cm4gbmV3IEFjdGlvbihPUF9DT01QQVJFX0VRVUFMLCBbZXhwbG9yZWRWYWx1
ZUlucHV0LCBuZXcgU3RyaW5nSW5wdXQocyldKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICByZXR1cm4gZXhwbG9yZU9iamVjdChuZXcgU3RyaW5nKHMpKTsKICAgICAgICB9CiAgICB9CiAg
ICBjb25zdCBBTExfTlVNQkVSX09QRVJBVElPTlMgPSBjb25jYXQoU0hJRlRfT1BTLCBCSVRXSVNF
X09QUywgQVJJVEhNRVRJQ19PUFMsIFVOQVJZX09QUyk7CiAgICBjb25zdCBBTExfTlVNQkVSX09Q
RVJBVElPTlNfQU5EX0NPTVBBUklTT05TID0gY29uY2F0KEFMTF9OVU1CRVJfT1BFUkFUSU9OUywg
Q09NUEFSSVNPTl9PUFMpOwogICAgZnVuY3Rpb24gZXhwbG9yZU51bWJlcihuKSB7CiAgICAgICAg
Ly8gU29tZXdoYXQgYXJiaXRyYXJpbHkgZ2l2ZSBjb21wYXJpc29ucyBhIGxvd2VyIHByb2JhYmls
aXR5IHdoZW4gY2hvb3NpbmcgdGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtLgogICAgICAgIGxldCBv
cGVyYXRpb24gPSByYW5kb21FbGVtZW50KHByb2JhYmlsaXR5KDAuNSkgPyBBTExfTlVNQkVSX09Q
RVJBVElPTlMgOiBBTExfTlVNQkVSX09QRVJBVElPTlNfQU5EX0NPTVBBUklTT05TKTsKICAgICAg
ICBsZXQgYWN0aW9uID0gbmV3IEFjdGlvbihvcGVyYXRpb24pOwogICAgICAgIHB1c2goYWN0aW9u
LmlucHV0cywgZXhwbG9yZWRWYWx1ZUlucHV0KTsKICAgICAgICBpZiAoaW5jbHVkZXMoQ09NUEFS
SVNPTl9PUFMsIG9wZXJhdGlvbikpIHsKICAgICAgICAgICAgaWYgKGlzTmFOKG4pKSB7CiAgICAg
ICAgICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHJlZ3VsYXIgY29tcGFyaXNvbnMgZG9uJ3QgbWFr
ZSBzZW5zZSwgc28ganVzdCB0ZXN0IGZvciBpc05hTiBpbnN0ZWFkLgogICAgICAgICAgICAgICAg
YWN0aW9uLm9wZXJhdGlvbiA9IE9QX1RFU1RfSVNfTkFOOwogICAgICAgICAgICB9IGVsc2UgaWYg
KCFpc0Zpbml0ZShuKSkgewogICAgICAgICAgICAgICAgLy8gU2ltaWxhciB0byB0aGUgTmFOIGNh
c2UsIGp1c3QgdGVzdCBmb3IgaXNGaW5pdGUgaGVyZS4KICAgICAgICAgICAgICAgIGFjdGlvbi5v
cGVyYXRpb24gPSBPUF9URVNUX0lTX0ZJTklURTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIHB1c2goYWN0aW9uLmlucHV0cywgSW5wdXRzLnJhbmRvbU51bWJlckNsb3NlVG8o
bikpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlcyhTSElGVF9PUFMs
IG9wZXJhdGlvbikpIHsKICAgICAgICAgICAgcHVzaChhY3Rpb24uaW5wdXRzLCBJbnB1dHMucmFu
ZG9tSW50QmV0d2VlbigxLCAzMikpOwogICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoQklUV0lT
RV9PUFMsIG9wZXJhdGlvbikpIHsKICAgICAgICAgICAgcHVzaChhY3Rpb24uaW5wdXRzLCBJbnB1
dHMucmFuZG9tSW50KCkpOwogICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoQVJJVEhNRVRJQ19P
UFMsIG9wZXJhdGlvbikpIHsKICAgICAgICAgICAgaWYgKGlzSW50ZWdlcihuKSkgewogICAgICAg
ICAgICAgICAgcHVzaChhY3Rpb24uaW5wdXRzLCBJbnB1dHMucmFuZG9tSW50KCkpOwogICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcHVzaChhY3Rpb24uaW5wdXRzLCBJbnB1dHMu
cmFuZG9tTnVtYmVyKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBh
Y3Rpb247CiAgICB9CiAgICBjb25zdCBBTExfQklHSU5UX09QRVJBVElPTlMgPSBjb25jYXQoQklH
SU5UX1NISUZUX09QUywgQklUV0lTRV9PUFMsIEFSSVRITUVUSUNfT1BTLCBVTkFSWV9PUFMpOwog
ICAgY29uc3QgQUxMX0JJR0lOVF9PUEVSQVRJT05TX0FORF9DT01QQVJJU09OUyA9IGNvbmNhdChB
TExfQklHSU5UX09QRVJBVElPTlMsIENPTVBBUklTT05fT1BTKTsKICAgIGZ1bmN0aW9uIGV4cGxv
cmVCaWdpbnQoYikgewogICAgICAgIC8vIFNvbWV3aGF0IGFyYml0cmFyaWx5IGdpdmUgY29tcGFy
aXNvbnMgYSBsb3dlciBwcm9iYWJpbGl0eSB3aGVuIGNob29zaW5nIHRoZSBvcGVyYXRpb24gdG8g
cGVyZm9ybS4KICAgICAgICBsZXQgb3BlcmF0aW9uID0gcmFuZG9tRWxlbWVudChwcm9iYWJpbGl0
eSgwLjUpID8gQUxMX0JJR0lOVF9PUEVSQVRJT05TIDogQUxMX0JJR0lOVF9PUEVSQVRJT05TX0FO
RF9DT01QQVJJU09OUyk7CiAgICAgICAgbGV0IGFjdGlvbiA9IG5ldyBBY3Rpb24ob3BlcmF0aW9u
KTsKICAgICAgICBwdXNoKGFjdGlvbi5pbnB1dHMsIGV4cGxvcmVkVmFsdWVJbnB1dCk7CiAgICAg
ICAgaWYgKGluY2x1ZGVzKENPTVBBUklTT05fT1BTLCBvcGVyYXRpb24pKSB7CiAgICAgICAgICAg
IHB1c2goYWN0aW9uLmlucHV0cywgSW5wdXRzLnJhbmRvbUJpZ2ludENsb3NlVG8oYikpOwogICAg
ICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoQklHSU5UX1NISUZUX09QUywgb3BlcmF0aW9uKSkgewog
ICAgICAgICAgICBwdXNoKGFjdGlvbi5pbnB1dHMsIElucHV0cy5yYW5kb21CaWdpbnRCZXR3ZWVu
KDFuLCAxMjhuKSk7CiAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlcyhCSVRXSVNFX09QUywgb3Bl
cmF0aW9uKSB8fCBpbmNsdWRlcyhBUklUSE1FVElDX09QUywgb3BlcmF0aW9uKSkgewogICAgICAg
ICAgICBwdXNoKGFjdGlvbi5pbnB1dHMsIElucHV0cy5yYW5kb21CaWdpbnQoKSk7CiAgICAgICAg
fQogICAgICAgIHJldHVybiBhY3Rpb247CiAgICB9CiAgICBmdW5jdGlvbiBleHBsb3JlU3ltYm9s
KHMpIHsKICAgICAgICAvLyBMb29rdXAgb3IgaW5zZXJ0IHRoZSBzeW1ib2wgaW50byB0aGUgZ2xv
YmFsIHN5bWJvbCByZWdpc3RyeS4gVGhpcyB3aWxsIGFsc28gYWxsb3cgc3RhdGljIHR5cGluZyBv
ZiB0aGUgb3V0cHV0LgogICAgICAgIHJldHVybiBuZXcgQWN0aW9uKE9QX1NZTUJPTF9SRUdJU1RS
QVRJT04sIFtleHBsb3JlZFZhbHVlSW5wdXRdKTsKICAgIH0KICAgIGNvbnN0IEFMTF9CT09MRUFO
X09QRVJBVElPTlMgPSBjb25jYXQoQk9PTEVBTl9CSU5BUllfT1BTLCBCT09MRUFOX1VOQVJZX09Q
Uyk7CiAgICBmdW5jdGlvbiBleHBsb3JlQm9vbGVhbihiKSB7CiAgICAgICAgbGV0IG9wZXJhdGlv
biA9IHJhbmRvbUVsZW1lbnQoQUxMX0JPT0xFQU5fT1BFUkFUSU9OUyk7CiAgICAgICAgbGV0IGFj
dGlvbiA9IG5ldyBBY3Rpb24ob3BlcmF0aW9uKTsKICAgICAgICBwdXNoKGFjdGlvbi5pbnB1dHMs
IGV4cGxvcmVkVmFsdWVJbnB1dCk7CiAgICAgICAgaWYgKGluY2x1ZGVzKEJPT0xFQU5fQklOQVJZ
X09QUywgb3BlcmF0aW9uKSkgewogICAgICAgICAgICAvLyBJdCBwcm9iYWJseSBkb2Vzbid0IG1h
a2Ugc2Vuc2UgdG8gaGFyZGNvZGUgYm9vbGVhbiBjb25zdGFudHMsIHNvIGFsd2F5cyB1c2UgYW4g
ZXhpc3RpbmcgYXJndW1lbnQuCiAgICAgICAgICAgIHB1c2goYWN0aW9uLmlucHV0cywgSW5wdXRz
LnJhbmRvbUFyZ3VtZW50KCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWN0aW9uOwogICAg
fQogICAgZnVuY3Rpb24gZXhwbG9yZU51bGxpc2godikgewogICAgICAgIC8vIEJlc3QgdGhpbmcg
d2UgY2FuIGRvIHdpdGggbnVsbGlzaCB2YWx1ZXMgaXMgYSBOdWxsQ29hbGVzY2luZyAoPz8pIG9w
ZXJhdGlvbi4KICAgICAgICByZXR1cm4gbmV3IEFjdGlvbihPUF9OVUxMX0NPQUxFU0NFLCBbZXhw
bG9yZWRWYWx1ZUlucHV0LCBJbnB1dHMucmFuZG9tQXJndW1lbnQoKV0pCiAgICB9CiAgICAvLyBF
eHBsb3JlcyB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybnMgYW4gYWN0aW9uIHRvIHBlcmZvcm0g
b24gaXQuCiAgICBmdW5jdGlvbiBleHBsb3JlVmFsdWUoaWQsIHYpIHsKICAgICAgICBpZiAoaXNP
YmplY3QodikpIHsKICAgICAgICAgICAgcmV0dXJuIGV4cGxvcmVPYmplY3Qodik7CiAgICAgICAg
fSBlbHNlIGlmIChpc0Z1bmN0aW9uKHYpKSB7CiAgICAgICAgICAgIHJldHVybiBleHBsb3JlRnVu
Y3Rpb24odik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyh2KSkgewogICAgICAgICAgICBy
ZXR1cm4gZXhwbG9yZVN0cmluZyh2KTsKICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHYpKSB7
CiAgICAgICAgICAgIHJldHVybiBleHBsb3JlTnVtYmVyKHYpOwogICAgICAgIH0gZWxzZSBpZiAo
aXNCaWdpbnQodikpIHsKICAgICAgICAgICAgcmV0dXJuIGV4cGxvcmVCaWdpbnQodik7CiAgICAg
ICAgfSBlbHNlIGlmIChpc1N5bWJvbCh2KSkgewogICAgICAgICAgICByZXR1cm4gZXhwbG9yZVN5
bWJvbCh2KTsKICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhbih2KSkgewogICAgICAgICAgICBy
ZXR1cm4gZXhwbG9yZUJvb2xlYW4odik7CiAgICAgICAgfSBlbHNlIGlmIChpc1VuZGVmaW5lZCh2
KSkgewogICAgICAgICAgICByZXR1cm4gZXhwbG9yZU51bGxpc2godik7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgdmFsdWUgdHlwZTogIiArIHR5cGVvZiB2
OwogICAgICAgIH0KICAgIH0KICAgIC8vCiAgICAvLyBFeHBsb3JhdGlvbiBlbnRyeXBvaW50Lgog
ICAgLy8KICAgIGZ1bmN0aW9uIGV4cGxvcmUoaWQsIHYsIGN1cnJlbnRUaGlzLCBhcmdzLCBybmdT
ZWVkKSB7CiAgICAgICAgcm5nLnJlc2VlZChybmdTZWVkKTsKICAgICAgICAvLyBUaGUgZ2l2ZW4g
YXJndW1lbnRzIG1heSBiZSB1c2VkIGFzIGlucHV0cyBmb3IgdGhlIGFjdGlvbi4KICAgICAgICBp
ZiAoaXNVbmRlZmluZWQoYXJncykgfHwgYXJncy5sZW5ndGggPCAxKSB0aHJvdyAiRXhwbG9yYXRp
b24gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgYXJndW1lbnQiOwogICAgICAgIC8v
IFdlIG1heSBnZXQgaGVyZSByZWN1cnNpdmVseSBmb3IgZXhhbXBsZSBpZiBhIFByb3h5IGlzIGJl
aW5nIGV4cGxvcmVkIHdoaWNoIHRyaWdnZXJzIGZ1cnRoZXIgZXhwbG9yZSBjYWxscyBkdXJpbmcg
ZS5nLiBwcm9wZXJ0eSBlbnVtZXJhdGlvbi4KICAgICAgICAvLyBQcm9iYWJseSB0aGUgYmVzdCB3
YXkgdG8gZGVhbCB3aXRoIHRoZXNlIGNhc2VzIGlzIHRvIGp1c3QgYmFpbCBvdXQgZnJvbSByZWN1
cnNpdmUgZXhwbG9yYXRpb25zLgogICAgICAgIGlmIChjdXJyZW50bHlFeHBsb3JpbmcpIHJldHVy
bjsKICAgICAgICBjdXJyZW50bHlFeHBsb3JpbmcgPSB0cnVlOwogICAgICAgIC8vIFNldCB0aGUg
Z2xvYmFsIHN0YXRlIGZvciB0aGlzIGV4cGxvcmUgb3BlcmF0aW9uLgogICAgICAgIGV4cGxvcmVB
cmd1bWVudHMgPSBhcmdzOwogICAgICAgIGV4cGxvcmVkVmFsdWVJbnB1dCA9IG5ldyBTcGVjaWFs
SW5wdXQoImV4cGxvcmVkVmFsdWUiKTsKICAgICAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhh
dmUgYSByZXN1bHQgZm9yIHRoaXMgaWQsIGFuZCBpZiBzbyByZXBlYXQgdGhlIHNhbWUgYWN0aW9u
IGFnYWluLiBPdGhlcndpc2UsIGV4cGxvcmUuCiAgICAgICAgbGV0IGFjdGlvbjsKICAgICAgICBp
ZiAoaGFzQWN0aW9uRm9yKGlkKSkgewogICAgICAgICAgICBhY3Rpb24gPSBnZXRBY3Rpb25Gb3Io
aWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFjdGlvbiA9IGV4cGxvcmVWYWx1ZShp
ZCwgdik7CiAgICAgICAgICAgIHJlY29yZEFjdGlvbihpZCwgYWN0aW9uKTsKICAgICAgICB9CiAg
ICAgICAgLy8gTm93IHBlcmZvcm0gdGhlIHNlbGVjdGVkIGFjdGlvbi4KICAgICAgICBsZXQgY29u
dGV4dCA9IHsgYXJndW1lbnRzOiBhcmdzLCBzcGVjaWFsVmFsdWVzOiB7ICJleHBsb3JlZFZhbHVl
IjogdiB9LCBjdXJyZW50VGhpczogY3VycmVudFRoaXMgfTsKICAgICAgICBsZXQgc3VjY2VzcyA9
IGV4ZWN1dGUoYWN0aW9uLCBjb250ZXh0KTsKICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIGZhaWxl
ZCwgbWFyayB0aGlzIGV4cGxvcmUgb3BlcmF0aW9uIGFzIGZhaWxpbmcgKHdoaWNoIHdpbGwgc2V0
IHRoZSBhY3Rpb24gdG8gTk9fQUNUSU9OKSBzbyBpdCB3b24ndCBiZSByZXRyaWVkIGFnYWluLgog
ICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICByZWNvcmRGYWlsdXJlKGlkKTsKICAg
ICAgICB9CiAgICAgICAgY3VycmVudGx5RXhwbG9yaW5nID0gZmFsc2U7CiAgICB9CiAgICBmdW5j
dGlvbiBleHBsb3JlV2l0aEVycm9ySGFuZGxpbmcoaWQsIHYsIHRoaXNWYWx1ZSwgYXJncywgcm5n
U2VlZCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGV4cGxvcmUoaWQsIHYsIHRoaXNWYWx1
ZSwgYXJncywgcm5nU2VlZCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBsZXQg
bGluZSA9IHRyeUhhc1Byb3BlcnR5KCdsaW5lJywgZSkgPyB0cnlHZXRQcm9wZXJ0eSgnbGluZScs
IGUpIDogdHJ5R2V0UHJvcGVydHkoJ2xpbmVOdW1iZXInLCBlKTsKICAgICAgICAgICAgaWYgKGlz
TnVtYmVyKGxpbmUpKSB7CiAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigiSW4gbGluZSAiICsg
bGluZSArICI6ICIgKyBlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJl
cG9ydEVycm9yKGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGV4
cGxvcmVXaXRoRXJyb3JIYW5kbGluZzsKfSkoKTsKY29uc3QgdjEyID0gewogICAgWyJib29sZWFu
Il0oYTQsIGE1LCBhNikgewogICAgICAgIGNvbnN0IHY5ID0geyBtYXhCeXRlTGVuZ3RoOiAxNjk0
IH07CiAgICAgICAgZXhwbG9yZSgidjM1IiwgdjksIHRoaXMsIFt2OSwgNDI5NDk2NzI5NywgdGhp
cywgdW5kZWZpbmVkLCBTaGFyZWRBcnJheUJ1ZmZlcl0sIDg2MDMwOTkpOwogICAgICAgIG5ldyBT
aGFyZWRBcnJheUJ1ZmZlcig2LCB2OSk7CiAgICB9LAp9Owp2MTIuYm9vbGVhbigpOwpnYygpOwov
LyBDUkFTSCBJTkZPCi8vID09PT09PT09PT0KLy8gVEVSTVNJRzogNgovLyBTVERFUlI6Ci8vIEFT
U0VSVElPTiBGQUlMRUQ6IFBhZ2VDb3VudDo6aXNWYWxpZChudW1QYWdlcykKLy8gYnVpbGRfYXNh
bi9KYXZhU2NyaXB0Q29yZS9Qcml2YXRlSGVhZGVycy9KYXZhU2NyaXB0Q29yZS9QYWdlQ291bnQu
aCg3OSkgOiBzdGF0aWMgUGFnZUNvdW50IEpTQzo6UGFnZUNvdW50Ojpmcm9tQnl0ZXModWludDY0
X3QpCi8vIDEgICAweDYyZGNlMDMwYjZlMCAvaG9tZS9nYW5kYWxmL2Z1enovZnV6el9qc2MvV2Vi
S2l0L2J1aWxkX2FzYW4vYmluL2pzYygrMHg2YzEzNmUwKSBbMHg2MmRjZTAzMGI2ZTBdCi8vIDIg
ICAweDYyZGNkZTY4ZTI0MCAvaG9tZS9nYW5kYWxmL2Z1enovZnV6el9qc2MvV2ViS2l0L2J1aWxk
X2FzYW4vYmluL2pzYygrMHg0Zjk2MjQwKSBbMHg2MmRjZGU2OGUyNDBdCi8vIDMgICAweDYyZGNk
ZTY4OTQxZCAvaG9tZS9nYW5kYWxmL2Z1enovZnV6el9qc2MvV2ViS2l0L2J1aWxkX2FzYW4vYmlu
L2pzYygrMHg0ZjkxNDFkKSBbMHg2MmRjZGU2ODk0MWRdCi8vIDQgICAweDYyZGNkZTY4ZTU1OCAv
aG9tZS9nYW5kYWxmL2Z1enovZnV6el9qc2MvV2ViS2l0L2J1aWxkX2FzYW4vYmluL2pzYygrMHg0
Zjk2NTU4KSBbMHg2MmRjZGU2OGU1NThdCi8vIDUgICAweDYyZGNkZWFkODFjMSAvaG9tZS9nYW5k
YWxmL2Z1enovZnV6el9qc2MvV2ViS2l0L2J1aWxkX2FzYW4vYmluL2pzYygrMHg1M2UwMWMxKSBb
MHg2MmRjZGVhZDgxYzFdCi8vIDYgICAweDdjMDJhNGMwYzNlNyBbMHg3YzAyYTRjMGMzZTddCi8v
IFNURE9VVDoKLy8gRVhQTE9SRV9BQ1RJT046IHsib3BlcmF0aW9uIjoiTlVMTF9DT0FMRVNDRSIs
ImlucHV0cyI6W3sic3BlY2lhbCI6eyJuYW1lIjoiZXhwbG9yZWRWYWx1ZSJ9fSx7ImFyZ3VtZW50
Ijp7ImluZGV4IjozfX1dLCJpc0d1YXJkZWQiOmZhbHNlLCJpZCI6InYyOCJ9Ci8vIEVYUExPUkVf
QUNUSU9OOiB7Im9wZXJhdGlvbiI6IkNBTExfTUVUSE9EIiwiaW5wdXRzIjpbeyJzcGVjaWFsIjp7
Im5hbWUiOiJleHBsb3JlZFZhbHVlIn19LHsic3RyaW5nIjp7InZhbHVlIjoiYm9vbGVhbiJ9fSx7
ImFyZ3VtZW50Ijp7ImluZGV4IjoxfX0seyJhcmd1bWVudCI6eyJpbmRleCI6MX19LHsiYXJndW1l
bnQiOnsiaW5kZXgiOjR9fV0sImlzR3VhcmRlZCI6dHJ1ZSwiaWQiOiJ2NDEifQovLyBFWFBMT1JF
X0FDVElPTjogeyJvcGVyYXRpb24iOiJDQUxMX01FVEhPRCIsImlucHV0cyI6W3sic3BlY2lhbCI6
eyJuYW1lIjoiZXhwbG9yZWRWYWx1ZSJ9fSx7InN0cmluZyI6eyJ2YWx1ZSI6InNlYXJjaCJ9fSx7
ImFyZ3VtZW50Ijp7ImluZGV4Ijo0fX1dLCJpc0d1YXJkZWQiOnRydWUsImlkIjoidjMwIn0KLy8g
RVhQTE9SRV9BQ1RJT046IHsib3BlcmF0aW9uIjoiTlVMTF9DT0FMRVNDRSIsImlucHV0cyI6W3si
c3BlY2lhbCI6eyJuYW1lIjoiZXhwbG9yZWRWYWx1ZSJ9fSx7ImFyZ3VtZW50Ijp7ImluZGV4Ijox
fX1dLCJpc0d1YXJkZWQiOmZhbHNlLCJpZCI6InYzMiJ9Ci8vIEVYUExPUkVfQUNUSU9OOiB7Im9w
ZXJhdGlvbiI6IkNPTlNUUlVDVCIsImlucHV0cyI6W3sic3BlY2lhbCI6eyJuYW1lIjoiZXhwbG9y
ZWRWYWx1ZSJ9fSx7ImFyZ3VtZW50Ijp7ImluZGV4IjoyfX1dLCJpc0d1YXJkZWQiOnRydWUsImlk
IjoidjMzIn0KLy8gRVhQTE9SRV9BQ1RJT046IHsib3BlcmF0aW9uIjoiU0VUX1BST1BFUlRZIiwi
aW5wdXRzIjpbeyJzcGVjaWFsIjp7Im5hbWUiOiJleHBsb3JlZFZhbHVlIn19LHsic3RyaW5nIjp7
InZhbHVlIjoibWF4Qnl0ZUxlbmd0aCJ9fSx7ImFyZ3VtZW50Ijp7ImluZGV4IjoxfX1dLCJpc0d1
YXJkZWQiOmZhbHNlLCJpZCI6InYzNSJ9Ci8vIEVYUExPUkVfQUNUSU9OOiB7Im9wZXJhdGlvbiI6
IkJJVFdJU0VfQU5EIiwiaW5wdXRzIjpbeyJzcGVjaWFsIjp7Im5hbWUiOiJleHBsb3JlZFZhbHVl
In19LHsiYXJndW1lbnQiOnsiaW5kZXgiOjJ9fV0sImlzR3VhcmRlZCI6ZmFsc2UsImlkIjoidjM2
In0KLy8gRlVaWkVSIEFSR1M6IC5idWlsZC94ODZfNjQtdW5rbm93bi1saW51eC1nbnUvcmVsZWFz
ZS9GdXp6aWxsaUNsaSAtLXByb2ZpbGU9anNjIC0tc3RvcmFnZVBhdGg9VGFyZ2V0cy9KYXZhU2Ny
aXB0Q29yZS9vdXQgL2hvbWUvZ2FuZGFsZi9mdXp6L2Z1enpfanNjL1dlYktpdC9idWlsZF9hc2Fu
L2Jpbi9qc2MgLS1yZXN1bWUKLy8gVEFSR0VUIEFSR1M6IC9ob21lL2dhbmRhbGYvZnV6ei9mdXp6
X2pzYy9XZWJLaXQvYnVpbGRfYXNhbi9iaW4vanNjIC0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS10
aHJlc2hvbGRGb3JKSVRTb29uPTEwIC0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAgLS10
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMCAtLXRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwPTEwMCAtLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0xMDAgLS10aHJl
c2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMDAgLS10aHJlc2hvbGRGb3JGVExPcHRp
bWl6ZVNvb249MTAwMCAtLXZhbGlkYXRlQkNFPXRydWUgLS1yZXBybAovLyBDT05UUklCVVRPUlM6
IAovLyBFWEVDVVRJT04gVElNRTogMTU1bXMK
</data>

          </attachment>
      

    </bug>

</bugzilla>