<?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>237730</bug_id>
          
          <creation_ts>2022-03-10 13:39:52 -0800</creation_ts>
          <short_desc>Allow modification of content of StreamClientConnection.streamBuffer in IPCTestingAPI</short_desc>
          <delta_ts>2022-03-17 12:57:28 -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>WebKit2</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="Simon Lewis">simon.lewis</reporter>
          <assigned_to name="Simon Lewis">simon.lewis</assigned_to>
          <cc>gavin.p</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>nls.wk</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1850221</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-10 13:39:52 -0800</bug_when>
    <thetext>When the IPCTestingAPI is enabled we can access the streamBuffer object of a StreamClientConnection:

streamConnection = IPC.createStreamClientConnection(&apos;GPU&apos;, 0x2000);
streamConnection.streamBuffer

However there are currently no methods exposed that allow for reading or writing to the memory content of the StreamBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850223</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-10 13:41:31 -0800</bug_when>
    <thetext>rdar://problem/89676460</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850281</commentid>
    <comment_count>2</comment_count>
      <attachid>454413</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-10 15:55:51 -0800</bug_when>
    <thetext>Created attachment 454413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850690</commentid>
    <comment_count>3</comment_count>
      <attachid>454413</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-12 07:12:59 -0800</bug_when>
    <thetext>Comment on attachment 454413
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454413&amp;action=review

looks great, some maintenance improvement aspects to consider

&gt; Source/WebKit/Platform/IPC/StreamClientConnection.h:81
&gt; +    friend class WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer;

could you instead add:
StreamConnectionBuffer&amp; bufferForTesting()

for StreamConnectionBuffer, add function:
Span&lt;uint8_t&gt; headerForTesting()

This way if StreamConnectionBuffer changes a bit, it doesn&apos;t neccarily need knowing that the ipc testing .cpp needs change.
This way the access chain is not so long and

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:909
&gt; +    uint8_t* data = static_cast&lt;uint8_t*&gt;(jsStreamBuffer-&gt;m_streamConnection-&gt;m_streamConnection.m_buffer.m_sharedMemory-&gt;data());

so this brittle access chain to multiple internal structures we want to break with controlled ...ForTesting() functions.
(this enables the developers to understand that private variables are accessed with ForTesting methods. Understanding  and remembering that via friend declarations is a bit harder)

&gt; LayoutTests/ipc/stream-buffer-read-write.html:17
&gt; +    let initialData = new Uint8Array(streamBuffer.readBytes(0, 32));

I suggest add two modalities:
modify the header
modify the data

this way if the header changes position or is detached from the data area, all the tests related to corrupting the header will still be valid. it&apos;s also easier to understand what the test does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851483</commentid>
    <comment_count>4</comment_count>
      <attachid>454753</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-15 13:49:21 -0700</bug_when>
    <thetext>Created attachment 454753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851575</commentid>
    <comment_count>5</comment_count>
      <attachid>454773</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-15 16:35:30 -0700</bug_when>
    <thetext>Created attachment 454773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851643</commentid>
    <comment_count>6</comment_count>
      <attachid>454796</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-15 21:22:59 -0700</bug_when>
    <thetext>Created attachment 454796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852235</commentid>
    <comment_count>7</comment_count>
      <attachid>454796</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-17 04:56:30 -0700</bug_when>
    <thetext>Comment on attachment 454796
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454796&amp;action=review

Looks great still.
Feel free to consider the suggestion. If you do the change, you can also replace the &quot;Reviewed by OOOPS&quot; with Reviewed by Kimmo Kinnunen&quot;, and set the cq+ to commit.
for such patch, you can upload it by doing:

EDITOR=true tools/Scripts/webkit-patch upload -g HEAD   --no-confirm --no-review -m &quot;For landing&quot; --check-oops

&gt; Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp:110
&gt; +    return { static_cast&lt;uint8_t*&gt;((uint8_t*)m_sharedMemory-&gt;data() + headerSize()), m_sharedMemory-&gt;size() - headerSize() };

this contains a c-style cast.
I think you could write this as

  return { data(), dataSize() };

or if you want to be pedantic about possibly stuffing stuff into the (potential) page rounding leftover space and test that it&apos;s not used wrong:

 return { data(), m_sharedMemory-&gt;size() - headerSize() };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852350</commentid>
    <comment_count>8</comment_count>
      <attachid>454988</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-17 10:19:14 -0700</bug_when>
    <thetext>Created attachment 454988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852363</commentid>
    <comment_count>9</comment_count>
      <attachid>454988</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-17 10:36:41 -0700</bug_when>
    <thetext>Comment on attachment 454988
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454988&amp;action=review

&gt; Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp:105
&gt; +    return { static_cast&lt;uint8_t*&gt;(m_sharedMemory-&gt;data()), m_sharedMemory-&gt;size() - headerSize() };

Hmm, I may have missed this one:
this should be just headerSize(), right?
return { static_cast&lt;uint8_t*&gt;(m_sharedMemory-&gt;data()), headerSize() };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852373</commentid>
    <comment_count>10</comment_count>
      <attachid>454995</attachid>
    <who name="Simon Lewis">simon.lewis</who>
    <bug_when>2022-03-17 10:52:32 -0700</bug_when>
    <thetext>Created attachment 454995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852425</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-17 12:57:24 -0700</bug_when>
    <thetext>Committed r291428 (248554@main): &lt;https://commits.webkit.org/248554@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454995.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454413</attachid>
            <date>2022-03-10 15:55:51 -0800</date>
            <delta_ts>2022-03-15 13:49:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220310155550.patch</filename>
            <type>text/plain</type>
            <size>12875</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLjQ5NzVhZWM4NGZhNjc3OWRjNzM3Y2UzYTNiNTZjODkx
M2QxMTU4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDMtMTAgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6
OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZEJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBD
VGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZUJ5dGVzKToKKwog
MjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBE
ZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaAppbmRl
eCA1ZWU2MWY3YzE4MWNiYWU4NTdlM2E3ODE4MTI2OTUxYjk4NWI0OTkyLi5lZmU1ZGE1ZTdiZDhl
NmY5YTUyNmYyODhjODI1MWIzY2MyZGIzMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCkBAIC0zOCw2ICszOCw3IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBJUENUZXN0aW5nQVBJIHsKIGNsYXNzIEpTSVBD
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbjsKK2NsYXNzIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZl
cjsKIH0KIH0KIApAQCAtNzcsNiArNzgsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1DbGllbnRDb25uZWN0
aW9uOworICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlcjsKIAogICAgIHN0cnVjdCBTcGFuIHsKICAgICAgICAgdWludDhfdCog
ZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5l
Y3Rpb25CdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rp
b25CdWZmZXIuaAppbmRleCAyMmFlMTEzYTcxYTI5M2IyNGNjYzY2ODFjYWM1ZTgxN2RkZDhjZThh
Li5kMDBiODU1NjlmZjU5M2M4M2FlOTg1YmJhYmIyMWU1NDUxMGY0YTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oCkBAIC0z
MCw2ICszMCwxMyBAQAogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CiAKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIElQQ1Rlc3RpbmdBUEkg
eworY2xhc3MgSlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uOworY2xhc3MgSlNJUENTdHJlYW1D
b25uZWN0aW9uQnVmZmVyOworfQorfQorCiBuYW1lc3BhY2UgSVBDIHsKIAogLy8gU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlciBpcyBhIHNoYXJlZCAiYmktcGFydGl0ZSIgY2lyY3VsYXIgYnVmZmVyIHN1
cHBvcnRpbmcgdmFyaWFibGUgbGVuZ3RoIG1lc3NhZ2VzLCBzcGVjaWZpYyBkYXRhCkBAIC0xMTYs
NiArMTIzLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmVhbUNvbm5l
Y3Rpb25CdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uOwor
ICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlcjsKKwogICAgIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIoUmVmPFdlYktpdDo6U2hh
cmVkTWVtb3J5PiYmLCBzaXplX3QgbWVtb3J5U2l6ZSwgU2VtYXBob3JlJiYgY2xpZW50V2FpdFNl
bWFwaG9yZSk7CiAKICAgICBzdHJ1Y3QgSGVhZGVyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggNzNmYjMxMDFlMjZjNmM2
ZjFkMjVjYzFhYWNkNGMxM2ExMjE3Nzc4ZS4uYjE1MTZiZWI0YmQ5ZTE2YzRjYmIzMGJjODFkYThm
ZTU4OWJmYmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAKQEAgLTExOSw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgSVBDOjpT
dHJlYW1DbGllbnRDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zdHJlYW1Db25u
ZWN0aW9uOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpTSVBDU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlcjsKKwogICAgIEpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbihKU0lQQyYganNJ
UEMsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAg
ICAgIDogbV9qc0lQQyhqc0lQQykKICAgICAgICAgLCBtX3N0cmVhbUNvbm5lY3Rpb24geyBjb25u
ZWN0aW9uLCBidWZmZXJTaXplIH0KQEAgLTE2Nyw2ICsxNjksOSBAQCBwcml2YXRlOgogCiAgICAg
c3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogCisgICAg
c3RhdGljIEpTVmFsdWVSZWYgcmVhZEJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1Zh
bHVlUmVmIHdyaXRlQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKICAgICBXZWFrUHRyPEpTSVBDU3RyZWFt
Q2xpZW50Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogfTsKIApAQCAtNjI5LDYgKzYz
NCw4IEBAIHZvaWQgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpmaW5hbGl6ZShKU09iamVj
dFJlZiBvYmplY3QpCiBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1N0cmVhbUNvbm5lY3Rp
b25CdWZmZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInJlYWRCeXRlcyIsIHJlYWRCeXRl
cywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB9LAorICAgICAgICB7ICJ3cml0ZUJ5dGVzIiwgd3JpdGVCeXRlcywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAog
ICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAgICAgcmV0dXJuIGZ1bmN0aW9uczsKQEAgLTg4
NCw2ICs4OTEsMTI1IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1vcnk6OndyaXRlQnl0ZXMoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjCiAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6cmVhZEJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQ
dHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAg
aWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICghanNTdHJlYW1CdWZmZXItPm1f
c3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9y
KGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJfcyk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBzaXplX3Qgb2Zm
c2V0ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29u
bmVjdGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLm1fYnVmZmVyLm1fc2hhcmVkTWVtb3J5LT5zaXpl
KCk7CisgICAgdWludDhfdCogZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihqc1N0cmVhbUJ1
ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24ubV9idWZmZXIubV9z
aGFyZWRNZW1vcnktPmRhdGEoKSk7CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNv
bnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGlmIChhcmd1bWVudENvdW50KSB7CisgICAgICAgIGF1
dG8gb2Zmc2V0VmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50c1swXSkpOworICAgICAgICBpZiAoIW9mZnNldFZhbHVlKSB7CisgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgZmlyc3QgYXJndW1lbnQgbXVz
dCBiZSBhIGJ5dGUgb2Zmc2V0IHRvIHJlYWQiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqb2Zmc2V0
VmFsdWUgPiBsZW5ndGgpCisgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG9mZnNldCA9ICpvZmZzZXRWYWx1ZTsKKyAgICAgICAgbGVuZ3RoIC09
IG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEpIHsKKyAgICAgICAg
YXV0byBsZW5ndGhWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0b0pTKGdsb2JhbE9iamVjdCwgYXJn
dW1lbnRzWzFdKSk7CisgICAgICAgIGlmICghbGVuZ3RoVmFsdWUpIHsKKyAgICAgICAgICAgICpl
eGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBzZWNvbmQgYXJndW1lbnQg
bXVzdCBiZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQiX3MpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlm
ICgqbGVuZ3RoVmFsdWUgPCBsZW5ndGgpCisgICAgICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFs
dWU7CisgICAgfQorCisgICAgYXV0byBhcnJheUJ1ZmZlciA9IEpTQzo6QXJyYXlCdWZmZXI6OmNy
ZWF0ZShkYXRhICsgb2Zmc2V0LCBsZW5ndGgpOworICAgIEpTQzo6SlNBcnJheUJ1ZmZlcioganNB
cnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYXJyYXlCdWZmZXItPnNoYXJpbmdNb2RlKCkpKQor
ICAgICAgICBqc0FycmF5QnVmZmVyID0gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSwgV1RGTW92ZShhcnJheUJ1ZmZlcikpOworICAgIGlmICghanNBcnJheUJ1ZmZlcikg
eworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQg
dG8gY3JlYXRlIHRoZSBhcnJheSBidWZmZXIgZm9yIHRoZSByZWFkIGJ5dGVzIl9zKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIHJl
dHVybiB0b1JlZihqc0FycmF5QnVmZmVyKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNv
bm5lY3Rpb25CdWZmZXI6OndyaXRlQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJl
ZlB0ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAg
ICBpZiAoIWpzU3RyZWFtQnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlci0+
bV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgInN0cmVhbUNvbm5lY3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gdHlw
ZSA9IGFyZ3VtZW50Q291bnQgPyBKU1ZhbHVlR2V0VHlwZWRBcnJheVR5cGUoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pIDoga0pTVHlwZWRBcnJheVR5cGVOb25lOworICAgIGlmICh0
eXBlID09IGtKU1R5cGVkQXJyYXlUeXBlTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJh
eSBidWZmZXIgb3IgYSB0eXBlZCBhcnJheSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZl
ckRhdGFGcm9tVmFsdWVSZWYoY29udGV4dCwgdHlwZSwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworICAgIGlmICghZGF0YS5idWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiQ291bGQgbm90IHJlYWQgdGhlIGJ1ZmZlciJfcyk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBzaXpl
X3Qgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoID0gZGF0YS5sZW5ndGg7CisgICAgc2l6
ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9u
LT5tX3N0cmVhbUNvbm5lY3Rpb24ubV9idWZmZXIubV9zaGFyZWRNZW1vcnktPnNpemUoKTsKKyAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oanNTdHJl
YW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLm1fYnVmZmVy
Lm1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMSkgewor
ICAgICAgICBhdXRvIG9mZnNldFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHNlY29uZCBh
cmd1bWVudCBtdXN0IGJlIGEgYnl0ZSBvZmZzZXQgdG8gd3JpdGUiX3MpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAg
IGlmICgqb2Zmc2V0VmFsdWUgPj0gc2hhcmVkTWVtb3J5U2l6ZSkgeworICAgICAgICAgICAgKmV4
Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiT2Zmc2V0IGlzIHRvbyBiaWciX3Mp
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAg
ICAgICB9CisgICAgICAgIG9mZnNldCA9ICpvZmZzZXRWYWx1ZTsKKyAgICB9CisKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA+IDIpIHsKKyAgICAgICAgYXV0byBsZW5ndGhWYWx1ZSA9IGNvbnZlcnRU
b1VpbnQ2NCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzJdKSk7CisgICAgICAgIGlmICgh
bGVuZ3RoVmFsdWUpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgIlRoZSB0aGlyZCBhcmd1bWVudCBtdXN0IGJlIHRoZSBudW1iZXIgb2YgYnl0ZXMg
dG8gd3JpdGUiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqbGVuZ3RoVmFsdWUgPj0gc2hhcmVkTWVt
b3J5U2l6ZSAtIG9mZnNldCB8fCAqbGVuZ3RoVmFsdWUgPiBsZW5ndGgpIHsKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBudW1iZXIgb2YgYnl0
ZXMgdG8gd3JpdGUgaXMgdG9vIGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gKmxlbmd0
aFZhbHVlOworICAgIH0KKworICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBvZmZzZXQsIGRh
dGEuYnVmZmVyLCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKwogSlNDbGFzc1JlZiBKU0lQQzo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBzdGF0
aWMgSlNDbGFzc1JlZiBqc0NsYXNzOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc3YTVhNjJlYTc0OWYxMDM0ODkyNDJlOTNj
ZDNmMjQzOGYwNDljMDEuLjQxYzk0NDE0NmUzMzZmNWFjZGQ3MzMxYjQ2ZWYxYThkOTIwNDhmZjUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMy0xMCAgU2ltb24gTGV3aXMgIDxzaW1vbi5s
ZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgRnVuY3Rpb25hbCB0ZXN0cyBmb3IgcmVhZCBhbmQg
d3JpdGUgbWV0aG9kcyBvZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzczMAorICAgICAgICByZGFy
Oi8vcHJvYmxlbS84OTY3NjQ2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGlwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbDogQWRk
ZWQuCisKIDIwMjItMDMtMDcgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBMYXlvdXRUZXN0cy93ZWJnbC9tYXgtYWN0aXZlLWNvbnRleHRzLWdjLmh0bWwg
aXMgZmxha3kKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQt
d3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVhZC13
cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI1NDBlYjU3NmYxMmI4YTY4YjY3ZGYzNTE2
MmExZjU4NjliNDIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lwYy9zdHJlYW0t
YnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUEFTUworVGVz
dCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2ggYW5kIGhhcyBubyAnRkFJTCcgb3V0cHV0CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2U1MjlmM2VjYzMyZmJjMmVjYjQwOWU1OWM4YWJhMTI4ZmY5YjIxYQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbApAQCAt
MCwwICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIElQ
Q1Rlc3RpbmdBUElFbmFibGVkPXRydWUgXSAtLT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBhcnJheXNB
cmVFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEuZXZlcnkoKHZhbCwgaSkgPT4gdmFsID09PSBiW2ld
KTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpCisKK2lmICh3aW5kb3cuSVBDKSB7CisgICAgY29uc3QgdGVzdEJ5dGVzID0gbmV3IFVpbnQ4
QXJyYXkoWzB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDhdKTsK
KyAgICBjb25zdCBidWZmZXJTaXplID0gMSA8PCAxNjsKKyAgICBjb25zdCBzdHJlYW1Db25uZWN0
aW9uID0gSVBDLmNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24oJ0dQVScsIGJ1ZmZlclNpemUp
OworCisgICAgbGV0IHN0cmVhbUJ1ZmZlciA9IHN0cmVhbUNvbm5lY3Rpb24uc3RyZWFtQnVmZmVy
KCk7CisgICAgbGV0IGluaXRpYWxEYXRhID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJl
YWRCeXRlcygwLCAzMikpOworCisgICAgc3RyZWFtQnVmZmVyLndyaXRlQnl0ZXModGVzdEJ5dGVz
LCAwLCA0KTsKKyAgICBzdHJlYW1CdWZmZXIud3JpdGVCeXRlcyh0ZXN0Qnl0ZXMuc2xpY2UoNCw4
KSwgNCwgNCk7CisKKyAgICBsZXQgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1
ZmZlci5yZWFkQnl0ZXMoMCwgMzIpKTsKKworICAgIGxldCBleHBlY3RlZCA9IGluaXRpYWxEYXRh
LnNsaWNlKCk7CisgICAgZm9yKGxldCBpPTA7IGk8ODsgaSsrKXsKKyAgICAgICAgZXhwZWN0ZWRb
aV0gPSB0ZXN0Qnl0ZXNbaV07CisgICAgfQorCisgICAgaWYoYXJyYXlzQXJlRXF1YWwocmVhZFJl
c3VsdCwgZXhwZWN0ZWQpKXsKKyAgICAgICAgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0
cmVhbUJ1ZmZlci5yZWFkQnl0ZXMoNCwgMjgpKTsKKyAgICAgICAgaWYoYXJyYXlzQXJlRXF1YWwo
cmVhZFJlc3VsdCwgZXhwZWN0ZWQuc2xpY2UoNCwgMzIpKSl7CisgICAgICAgICAgICBkb2N1bWVu
dC53cml0ZSgiUEFTUyIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9jdW1lbnQu
d3JpdGUoIkZBSUw6IE9mZnNldCByZWFkIik7CisgICAgICAgIH0gICAKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogT2Zmc2V0IHdyaXRlIik7CisgICAgfQorfSBl
bHNlIHsKKyAgICAvLyBJUEMgbm90IGVuYWJsZWQgc28gdGhpcyB0ZXN0IHBhc3NlcyBieSBkZWZh
dWx0LgorICAgIGRvY3VtZW50LndyaXRlKCJQQVNTIik7ICAgIAorfQorPC9zY3JpcHQ+Cis8cD5U
ZXN0IHBhc3NlcyBpZiBpdCBkb2VzIG5vdCBjcmFzaCBhbmQgaGFzIG5vICdGQUlMJyBvdXRwdXQ8
L3A+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454753</attachid>
            <date>2022-03-15 13:49:21 -0700</date>
            <delta_ts>2022-03-15 16:35:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220315134920.patch</filename>
            <type>text/plain</type>
            <size>18211</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLjQ5NzVhZWM4NGZhNjc3OWRjNzM3Y2UzYTNiNTZjODkx
M2QxMTU4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDMtMTAgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5oOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6
OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBD
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZEJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBD
VGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZUJ5dGVzKToKKwog
MjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBE
ZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAK
aW5kZXggNTRkZmRlOTQyMzQ2N2IyZDc0NDFmODNmODBiOGI1MWZkM2Q5ZWU4Zi4uZGQ5YTZiYTRi
ZTA4OGIyODFhOTk0YzUyNjJjNzNhNGYzN2EzMzkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKQEAgLTc4LDQgKzc4
LDkgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNz
YWdlSWZOZWVkZWQoKQogICAgIHdha2VVcFNlcnZlcigpOwogfQogCitTdHJlYW1Db25uZWN0aW9u
QnVmZmVyKiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpidWZmZXJGb3JUZXN0aW5nKCkKK3sKKyAg
ICByZXR1cm4gJm1fYnVmZmVyOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKaW5kZXggNWVlNjFmN2MxODFjYmFlODU3
ZTNhNzgxODEyNjk1MWI5ODViNDk5Mi4uNmIxM2Y3Nzg4NjNmMDI0NDcwYzBjZmU2MzI2NzIyZjBj
YTg0ZDY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xp
ZW50Q29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNs
aWVudENvbm5lY3Rpb24uaApAQCAtNzQsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgU2Vu
ZFN5bmNSZXN1bHQgPSBDb25uZWN0aW9uOjpTZW5kU3luY1Jlc3VsdDsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIFNlbmRTeW5jUmVzdWx0IHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCBPYmplY3RJZGVudGlmaWVyPFU+IGRlc3RpbmF0
aW9uSUQsIFRpbWVvdXQpOworICAgIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIqIGJ1ZmZlckZvclRl
c3RpbmcoKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpJUENUZXN0aW5n
QVBJOjpKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3BwCmluZGV4IDc1ZjRlZTM1
OTJjMzdjZTQ1ZTYyMTM4NDdiNmJlMDRiNjlkOTAwMDEuLmQzZjllZDAwZjA0NTFkYmEzMmU3M2Nl
OGMzYWI5ZjgyMTYxNTYzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3BwCkBAIC0xMDAsNCArMTAwLDE0IEBAIHN0ZDo6
b3B0aW9uYWw8U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcj4gU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6
ZGVjb2RlKERlY29kZXImIGRlCiAgICAgcmV0dXJuIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIgeyBz
aGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSwgZGF0YVNpemUsICBXVEZNb3ZlKCpzZW1hcGhv
cmUpIH07CiB9CiAKK1NwYW48dWludDhfdD4gU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6aGVhZGVy
Rm9yVGVzdGluZygpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fc2hh
cmVkTWVtb3J5LT5kYXRhKCkpLCBtX3NoYXJlZE1lbW9yeS0+c2l6ZSgpIC0gaGVhZGVyU2l6ZSgp
IH07Cit9CisKK1NwYW48dWludDhfdD4gU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRl
c3RpbmcoKQoreworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3QqPigodWludDhfdCop
bV9zaGFyZWRNZW1vcnktPmRhdGEoKSArIGhlYWRlclNpemUoKSksIG1fc2hhcmVkTWVtb3J5LT5z
aXplKCkgLSBoZWFkZXJTaXplKCkgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oCmluZGV4IDIyYWUxMTNhNzFhMjkz
YjI0Y2NjNjY4MWNhYzVlODE3ZGRkOGNlOGEuLmJmNTcyZjNmN2JhNDE4OGU3OGU5Y2MwZGVhMWNk
MDYzYmQ4Njc0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJl
YW1Db25uZWN0aW9uQnVmZmVyLmgKQEAgLTExNSw2ICsxMTUsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmVh
bUNvbm5lY3Rpb25CdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKKyAgICBTcGFuPHVpbnQ4X3Q+
IGhlYWRlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVpbnQ4X3Q+IGRhdGFGb3JUZXN0aW5nKCk7
CisKIHByaXZhdGU6CiAgICAgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcihSZWY8V2ViS2l0OjpTaGFy
ZWRNZW1vcnk+JiYsIHNpemVfdCBtZW1vcnlTaXplLCBTZW1hcGhvcmUmJiBjbGllbnRXYWl0U2Vt
YXBob3JlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcAppbmRleCA3M2ZiMzEwMWUyNmM2YzZmMWQyNWNjMWFhY2Q0YzEzYTEyMTc3
NzhlLi41OTcyYWJmYzkxM2JlNDkzMmU4ODgwYmMyNzI4ZDNkNDdhMDI5MmVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAt
MTE5LDYgKzExOSw4IEBAIHB1YmxpYzoKICAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24m
IGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3N0cmVhbUNvbm5lY3Rpb247IH0KIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOworCiAgICAgSlNJ
UENTdHJlYW1DbGllbnRDb25uZWN0aW9uKEpTSVBDJiBqc0lQQywgSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICAgICAgOiBtX2pzSVBDKGpzSVBDKQog
ICAgICAgICAsIG1fc3RyZWFtQ29ubmVjdGlvbiB7IGNvbm5lY3Rpb24sIGJ1ZmZlclNpemUgfQpA
QCAtMTY3LDYgKzE2OSwxMyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogCisgICAgc3RhdGljIEpTVmFsdWVSZWYgcmVh
ZEhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJlYWREYXRh
Qnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgcmVhZEJ5dGVzKEpTQ29u
dGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24sIFNwYW48dWludDhfdD4pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdyaXRlSGVhZGVy
Qnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd3JpdGVEYXRhQnl0ZXMo
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd3JpdGVCeXRlcyhKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
LCBTcGFuPHVpbnQ4X3Q+KTsKKwogICAgIFdlYWtQdHI8SlNJUENTdHJlYW1DbGllbnRDb25uZWN0
aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247CiB9OwogCkBAIC02MjksNiArNjM4LDEwIEBAIHZvaWQg
SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
CiBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0
YXRpY0Z1bmN0aW9ucygpCiB7CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVu
Y3Rpb25zW10gPSB7CisgICAgICAgIHsgInJlYWRIZWFkZXJCeXRlcyIsIHJlYWRIZWFkZXJCeXRl
cywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB9LAorICAgICAgICB7ICJ3cml0ZUhlYWRlckJ5dGVzIiwgd3JpdGVIZWFkZXJCeXRl
cywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB9LAorICAgICAgICB7ICJyZWFkRGF0YUJ5dGVzIiwgcmVhZERhdGFCeXRlcywga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB9LAorICAgICAgICB7ICJ3cml0ZURhdGFCeXRlcyIsIHdyaXRlRGF0YUJ5dGVzLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0s
CiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gZnVuY3Rpb25zOwpAQCAt
ODg0LDYgKzg5NywxNzkgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1D
b25uZWN0aW9uQnVmZmVyOjpyZWFkSGVhZGVyQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIFJlZlB0ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0
KTsKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1
ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgInN0cmVhbUNvbm5lY3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1
dG8gYnVmZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbi0+bV9zdHJlYW1D
b25uZWN0aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVpbnQ4X3Q+IHNwYW4gPSBi
dWZmZXItPmhlYWRlckZvclRlc3RpbmcoKTsKKworICAgIHJldHVybiByZWFkQnl0ZXMoY29udGV4
dCwgbnVsbHB0ciwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRp
b24sIHNwYW4pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6
cmVhZERhdGFCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFt
QnVmZmVyID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJl
YW1CdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0
LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5l
Y3Rpb24pIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAi
c3RyZWFtQ29ubmVjdGlvbiBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0byBidWZmZXIgPSBqc1N0cmVh
bUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24uYnVmZmVyRm9y
VGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci0+ZGF0YUZvclRlc3Rp
bmcoKTsKKworICAgIHJldHVybiByZWFkQnl0ZXMoY29udGV4dCwgbnVsbHB0ciwgdGhpc09iamVj
dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHNwYW4pOworfQorCitKU1Zh
bHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZEJ5dGVzKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbiwgU3Bhbjx1aW50OF90PiBzcGFuKQoreworICAgIHNpemVfdCBvZmZzZXQgPSAwOwor
ICAgIHNpemVfdCBsZW5ndGggPSBzcGFuLnNpemUoKTsKKyAgICB1aW50OF90KiBkYXRhID0gc3Bh
bi5kYXRhKCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCkgeworICAgICAgICBhdXRvIG9mZnNldFZhbHVl
ID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMF0pKTsKKyAg
ICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBieXRlIG9m
ZnNldCB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKm9mZnNldFZhbHVlID4gbGVuZ3Ro
KQorICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvZmZzZXQgPSAqb2Zmc2V0VmFsdWU7CisgICAgICAgIGxlbmd0aCAtPSBvZmZzZXQ7CisgICAg
fQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgICAgIGF1dG8gbGVuZ3RoVmFs
dWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSkpOwor
ICAgICAgICBpZiAoIWxlbmd0aFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgdGhlIG51
bWJlciBvZiBieXRlcyB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmxlbmd0aFZhbHVl
IDwgbGVuZ3RoKQorICAgICAgICAgICAgbGVuZ3RoID0gKmxlbmd0aFZhbHVlOworICAgIH0KKwor
ICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YSArIG9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBKU0M6OkpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBu
dWxscHRyOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5QnVm
ZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKSkKKyAgICAgICAganNBcnJh
eUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1v
dmUoYXJyYXlCdWZmZXIpKTsKKyAgICBpZiAoIWpzQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUg
YXJyYXkgYnVmZmVyIGZvciB0aGUgcmVhZCBieXRlcyJfcyk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9SZWYoanNB
cnJheUJ1ZmZlcik7Cit9CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVy
Ojp3cml0ZUhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIganNT
dHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFq
c1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNv
bnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICghanNTdHJlYW1CdWZmZXItPm1fc3RyZWFt
Q29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRl
eHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJfcyk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBhdXRvIGJ1ZmZlciA9IGpz
U3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24tPm1fc3RyZWFtQ29ubmVjdGlvbi5idWZm
ZXJGb3JUZXN0aW5nKCk7CisgICAgU3Bhbjx1aW50OF90PiBzcGFuID0gYnVmZmVyLT5oZWFkZXJG
b3JUZXN0aW5nKCk7CisKKyAgICByZXR1cm4gd3JpdGVCeXRlcyhjb250ZXh0LCBudWxscHRyLCB0
aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgc3Bhbik7Cit9
CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZURhdGFCeXRl
cyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0gdG9X
cmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIpIHsK
KyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlw
ZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAg
ICB9CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29ubmVj
dGlvbiBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgfQorCisgICAgYXV0byBidWZmZXIgPSBqc1N0cmVhbUJ1ZmZlci0+bV9z
dHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24uYnVmZmVyRm9yVGVzdGluZygpOwor
ICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci0+ZGF0YUZvclRlc3RpbmcoKTsKKworICAg
IHJldHVybiB3cml0ZUJ5dGVzKGNvbnRleHQsIG51bGxwdHIsIHRoaXNPYmplY3QsIGFyZ3VtZW50
Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBzcGFuKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQ
Q1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBT
cGFuPHVpbnQ4X3Q+IHNwYW4pCit7CisgICAgYXV0byB0eXBlID0gYXJndW1lbnRDb3VudCA/IEpT
VmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikg
OiBrSlNUeXBlZEFycmF5VHlwZU5vbmU7CisgICAgaWYgKHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5
cGVOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwg
IlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciBvciBhIHR5cGVkIGFy
cmF5Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgIH0KKworICAgIGF1dG8gZGF0YSA9IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihjb250
ZXh0LCB0eXBlLCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkYXRhLmJ1ZmZl
cikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJDb3Vs
ZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAgIHNp
emVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKworICAgIHNpemVfdCBzaGFyZWRNZW1vcnlTaXpl
ID0gc3Bhbi5zaXplKCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25EYXRhID0gc3Bhbi5kYXRh
KCk7CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0p
OworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgICAgIGF1dG8gb2Zmc2V0VmFs
dWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSkpOwor
ICAgICAgICBpZiAoIW9mZnNldFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBieXRl
IG9mZnNldCB0byB3cml0ZSJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCpvZmZzZXRWYWx1ZSA+PSBz
aGFyZWRNZW1vcnlTaXplKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJPZmZzZXQgaXMgdG9vIGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0
ID0gKm9mZnNldFZhbHVlOworICAgIH0KKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMikgewor
ICAgICAgICBhdXRvIGxlbmd0aFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudHNbMl0pKTsKKyAgICAgICAgaWYgKCFsZW5ndGhWYWx1ZSkgeworICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHRoaXJkIGFy
Z3VtZW50IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSJfcyk7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCpsZW5ndGhWYWx1ZSA+IHNoYXJlZE1lbW9yeVNpemUgLSBvZmZzZXQgfHwgKmxl
bmd0aFZhbHVlID4gbGVuZ3RoKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlw
ZUVycm9yKGNvbnRleHQsICJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIGlzIHRvbyBiaWci
X3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
ICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKKyAgICB9CisKKyAgICBt
ZW1jcHkoZGVzdGluYXRpb25EYXRhICsgb2Zmc2V0LCBkYXRhLmJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIEpTQ2xhc3NSZWYg
SlNJUEM6OndyYXBwZXJDbGFzcygpCiB7CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3N2E1YTYyZWE3NDlmMTAzNDg5MjQyZTkzY2QzZjI0MzhmMDQ5YzAxLi40MWM5NDQx
NDZlMzM2ZjVhY2RkNzMzMWI0NmVmMWE4ZDkyMDQ4ZmY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjItMDMtMTAgIFNpbW9uIExld2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAg
ICAgIEZ1bmN0aW9uYWwgdGVzdHMgZm9yIHJlYWQgYW5kIHdyaXRlIG1ldGhvZHMgb2YgSlNJUENT
dHJlYW1Db25uZWN0aW9uQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzc3MzAKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk2NzY0NjAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGlwYy9zdHJl
YW0tYnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpcGMv
c3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWw6IEFkZGVkLgorCiAyMDIyLTAzLTA3ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVzdHMv
d2ViZ2wvbWF4LWFjdGl2ZS1jb250ZXh0cy1nYy5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYyNTQwZWI1NzZmMTJiOGE2OGI2N2RmMzUxNjJhMWY1ODY5YjQyMDUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1BBU1MKK1Rlc3QgcGFzc2VzIGlmIGl0IGRvZXMgbm90
IGNyYXNoIGFuZCBoYXMgbm8gJ0ZBSUwnIG91dHB1dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVh
bS1idWZmZXItcmVhZC13cml0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0YjdiZjFhODQ3M2YxNjU5MjY5
OTM4MWM1NWY2ZWRjNzZiNGQyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMv
c3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJUENUZXN0aW5nQVBJRW5hYmxlZD10cnVl
IF0gLS0+Cis8c2NyaXB0PgorZnVuY3Rpb24gYXJyYXlzQXJlRXF1YWwoYSwgYikgeworICAgIGlm
IChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBhLmV2ZXJ5KCh2YWwsIGkpID0+IHZhbCA9PT0gYltpXSk7Cit9CisKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKQorCitpZiAod2luZG93LklQQykg
eworICAgIGxldCBoZWFkZXJSZWFkU3VjY2VzcyA9IGZhbHNlOworICAgIGxldCBoZWFkZXJXcml0
ZVN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBsZXQgZGF0YVJlYWRTdWNjZXNzID0gZmFsc2U7CisgICAg
bGV0IGRhdGFXcml0ZVN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGNvbnN0IHRlc3RCeXRlcyA9IFVp
bnQ4QXJyYXkuZnJvbSh7bGVuZ3RoOiAxNn0sICh4LCBpKSA9PiBpICsgMHg0MSk7CisgICAgY29u
c3QgYnVmZmVyU2l6ZSA9IDQ4OworICAgIGNvbnN0IHN0cmVhbUNvbm5lY3Rpb24gPSBJUEMuY3Jl
YXRlU3RyZWFtQ2xpZW50Q29ubmVjdGlvbignR1BVJywgYnVmZmVyU2l6ZSk7CisKKyAgICBsZXQg
c3RyZWFtQnVmZmVyID0gc3RyZWFtQ29ubmVjdGlvbi5zdHJlYW1CdWZmZXIoKTsKKyAgICBsZXQg
aW5pdGlhbERhdGEgPSBuZXcgVWludDhBcnJheShzdHJlYW1CdWZmZXIucmVhZEhlYWRlckJ5dGVz
KDAsIDMyKSk7CisKKyAgICBzdHJlYW1CdWZmZXIud3JpdGVIZWFkZXJCeXRlcyh0ZXN0Qnl0ZXMs
IDAsIDQpOworICAgIHN0cmVhbUJ1ZmZlci53cml0ZUhlYWRlckJ5dGVzKHRlc3RCeXRlcy5zbGlj
ZSg0LDgpLCA0LCA0KTsKKworICAgIGxldCByZWFkUmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3Ry
ZWFtQnVmZmVyLnJlYWRIZWFkZXJCeXRlcygwLCAzMikpOworCisgICAgbGV0IGV4cGVjdGVkID0g
aW5pdGlhbERhdGEuc2xpY2UoKTsKKyAgICBmb3IobGV0IGk9MDsgaTw4OyBpKyspeworICAgICAg
ICBleHBlY3RlZFtpXSA9IHRlc3RCeXRlc1tpXTsKKyAgICB9CisKKyAgICBpZihhcnJheXNBcmVF
cXVhbChyZWFkUmVzdWx0LCBleHBlY3RlZCkpeworICAgICAgICBoZWFkZXJXcml0ZVN1Y2Nlc3Mg
PSB0cnVlOworICAgICAgICByZWFkUmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVy
LnJlYWRIZWFkZXJCeXRlcyg0LCAyOCkpOworICAgICAgICBpZihhcnJheXNBcmVFcXVhbChyZWFk
UmVzdWx0LCBleHBlY3RlZC5zbGljZSg0LCAzMikpKXsKKyAgICAgICAgICAgIGhlYWRlclJlYWRT
dWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvY3VtZW50Lndy
aXRlKCJGQUlMOiBIZWFkZXIgb2Zmc2V0IHJlYWQiKTsKKyAgICAgICAgfSAgIAorICAgIH0gZWxz
ZSB7CisgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBIZWFkZXIgd3JpdGUiKTsKKyAgICB9
CisKKyAgICBpZihoZWFkZXJXcml0ZVN1Y2Nlc3MgJiYgaGVhZGVyUmVhZFN1Y2Nlc3MpeworICAg
ICAgICBpbml0aWFsRGF0YSA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZlci5yZWFkRGF0YUJ5
dGVzKDAsIDE2KSk7CisKKyAgICAgICAgc3RyZWFtQnVmZmVyLndyaXRlRGF0YUJ5dGVzKHRlc3RC
eXRlcy5zbGljZSgwLDgpLCAwLCA4KTsKKyAgICAgICAgc3RyZWFtQnVmZmVyLndyaXRlRGF0YUJ5
dGVzKHRlc3RCeXRlcy5zbGljZSg4LDE2KSwgOCwgOCk7CisgICAgICAgIHJlYWRSZXN1bHQgPSBu
ZXcgVWludDhBcnJheShzdHJlYW1CdWZmZXIucmVhZERhdGFCeXRlcygwKSk7CisKKyAgICAgICAg
aWYoYXJyYXlzQXJlRXF1YWwocmVhZFJlc3VsdCwgdGVzdEJ5dGVzKSl7CisgICAgICAgICAgICBk
YXRhV3JpdGVTdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAgICAgcmVhZFJlc3VsdCA9IG5ldyBV
aW50OEFycmF5KHN0cmVhbUJ1ZmZlci5yZWFkRGF0YUJ5dGVzKDMpKTsKKyAgICAgICAgICAgIGlm
KGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQsIHRlc3RCeXRlcy5zbGljZSgzKSkpeworICAgICAg
ICAgICAgICAgIGRhdGFSZWFkU3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9ICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogRGF0YSBvZmZzZXQgcmVhZCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9jdW1lbnQu
d3JpdGUoIkZBSUw6IERhdGEgd3JpdGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGRhdGFX
cml0ZVN1Y2Nlc3MgJiYgZGF0YVJlYWRTdWNjZXNzKXsKKyAgICAgICAgICAgIGRvY3VtZW50Lndy
aXRlKCJQQVNTIik7CisgICAgICAgIH0KKyAgICB9Cit9IGVsc2UgeworICAgIC8vIElQQyBub3Qg
ZW5hYmxlZCBzbyB0aGlzIHRlc3QgcGFzc2VzIGJ5IGRlZmF1bHQuCisgICAgZG9jdW1lbnQud3Jp
dGUoIlBBU1MiKTsgICAgCit9Cis8L3NjcmlwdD4KKzxwPlRlc3QgcGFzc2VzIGlmIGl0IGRvZXMg
bm90IGNyYXNoIGFuZCBoYXMgbm8gJ0ZBSUwnIG91dHB1dDwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454773</attachid>
            <date>2022-03-15 16:35:30 -0700</date>
            <delta_ts>2022-03-15 21:22:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220315163529.patch</filename>
            <type>text/plain</type>
            <size>18727</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLjQ4ZGE3NjY0OGRlYmMyODdiYWU1ZTQ2ZjlhMzY4NjA2
YTVjYzk3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDMtMTUgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb246OmJ1ZmZl
ckZvclRlc3RpbmcpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0
aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3Bw
OgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5n
KToKKyAgICAgICAgKElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRlc3Rpbmcp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6cmVhZEhlYWRlckJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkRGF0YUJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVy
OjpyZWFkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlSGVhZGVyQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlRGF0YUJ5dGVz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9u
QnVmZmVyOjp3cml0ZUJ5dGVzKToKKwogMjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBEZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNsaWVudENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKaW5kZXggNTRkZmRlOTQyMzQ2N2IyZDc0NDFmODNmODBi
OGI1MWZkM2Q5ZWU4Zi4uZGQ5YTZiYTRiZTA4OGIyODFhOTk0YzUyNjJjNzNhNGYzN2EzMzkyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHAKQEAgLTc4LDQgKzc4LDkgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9u
OjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlSWZOZWVkZWQoKQogICAgIHdha2VVcFNlcnZlcigp
OwogfQogCitTdHJlYW1Db25uZWN0aW9uQnVmZmVyKiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpi
dWZmZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gJm1fYnVmZmVyOworfQorCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgK
aW5kZXggNWVlNjFmN2MxODFjYmFlODU3ZTNhNzgxODEyNjk1MWI5ODViNDk5Mi4uNmIxM2Y3Nzg4
NjNmMDI0NDcwYzBjZmU2MzI2NzIyZjBjYTg0ZDY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaApAQCAtNzQsNiArNzQsNyBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgU2VuZFN5bmNSZXN1bHQgPSBDb25uZWN0aW9uOjpTZW5kU3lu
Y1Jlc3VsdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogICAgIFNlbmRT
eW5jUmVzdWx0IHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCBPYmpl
Y3RJZGVudGlmaWVyPFU+IGRlc3RpbmF0aW9uSUQsIFRpbWVvdXQpOworICAgIFN0cmVhbUNvbm5l
Y3Rpb25CdWZmZXIqIGJ1ZmZlckZvclRlc3RpbmcoKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9u
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25C
dWZmZXIuY3BwCmluZGV4IDc1ZjRlZTM1OTJjMzdjZTQ1ZTYyMTM4NDdiNmJlMDRiNjlkOTAwMDEu
LmQzZjllZDAwZjA0NTFkYmEzMmU3M2NlOGMzYWI5ZjgyMTYxNTYzMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3BwCkBA
IC0xMDAsNCArMTAwLDE0IEBAIHN0ZDo6b3B0aW9uYWw8U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcj4g
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlCiAgICAgcmV0dXJuIFN0
cmVhbUNvbm5lY3Rpb25CdWZmZXIgeyBzaGFyZWRNZW1vcnkucmVsZWFzZU5vbk51bGwoKSwgZGF0
YVNpemUsICBXVEZNb3ZlKCpzZW1hcGhvcmUpIH07CiB9CiAKK1NwYW48dWludDhfdD4gU3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlcjo6aGVhZGVyRm9yVGVzdGluZygpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBtX3NoYXJlZE1lbW9y
eS0+c2l6ZSgpIC0gaGVhZGVyU2l6ZSgpIH07Cit9CisKK1NwYW48dWludDhfdD4gU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRlc3RpbmcoKQoreworICAgIHJldHVybiB7IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPigodWludDhfdCopbV9zaGFyZWRNZW1vcnktPmRhdGEoKSArIGhlYWRlclNp
emUoKSksIG1fc2hhcmVkTWVtb3J5LT5zaXplKCkgLSBoZWFkZXJTaXplKCkgfTsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZl
ci5oCmluZGV4IDIyYWUxMTNhNzFhMjkzYjI0Y2NjNjY4MWNhYzVlODE3ZGRkOGNlOGEuLmJmNTcy
ZjNmN2JhNDE4OGU3OGU5Y2MwZGVhMWNkMDYzYmQ4Njc0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmgKQEAgLTExNSw2ICsx
MTUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmVhbUNvbm5lY3Rpb25CdWZmZXI+IGRlY29kZShEZWNvZGVy
Jik7CiAKKyAgICBTcGFuPHVpbnQ4X3Q+IGhlYWRlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVp
bnQ4X3Q+IGRhdGFGb3JUZXN0aW5nKCk7CisKIHByaXZhdGU6CiAgICAgU3RyZWFtQ29ubmVjdGlv
bkJ1ZmZlcihSZWY8V2ViS2l0OjpTaGFyZWRNZW1vcnk+JiYsIHNpemVfdCBtZW1vcnlTaXplLCBT
ZW1hcGhvcmUmJiBjbGllbnRXYWl0U2VtYXBob3JlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCA3M2ZiMzEwMWUyNmM2
YzZmMWQyNWNjMWFhY2Q0YzEzYTEyMTc3NzhlLi41OTcyYWJmYzkxM2JlNDkzMmU4ODgwYmMyNzI4
ZDNkNDdhMDI5MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtMTE5LDYgKzExOSw4IEBAIHB1YmxpYzoKICAgICBJUEM6
OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3N0cmVhbUNv
bm5lY3Rpb247IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSlNJUENTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOworCiAgICAgSlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uKEpTSVBDJiBq
c0lQQywgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAg
ICAgICAgOiBtX2pzSVBDKGpzSVBDKQogICAgICAgICAsIG1fc3RyZWFtQ29ubmVjdGlvbiB7IGNv
bm5lY3Rpb24sIGJ1ZmZlclNpemUgfQpAQCAtMTY3LDYgKzE2OSwxMyBAQCBwcml2YXRlOgogCiAg
ICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygpOwogCisg
ICAgc3RhdGljIEpTVmFsdWVSZWYgcmVhZEhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0
YXRpYyBKU1ZhbHVlUmVmIHJlYWREYXRhQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpT
VmFsdWVSZWYgcmVhZEJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFNwYW48dWludDhfdD4pOworICAgIHN0YXRp
YyBKU1ZhbHVlUmVmIHdyaXRlSGVhZGVyQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpT
VmFsdWVSZWYgd3JpdGVEYXRhQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVS
ZWYgd3JpdGVCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBTcGFuPHVpbnQ4X3Q+KTsKKwogICAgIFdlYWtQdHI8
SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uPiBtX3N0cmVhbUNvbm5lY3Rpb247CiB9OwogCkBA
IC02MjksNiArNjM4LDEwIEBAIHZvaWQgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpmaW5h
bGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1N0
cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiB7CiAgICAgc3RhdGljIGNv
bnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInJlYWRIZWFk
ZXJCeXRlcyIsIHJlYWRIZWFkZXJCeXRlcywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJ3cml0ZUhlYWRl
ckJ5dGVzIiwgd3JpdGVIZWFkZXJCeXRlcywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJyZWFkRGF0YUJ5
dGVzIiwgcmVhZERhdGFCeXRlcywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJ3cml0ZURhdGFCeXRlcyIs
IHdyaXRlRGF0YUJ5dGVzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKICAg
ICByZXR1cm4gZnVuY3Rpb25zOwpAQCAtODg0LDYgKzg5NywxNzkgQEAgSlNWYWx1ZVJlZiBKU1No
YXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAK
K0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkSGVhZGVyQnl0ZXMo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3Jh
cHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyKSB7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUi
X3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAg
fQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgInN0cmVhbUNvbm5lY3Rp
b24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworICAgIH0KKworICAgIGF1dG8gYnVmZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3Ry
ZWFtQ29ubmVjdGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAg
ICBTcGFuPHVpbnQ4X3Q+IHNwYW4gPSBidWZmZXItPmhlYWRlckZvclRlc3RpbmcoKTsKKworICAg
IHJldHVybiByZWFkQnl0ZXMoY29udGV4dCwgbnVsbHB0ciwgdGhpc09iamVjdCwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHNwYW4pOworfQorCitKU1ZhbHVlUmVmIEpTSVBD
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZERhdGFCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNP
YmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoIWpzU3Ry
ZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29ubmVjdGlvbiBub3QgdmFsaWQiX3MpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisg
ICAgYXV0byBidWZmZXIgPSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0
cmVhbUNvbm5lY3Rpb24uYnVmZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3Bh
biA9IGJ1ZmZlci0+ZGF0YUZvclRlc3RpbmcoKTsKKworICAgIHJldHVybiByZWFkQnl0ZXMoY29u
dGV4dCwgbnVsbHB0ciwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24sIHNwYW4pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZl
cjo6cmVhZEJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgU3Bhbjx1aW50OF90PiBzcGFuKQorewor
ICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAgIHNpemVfdCBsZW5ndGggPSBzcGFuLnNpemUoKTsK
KyAgICB1aW50OF90KiBkYXRhID0gc3Bhbi5kYXRhKCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCkgewor
ICAgICAgICBhdXRvIG9mZnNldFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudHNbMF0pKTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIGZpcnN0IGFy
Z3VtZW50IG11c3QgYmUgYSBieXRlIG9mZnNldCB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKm9mZnNldFZhbHVlID4gbGVuZ3RoKQorICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSAqb2Zmc2V0VmFsdWU7CisgICAgICAg
IGxlbmd0aCAtPSBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7
CisgICAgICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxP
YmplY3QsIGFyZ3VtZW50c1sxXSkpOworICAgICAgICBpZiAoIWxlbmd0aFZhbHVlKSB7CisgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25k
IGFyZ3VtZW50IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIl9zKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoKmxlbmd0aFZhbHVlIDwgbGVuZ3RoKQorICAgICAgICAgICAgbGVuZ3RoID0g
Kmxlbmd0aFZhbHVlOworICAgIH0KKworICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBKU0M6OkFycmF5
QnVmZmVyOjpjcmVhdGUoZGF0YSArIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBKU0M6OkpTQXJyYXlC
dWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5n
TW9kZSgpKSkKKyAgICAgICAganNBcnJheUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICBpZiAoIWpzQXJy
YXlCdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0
LCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgYXJyYXkgYnVmZmVyIGZvciB0aGUgcmVhZCBieXRlcyJf
cyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7Cit9CisKK0pTVmFsdWVSZWYgSlNJ
UENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZUhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBSZWZQdHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwg
dGhpc09iamVjdCk7CisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0
aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICgh
anNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9u
ID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJf
cyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CisKKyAgICBhdXRvIGJ1ZmZlciA9IGpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24t
Pm1fc3RyZWFtQ29ubmVjdGlvbi5idWZmZXJGb3JUZXN0aW5nKCk7CisgICAgU3Bhbjx1aW50OF90
PiBzcGFuID0gYnVmZmVyLT5oZWFkZXJGb3JUZXN0aW5nKCk7CisKKyAgICByZXR1cm4gd3JpdGVC
eXRlcyhjb250ZXh0LCBudWxscHRyLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVu
dHMsIGV4Y2VwdGlvbiwgc3Bhbik7Cit9CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0
aW9uQnVmZmVyOjp3cml0ZURhdGFCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVm
UHRyIGpzU3RyZWFtQnVmZmVyID0gdG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAg
IGlmICghanNTdHJlYW1CdWZmZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5t
X3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAic3RyZWFtQ29ubmVjdGlvbiBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0byBidWZm
ZXIgPSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rp
b24uYnVmZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci0+
ZGF0YUZvclRlc3RpbmcoKTsKKworICAgIHJldHVybiB3cml0ZUJ5dGVzKGNvbnRleHQsIG51bGxw
dHIsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBzcGFu
KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlQnl0
ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBTcGFuPHVpbnQ4X3Q+IHNwYW4pCit7CisgICAgYXV0byB0
eXBlID0gYXJndW1lbnRDb3VudCA/IEpTVmFsdWVHZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbikgOiBrSlNUeXBlZEFycmF5VHlwZU5vbmU7CisgICAgaWYg
KHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVOb25lKSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGFy
cmF5IGJ1ZmZlciBvciBhIHR5cGVkIGFycmF5Il9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGF1dG8gZGF0YSA9IGFycmF5QnVm
ZmVyRGF0YUZyb21WYWx1ZVJlZihjb250ZXh0LCB0eXBlLCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisgICAgaWYgKCFkYXRhLmJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJDb3VsZCBub3QgcmVhZCB0aGUgYnVmZmVyIl9zKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIHNp
emVfdCBvZmZzZXQgPSAwOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKworICAg
IHNpemVfdCBzaGFyZWRNZW1vcnlTaXplID0gc3Bhbi5zaXplKCk7CisgICAgdWludDhfdCogZGVz
dGluYXRpb25EYXRhID0gc3Bhbi5kYXRhKCk7CisKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0
b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7
CisgICAgICAgIGF1dG8gb2Zmc2V0VmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxP
YmplY3QsIGFyZ3VtZW50c1sxXSkpOworICAgICAgICBpZiAoIW9mZnNldFZhbHVlKSB7CisgICAg
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25k
IGFyZ3VtZW50IG11c3QgYmUgYSBieXRlIG9mZnNldCB0byB3cml0ZSJfcyk7CisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCpvZmZzZXRWYWx1ZSA+PSBzaGFyZWRNZW1vcnlTaXplKSB7CisgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJPZmZzZXQgaXMgdG9vIGJpZyJf
cyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ID0gKm9mZnNldFZhbHVlOworICAgIH0KKworICAgIGlm
IChhcmd1bWVudENvdW50ID4gMikgeworICAgICAgICBhdXRvIGxlbmd0aFZhbHVlID0gY29udmVy
dFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMl0pKTsKKyAgICAgICAgaWYg
KCFsZW5ndGhWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJv
cihjb250ZXh0LCAiVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRl
cyB0byB3cml0ZSJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCpsZW5ndGhWYWx1ZSA+IHNoYXJlZE1l
bW9yeVNpemUgLSBvZmZzZXQgfHwgKmxlbmd0aFZhbHVlID4gbGVuZ3RoKSB7CisgICAgICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgbnVtYmVyIG9mIGJ5
dGVzIHRvIHdyaXRlIGlzIHRvbyBiaWciX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9ICpsZW5n
dGhWYWx1ZTsKKyAgICB9CisKKyAgICBtZW1jcHkoZGVzdGluYXRpb25EYXRhICsgb2Zmc2V0LCBk
YXRhLmJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKIEpTQ2xhc3NSZWYgSlNJUEM6OndyYXBwZXJDbGFzcygpCiB7CiAgICAgc3Rh
dGljIEpTQ2xhc3NSZWYganNDbGFzczsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3N2E1YTYyZWE3NDlmMTAzNDg5MjQyZTkz
Y2QzZjI0MzhmMDQ5YzAxLi40MWM5NDQxNDZlMzM2ZjVhY2RkNzMzMWI0NmVmMWE4ZDkyMDQ4ZmY1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDMtMTAgIFNpbW9uIExld2lzICA8c2ltb24u
bGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEZ1bmN0aW9uYWwgdGVzdHMgZm9yIHJlYWQgYW5k
IHdyaXRlIG1ldGhvZHMgb2YgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MzAKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vODk2NzY0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGlwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWw6IEFk
ZGVkLgorCiAyMDIyLTAzLTA3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+
CiAKICAgICAgICAgTGF5b3V0VGVzdHMvd2ViZ2wvbWF4LWFjdGl2ZS1jb250ZXh0cy1nYy5odG1s
IGlzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFk
LXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQt
d3JpdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyNTQwZWI1NzZmMTJiOGE2OGI2N2RmMzUx
NjJhMWY1ODY5YjQyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFt
LWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1BBU1MKK1Rl
c3QgcGFzc2VzIGlmIGl0IGRvZXMgbm90IGNyYXNoIGFuZCBoYXMgbm8gJ0ZBSUwnIG91dHB1dApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1s
IGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU2ZGZhNjllZWRhNzc1NGQxYTVlM2Y3ZjEwNDg1ZjAzODIyY2I1YTIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwKQEAg
LTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJ
UENUZXN0aW5nQVBJRW5hYmxlZD10cnVlIF0gLS0+Cis8c2NyaXB0PgorZnVuY3Rpb24gYXJyYXlz
QXJlRXF1YWwoYSwgYikgeworICAgIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBhLmV2ZXJ5KCh2YWwsIGkpID0+IHZhbCA9PT0gYltp
XSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKQorCitpZiAod2luZG93LklQQykgeworICAgIGxldCBoZWFkZXJSZWFkU3VjY2VzcyA9IGZh
bHNlOworICAgIGxldCBoZWFkZXJXcml0ZVN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBsZXQgZGF0YVJl
YWRTdWNjZXNzID0gZmFsc2U7CisgICAgbGV0IGRhdGFXcml0ZVN1Y2Nlc3MgPSBmYWxzZTsKKwor
ICAgIGNvbnN0IHRlc3RCeXRlcyA9IFVpbnQ4QXJyYXkuZnJvbSh7bGVuZ3RoOiAxNn0sICh4LCBp
KSA9PiBpICsgMHg0MSk7CisgICAgY29uc3QgYnVmZmVyU2l6ZSA9IDQ4OworICAgIGNvbnN0IHN0
cmVhbUNvbm5lY3Rpb24gPSBJUEMuY3JlYXRlU3RyZWFtQ2xpZW50Q29ubmVjdGlvbignR1BVJywg
YnVmZmVyU2l6ZSk7CisKKyAgICBsZXQgc3RyZWFtQnVmZmVyID0gc3RyZWFtQ29ubmVjdGlvbi5z
dHJlYW1CdWZmZXIoKTsKKyAgICBsZXQgaW5pdGlhbERhdGEgPSBuZXcgVWludDhBcnJheShzdHJl
YW1CdWZmZXIucmVhZEhlYWRlckJ5dGVzKDAsIDMyKSk7CisKKyAgICBzdHJlYW1CdWZmZXIud3Jp
dGVIZWFkZXJCeXRlcyh0ZXN0Qnl0ZXMsIDAsIDQpOworICAgIHN0cmVhbUJ1ZmZlci53cml0ZUhl
YWRlckJ5dGVzKHRlc3RCeXRlcy5zbGljZSg0LDgpLCA0LCA0KTsKKworICAgIGxldCByZWFkUmVz
dWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWRIZWFkZXJCeXRlcygwLCAzMikp
OworCisgICAgbGV0IGV4cGVjdGVkID0gaW5pdGlhbERhdGEuc2xpY2UoKTsKKyAgICBmb3IobGV0
IGk9MDsgaTw4OyBpKyspeworICAgICAgICBleHBlY3RlZFtpXSA9IHRlc3RCeXRlc1tpXTsKKyAg
ICB9CisKKyAgICBpZihhcnJheXNBcmVFcXVhbChyZWFkUmVzdWx0LCBleHBlY3RlZCkpeworICAg
ICAgICBoZWFkZXJXcml0ZVN1Y2Nlc3MgPSB0cnVlOworICAgICAgICByZWFkUmVzdWx0ID0gbmV3
IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWRIZWFkZXJCeXRlcyg0LCAyOCkpOworICAgICAg
ICBpZihhcnJheXNBcmVFcXVhbChyZWFkUmVzdWx0LCBleHBlY3RlZC5zbGljZSg0LCAzMikpKXsK
KyAgICAgICAgICAgIGhlYWRlclJlYWRTdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBIZWFkZXIgb2Zmc2V0IHJlYWQiKTsK
KyAgICAgICAgfSAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlM
OiBIZWFkZXIgd3JpdGUiKTsKKyAgICB9CisKKyAgICBpZihoZWFkZXJXcml0ZVN1Y2Nlc3MgJiYg
aGVhZGVyUmVhZFN1Y2Nlc3MpeworICAgICAgICBzdHJlYW1CdWZmZXIud3JpdGVEYXRhQnl0ZXMo
dGVzdEJ5dGVzLnNsaWNlKDAsOCksIDAsIDgpOworICAgICAgICBzdHJlYW1CdWZmZXIud3JpdGVE
YXRhQnl0ZXModGVzdEJ5dGVzLnNsaWNlKDgsMTYpLCA4LCA4KTsKKyAgICAgICAgcmVhZFJlc3Vs
dCA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZlci5yZWFkRGF0YUJ5dGVzKDApKTsKKworICAg
ICAgICBpZihhcnJheXNBcmVFcXVhbChyZWFkUmVzdWx0LCB0ZXN0Qnl0ZXMpKXsKKyAgICAgICAg
ICAgIGRhdGFXcml0ZVN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgcmVhZFJlc3VsdCA9IG5l
dyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZlci5yZWFkRGF0YUJ5dGVzKDMpKTsKKyAgICAgICAgICAg
IGlmKGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQsIHRlc3RCeXRlcy5zbGljZSgzKSkpeworICAg
ICAgICAgICAgICAgIGRhdGFSZWFkU3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9ICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogRGF0YSBvZmZzZXQgcmVh
ZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9jdW1l
bnQud3JpdGUoIkZBSUw6IERhdGEgd3JpdGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGRh
dGFXcml0ZVN1Y2Nlc3MgJiYgZGF0YVJlYWRTdWNjZXNzKXsKKyAgICAgICAgICAgIGRvY3VtZW50
LndyaXRlKCJQQVNTIik7CisgICAgICAgIH0KKyAgICB9Cit9IGVsc2UgeworICAgIC8vIElQQyBu
b3QgZW5hYmxlZCBzbyB0aGlzIHRlc3QgcGFzc2VzIGJ5IGRlZmF1bHQuCisgICAgZG9jdW1lbnQu
d3JpdGUoIlBBU1MiKTsgICAgCit9Cis8L3NjcmlwdD4KKzxwPlRlc3QgcGFzc2VzIGlmIGl0IGRv
ZXMgbm90IGNyYXNoIGFuZCBoYXMgbm8gJ0ZBSUwnIG91dHB1dDwvcD4KKzwvYm9keT4KKzwvaHRt
bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454796</attachid>
            <date>2022-03-15 21:22:59 -0700</date>
            <delta_ts>2022-03-17 10:19:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220315212258.patch</filename>
            <type>text/plain</type>
            <size>18818</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLjQ4ZGE3NjY0OGRlYmMyODdiYWU1ZTQ2ZjlhMzY4NjA2
YTVjYzk3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDMtMTUgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb246OmJ1ZmZl
ckZvclRlc3RpbmcpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0
aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3Bw
OgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5n
KToKKyAgICAgICAgKElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRlc3Rpbmcp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6cmVhZEhlYWRlckJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkRGF0YUJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVy
OjpyZWFkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlSGVhZGVyQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlRGF0YUJ5dGVz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9u
QnVmZmVyOjp3cml0ZUJ5dGVzKToKKwogMjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBEZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNsaWVudENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKaW5kZXggNTRkZmRlOTQyMzQ2N2IyZDc0NDFmODNmODBi
OGI1MWZkM2Q5ZWU4Zi4uYjEwMWUwMmZkYjVlNWE0YTU2ODYxZGM3ZWViZjFiYTJhMWNlMmI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHAKQEAgLTc4LDQgKzc4LDkgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9u
OjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlSWZOZWVkZWQoKQogICAgIHdha2VVcFNlcnZlcigp
OwogfQogCitTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpi
dWZmZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9idWZmZXI7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaApp
bmRleCA1ZWU2MWY3YzE4MWNiYWU4NTdlM2E3ODE4MTI2OTUxYjk4NWI0OTkyLi5iYjdiM2E2ZWI4
YTZkY2IyOWEwYzM4NTUzZmYzM2Y1Nzg3ZjJhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCkBAIC03NCw2ICs3NCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBTZW5kU3luY1Jlc3VsdCA9IENvbm5lY3Rpb246OlNlbmRTeW5j
UmVzdWx0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgU2VuZFN5
bmNSZXN1bHQgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIE9iamVj
dElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgVGltZW91dCk7CisgICAgU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlciYgYnVmZmVyRm9yVGVzdGluZygpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25C
dWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlci5jcHAKaW5kZXggNzVmNGVlMzU5MmMzN2NlNDVlNjIxMzg0N2I2YmUwNGI2OWQ5MDAwMS4u
ZDNmOWVkMDBmMDQ1MWRiYTMyZTczY2U4YzNhYjlmODIxNjE1NjMwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKQEAg
LTEwMCw0ICsxMDAsMTQgQEAgc3RkOjpvcHRpb25hbDxTdHJlYW1Db25uZWN0aW9uQnVmZmVyPiBT
dHJlYW1Db25uZWN0aW9uQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGUKICAgICByZXR1cm4gU3Ry
ZWFtQ29ubmVjdGlvbkJ1ZmZlciB7IHNoYXJlZE1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpLCBkYXRh
U2l6ZSwgIFdURk1vdmUoKnNlbWFwaG9yZSkgfTsKIH0KIAorU3Bhbjx1aW50OF90PiBTdHJlYW1D
b25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4geyBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIG1fc2hhcmVkTWVtb3J5
LT5zaXplKCkgLSBoZWFkZXJTaXplKCkgfTsKK30KKworU3Bhbjx1aW50OF90PiBTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOjpkYXRhRm9yVGVzdGluZygpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8dWludDhfdCo+KCh1aW50OF90KiltX3NoYXJlZE1lbW9yeS0+ZGF0YSgpICsgaGVhZGVyU2l6
ZSgpKSwgbV9zaGFyZWRNZW1vcnktPnNpemUoKSAtIGhlYWRlclNpemUoKSB9OworfQorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVy
LmgKaW5kZXggMjJhZTExM2E3MWEyOTNiMjRjY2M2NjgxY2FjNWU4MTdkZGQ4Y2U4YS4uYmY1NzJm
M2Y3YmE0MTg4ZTc4ZTljYzBkZWExY2QwNjNiZDg2NzQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaApAQCAtMTE1LDYgKzEx
NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcj4gZGVjb2RlKERlY29kZXIm
KTsKIAorICAgIFNwYW48dWludDhfdD4gaGVhZGVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWlu
dDhfdD4gZGF0YUZvclRlc3RpbmcoKTsKKwogcHJpdmF0ZToKICAgICBTdHJlYW1Db25uZWN0aW9u
QnVmZmVyKFJlZjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4mJiwgc2l6ZV90IG1lbW9yeVNpemUsIFNl
bWFwaG9yZSYmIGNsaWVudFdhaXRTZW1hcGhvcmUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwCmluZGV4IDczZmIzMTAxZTI2YzZj
NmYxZDI1Y2MxYWFjZDRjMTNhMTIxNzc3OGUuLmVlMTY0NWVmNGUwYzg0NDc1NzQwM2QyY2RlNTFh
ZDRiMTEzMDJjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0lQQ1Rlc3RpbmdBUEkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0lQQ1Rlc3RpbmdBUEkuY3BwCkBAIC0xMTksNiArMTE5LDggQEAgcHVibGljOgogICAgIElQQzo6
U3RyZWFtQ2xpZW50Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fc3RyZWFtQ29u
bmVjdGlvbjsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKU0lQQ1N0cmVhbUNvbm5l
Y3Rpb25CdWZmZXI7CisKICAgICBKU0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24oSlNJUEMmIGpz
SVBDLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBidWZmZXJTaXplKQogICAg
ICAgICA6IG1fanNJUEMoanNJUEMpCiAgICAgICAgICwgbV9zdHJlYW1Db25uZWN0aW9uIHsgY29u
bmVjdGlvbiwgYnVmZmVyU2l6ZSB9CkBAIC0xNjcsNiArMTY5LDEzIEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7CiAKKyAg
ICBzdGF0aWMgSlNWYWx1ZVJlZiByZWFkSGVhZGVyQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVj
dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisgICAgc3Rh
dGljIEpTVmFsdWVSZWYgcmVhZERhdGFCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiByZWFkQnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgU3Bhbjx1aW50OF90Pik7CisgICAgc3RhdGlj
IEpTVmFsdWVSZWYgd3JpdGVIZWFkZXJCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiB3cml0ZURhdGFCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJl
ZiB3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFNwYW48dWludDhfdD4pOworCiAgICAgV2Vha1B0cjxK
U0lQQ1N0cmVhbUNsaWVudENvbm5lY3Rpb24+IG1fc3RyZWFtQ29ubmVjdGlvbjsKIH07CiAKQEAg
LTYyOSw2ICs2MzgsMTAgQEAgdm9pZCBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OmZpbmFs
aXplKEpTT2JqZWN0UmVmIG9iamVjdCkKIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIEpTSVBDU3Ry
ZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6c3RhdGljRnVuY3Rpb25zKCkKIHsKICAgICBzdGF0aWMgY29u
c3QgSlNTdGF0aWNGdW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicmVhZEhlYWRl
ckJ5dGVzIiwgcmVhZEhlYWRlckJ5dGVzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndyaXRlSGVhZGVy
Qnl0ZXMiLCB3cml0ZUhlYWRlckJ5dGVzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgInJlYWREYXRhQnl0
ZXMiLCByZWFkRGF0YUJ5dGVzLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCisgICAgICAgIHsgIndyaXRlRGF0YUJ5dGVzIiwg
d3JpdGVEYXRhQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwogICAg
IHJldHVybiBmdW5jdGlvbnM7CkBAIC04ODQsNiArODk3LDE3OSBAQCBKU1ZhbHVlUmVmIEpTU2hh
cmVkTWVtb3J5Ojp3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwg
SlNPYmplYwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAor
SlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnJlYWRIZWFkZXJCeXRlcyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0gdG9XcmFw
cGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIpIHsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJf
cyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29ubmVjdGlv
biBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgfQorCisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBidWZmZXIg
PSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24u
YnVmZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci5oZWFk
ZXJGb3JUZXN0aW5nKCk7CisKKyAgICByZXR1cm4gcmVhZEJ5dGVzKGNvbnRleHQsIG51bGxwdHIs
IHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBzcGFuKTsK
K30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnJlYWREYXRhQnl0
ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0ciBqc1N0cmVhbUJ1ZmZlciA9IHRv
V3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyKSB7
CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5
cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uKSB7Cisg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgInN0cmVhbUNvbm5l
Y3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgIH0KKworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYgYnVm
ZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbi0+bV9zdHJlYW1Db25uZWN0
aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVpbnQ4X3Q+IHNwYW4gPSBidWZmZXIu
ZGF0YUZvclRlc3RpbmcoKTsKKworICAgIHJldHVybiByZWFkQnl0ZXMoY29udGV4dCwgbnVsbHB0
ciwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHNwYW4p
OworfQorCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZEJ5dGVz
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbiwgU3Bhbjx1aW50OF90PiBzcGFuKQoreworICAgIHNpemVfdCBv
ZmZzZXQgPSAwOworICAgIHNpemVfdCBsZW5ndGggPSBzcGFuLnNpemUoKTsKKyAgICB1aW50OF90
KiBkYXRhID0gc3Bhbi5kYXRhKCk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250
ZXh0KTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCkgeworICAgICAgICBhdXRv
IG9mZnNldFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNbMF0pKTsKKyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3Qg
YmUgYSBieXRlIG9mZnNldCB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKm9mZnNldFZh
bHVlID4gbGVuZ3RoKQorICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvZmZzZXQgPSAqb2Zmc2V0VmFsdWU7CisgICAgICAgIGxlbmd0aCAtPSBv
ZmZzZXQ7CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgICAgIGF1
dG8gbGVuZ3RoVmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50c1sxXSkpOworICAgICAgICBpZiAoIWxlbmd0aFZhbHVlKSB7CisgICAgICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11
c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIl9zKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Kmxlbmd0aFZhbHVlIDwgbGVuZ3RoKQorICAgICAgICAgICAgbGVuZ3RoID0gKmxlbmd0aFZhbHVl
OworICAgIH0KKworICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVh
dGUoZGF0YSArIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBKU0M6OkpTQXJyYXlCdWZmZXIqIGpzQXJy
YXlCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKSkKKyAg
ICAgICAganNBcnJheUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBzdHJ1
Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICBpZiAoIWpzQXJyYXlCdWZmZXIpIHsK
KyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiRmFpbGVkIHRv
IGNyZWF0ZSB0aGUgYXJyYXkgYnVmZmVyIGZvciB0aGUgcmVhZCBieXRlcyJfcyk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICByZXR1
cm4gdG9SZWYoanNBcnJheUJ1ZmZlcik7Cit9CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOjp3cml0ZUhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBSZWZQdHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7
CisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRl
VHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICghanNTdHJlYW1CdWZm
ZXItPm1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlw
ZUVycm9yKGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJfcyk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBJUEM6
OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImIGJ1ZmZlciA9IGpzU3RyZWFtQnVmZmVyLT5tX3N0cmVh
bUNvbm5lY3Rpb24tPm1fc3RyZWFtQ29ubmVjdGlvbi5idWZmZXJGb3JUZXN0aW5nKCk7CisgICAg
U3Bhbjx1aW50OF90PiBzcGFuID0gYnVmZmVyLmhlYWRlckZvclRlc3RpbmcoKTsKKworICAgIHJl
dHVybiB3cml0ZUJ5dGVzKGNvbnRleHQsIG51bGxwdHIsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291
bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uLCBzcGFuKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0
cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlRGF0YUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBSZWZQdHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09i
amVjdCk7CisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICghanNTdHJl
YW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJfcyk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAg
ICBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImIGJ1ZmZlciA9IGpzU3RyZWFtQnVmZmVyLT5t
X3N0cmVhbUNvbm5lY3Rpb24tPm1fc3RyZWFtQ29ubmVjdGlvbi5idWZmZXJGb3JUZXN0aW5nKCk7
CisgICAgU3Bhbjx1aW50OF90PiBzcGFuID0gYnVmZmVyLmRhdGFGb3JUZXN0aW5nKCk7CisKKyAg
ICByZXR1cm4gd3JpdGVCeXRlcyhjb250ZXh0LCBudWxscHRyLCB0aGlzT2JqZWN0LCBhcmd1bWVu
dENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgc3Bhbik7Cit9CisKK0pTVmFsdWVSZWYgSlNJ
UENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwg
U3Bhbjx1aW50OF90PiBzcGFuKQoreworICAgIGF1dG8gdHlwZSA9IGFyZ3VtZW50Q291bnQgPyBK
U1ZhbHVlR2V0VHlwZWRBcnJheVR5cGUoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
IDoga0pTVHlwZWRBcnJheVR5cGVOb25lOworICAgIGlmICh0eXBlID09IGtKU1R5cGVkQXJyYXlU
eXBlTm9uZSkgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQs
ICJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIgb3IgYSB0eXBlZCBh
cnJheSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CisKKyAgICBhdXRvIGRhdGEgPSBhcnJheUJ1ZmZlckRhdGFGcm9tVmFsdWVSZWYoY29u
dGV4dCwgdHlwZSwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlmICghZGF0YS5idWZm
ZXIpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiQ291
bGQgbm90IHJlYWQgdGhlIGJ1ZmZlciJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBz
aXplX3QgbGVuZ3RoID0gZGF0YS5sZW5ndGg7CisKKyAgICBzaXplX3Qgc2hhcmVkTWVtb3J5U2l6
ZSA9IHNwYW4uc2l6ZSgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uRGF0YSA9IHNwYW4uZGF0
YSgpOworCisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBhdXRv
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMSkgeworICAgICAgICBhdXRvIG9mZnNldFZh
bHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0pKTsK
KyAgICAgICAgaWYgKCFvZmZzZXRWYWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgYnl0
ZSBvZmZzZXQgdG8gd3JpdGUiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqb2Zmc2V0VmFsdWUgPj0g
c2hhcmVkTWVtb3J5U2l6ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVF
cnJvcihjb250ZXh0LCAiT2Zmc2V0IGlzIHRvbyBiaWciX3MpOworICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIG9mZnNl
dCA9ICpvZmZzZXRWYWx1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDIpIHsK
KyAgICAgICAgYXV0byBsZW5ndGhWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0b0pTKGdsb2JhbE9i
amVjdCwgYXJndW1lbnRzWzJdKSk7CisgICAgICAgIGlmICghbGVuZ3RoVmFsdWUpIHsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSB0aGlyZCBh
cmd1bWVudCBtdXN0IGJlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUiX3MpOworICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9Cisg
ICAgICAgIGlmICgqbGVuZ3RoVmFsdWUgPiBzaGFyZWRNZW1vcnlTaXplIC0gb2Zmc2V0IHx8ICps
ZW5ndGhWYWx1ZSA+IGxlbmd0aCkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5
cGVFcnJvcihjb250ZXh0LCAiVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSBpcyB0b28gYmln
Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7CisgICAgfQorCisgICAg
bWVtY3B5KGRlc3RpbmF0aW9uRGF0YSArIG9mZnNldCwgZGF0YS5idWZmZXIsIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBKU0NsYXNzUmVm
IEpTSVBDOjp3cmFwcGVyQ2xhc3MoKQogewogICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzQ2xhc3M7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggNzdhNWE2MmVhNzQ5ZjEwMzQ4OTI0MmU5M2NkM2YyNDM4ZjA0OWMwMS4uNDFjOTQ0
MTQ2ZTMzNmY1YWNkZDczMzFiNDZlZjFhOGQ5MjA0OGZmNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDIyLTAzLTEwICBTaW1vbiBMZXdpcyAgPHNpbW9uLmxld2lzQGFwcGxlLmNvbT4KKworICAg
ICAgICBGdW5jdGlvbmFsIHRlc3RzIGZvciByZWFkIGFuZCB3cml0ZSBtZXRob2RzIG9mIEpTSVBD
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5Njc2NDYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpcGMvc3Ry
ZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaXBj
L3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1sOiBBZGRlZC4KKwogMjAyMi0wMy0wNyAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIExheW91dFRlc3Rz
L3dlYmdsL21heC1hY3RpdmUtY29udGV4dHMtZ2MuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMjU0MGViNTc2ZjEyYjhhNjhiNjdkZjM1MTYyYTFmNTg2OWI0MjA1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyIEBACitQQVNTCitUZXN0IHBhc3NlcyBpZiBpdCBkb2VzIG5v
dCBjcmFzaCBhbmQgaGFzIG5vICdGQUlMJyBvdXRwdXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbCBiL0xheW91dFRlc3RzL2lwYy9zdHJl
YW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmRmYTY5ZWVkYTc3NTRkMWE1
ZTNmN2YxMDQ4NWYwMzgyMmNiNWEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaXBj
L3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgSVBDVGVzdGluZ0FQSUVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGFycmF5c0FyZUVxdWFsKGEsIGIpIHsKKyAgICBp
ZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gYS5ldmVyeSgodmFsLCBpKSA9PiB2YWwgPT09IGJbaV0pOworfQorCitpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCkKKworaWYgKHdpbmRvdy5JUEMp
IHsKKyAgICBsZXQgaGVhZGVyUmVhZFN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBsZXQgaGVhZGVyV3Jp
dGVTdWNjZXNzID0gZmFsc2U7CisgICAgbGV0IGRhdGFSZWFkU3VjY2VzcyA9IGZhbHNlOworICAg
IGxldCBkYXRhV3JpdGVTdWNjZXNzID0gZmFsc2U7CisKKyAgICBjb25zdCB0ZXN0Qnl0ZXMgPSBV
aW50OEFycmF5LmZyb20oe2xlbmd0aDogMTZ9LCAoeCwgaSkgPT4gaSArIDB4NDEpOworICAgIGNv
bnN0IGJ1ZmZlclNpemUgPSA0ODsKKyAgICBjb25zdCBzdHJlYW1Db25uZWN0aW9uID0gSVBDLmNy
ZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24oJ0dQVScsIGJ1ZmZlclNpemUpOworCisgICAgbGV0
IHN0cmVhbUJ1ZmZlciA9IHN0cmVhbUNvbm5lY3Rpb24uc3RyZWFtQnVmZmVyKCk7CisgICAgbGV0
IGluaXRpYWxEYXRhID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWRIZWFkZXJCeXRl
cygwLCAzMikpOworCisgICAgc3RyZWFtQnVmZmVyLndyaXRlSGVhZGVyQnl0ZXModGVzdEJ5dGVz
LCAwLCA0KTsKKyAgICBzdHJlYW1CdWZmZXIud3JpdGVIZWFkZXJCeXRlcyh0ZXN0Qnl0ZXMuc2xp
Y2UoNCw4KSwgNCwgNCk7CisKKyAgICBsZXQgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0
cmVhbUJ1ZmZlci5yZWFkSGVhZGVyQnl0ZXMoMCwgMzIpKTsKKworICAgIGxldCBleHBlY3RlZCA9
IGluaXRpYWxEYXRhLnNsaWNlKCk7CisgICAgZm9yKGxldCBpPTA7IGk8ODsgaSsrKXsKKyAgICAg
ICAgZXhwZWN0ZWRbaV0gPSB0ZXN0Qnl0ZXNbaV07CisgICAgfQorCisgICAgaWYoYXJyYXlzQXJl
RXF1YWwocmVhZFJlc3VsdCwgZXhwZWN0ZWQpKXsKKyAgICAgICAgaGVhZGVyV3JpdGVTdWNjZXNz
ID0gdHJ1ZTsKKyAgICAgICAgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZl
ci5yZWFkSGVhZGVyQnl0ZXMoNCwgMjgpKTsKKyAgICAgICAgaWYoYXJyYXlzQXJlRXF1YWwocmVh
ZFJlc3VsdCwgZXhwZWN0ZWQuc2xpY2UoNCwgMzIpKSl7CisgICAgICAgICAgICBoZWFkZXJSZWFk
U3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb2N1bWVudC53
cml0ZSgiRkFJTDogSGVhZGVyIG9mZnNldCByZWFkIik7CisgICAgICAgIH0gICAKKyAgICB9IGVs
c2UgeworICAgICAgICBkb2N1bWVudC53cml0ZSgiRkFJTDogSGVhZGVyIHdyaXRlIik7CisgICAg
fQorCisgICAgaWYoaGVhZGVyV3JpdGVTdWNjZXNzICYmIGhlYWRlclJlYWRTdWNjZXNzKXsKKyAg
ICAgICAgc3RyZWFtQnVmZmVyLndyaXRlRGF0YUJ5dGVzKHRlc3RCeXRlcy5zbGljZSgwLDgpLCAw
LCA4KTsKKyAgICAgICAgc3RyZWFtQnVmZmVyLndyaXRlRGF0YUJ5dGVzKHRlc3RCeXRlcy5zbGlj
ZSg4LDE2KSwgOCwgOCk7CisgICAgICAgIHJlYWRSZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHJl
YW1CdWZmZXIucmVhZERhdGFCeXRlcygwKSk7CisKKyAgICAgICAgaWYoYXJyYXlzQXJlRXF1YWwo
cmVhZFJlc3VsdCwgdGVzdEJ5dGVzKSl7CisgICAgICAgICAgICBkYXRhV3JpdGVTdWNjZXNzID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJlYWRSZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHJlYW1CdWZm
ZXIucmVhZERhdGFCeXRlcygzKSk7CisgICAgICAgICAgICBpZihhcnJheXNBcmVFcXVhbChyZWFk
UmVzdWx0LCB0ZXN0Qnl0ZXMuc2xpY2UoMykpKXsKKyAgICAgICAgICAgICAgICBkYXRhUmVhZFN1
Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfSAgZWxzZSB7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnQud3JpdGUoIkZBSUw6IERhdGEgb2Zmc2V0IHJlYWQiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBEYXRhIHdy
aXRlIik7CisgICAgICAgIH0KKworICAgICAgICBpZihkYXRhV3JpdGVTdWNjZXNzICYmIGRhdGFS
ZWFkU3VjY2Vzcyl7CisgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgiUEFTUyIpOworICAgICAg
ICB9CisgICAgfQorfSBlbHNlIHsKKyAgICAvLyBJUEMgbm90IGVuYWJsZWQgc28gdGhpcyB0ZXN0
IHBhc3NlcyBieSBkZWZhdWx0LgorICAgIGRvY3VtZW50LndyaXRlKCJQQVNTIik7ICAgIAorfQor
PC9zY3JpcHQ+Cis8cD5UZXN0IHBhc3NlcyBpZiBpdCBkb2VzIG5vdCBjcmFzaCBhbmQgaGFzIG5v
ICdGQUlMJyBvdXRwdXQ8L3A+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454988</attachid>
            <date>2022-03-17 10:19:14 -0700</date>
            <delta_ts>2022-03-17 10:52:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220317101913.patch</filename>
            <type>text/plain</type>
            <size>18754</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLmNlZDk3Mzg1YjIyYzk4Njk2N2E2Y2JmMjUwMTk4NjY0
YWM5OWZjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDMtMTUgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2ltbW8gS2lubnVuZW4uCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb246OmJ1ZmZl
ckZvclRlc3RpbmcpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0
aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3Bw
OgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5n
KToKKyAgICAgICAgKElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRlc3Rpbmcp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6cmVhZEhlYWRlckJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkRGF0YUJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVy
OjpyZWFkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlSGVhZGVyQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlRGF0YUJ5dGVz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9u
QnVmZmVyOjp3cml0ZUJ5dGVzKToKKwogMjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBEZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNsaWVudENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKaW5kZXggNTRkZmRlOTQyMzQ2N2IyZDc0NDFmODNmODBi
OGI1MWZkM2Q5ZWU4Zi4uYjEwMWUwMmZkYjVlNWE0YTU2ODYxZGM3ZWViZjFiYTJhMWNlMmI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHAKQEAgLTc4LDQgKzc4LDkgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9u
OjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlSWZOZWVkZWQoKQogICAgIHdha2VVcFNlcnZlcigp
OwogfQogCitTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpi
dWZmZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9idWZmZXI7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaApp
bmRleCA1ZWU2MWY3YzE4MWNiYWU4NTdlM2E3ODE4MTI2OTUxYjk4NWI0OTkyLi5iYjdiM2E2ZWI4
YTZkY2IyOWEwYzM4NTUzZmYzM2Y1Nzg3ZjJhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCkBAIC03NCw2ICs3NCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBTZW5kU3luY1Jlc3VsdCA9IENvbm5lY3Rpb246OlNlbmRTeW5j
UmVzdWx0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgU2VuZFN5
bmNSZXN1bHQgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIE9iamVj
dElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgVGltZW91dCk7CisgICAgU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlciYgYnVmZmVyRm9yVGVzdGluZygpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25C
dWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlci5jcHAKaW5kZXggNzVmNGVlMzU5MmMzN2NlNDVlNjIxMzg0N2I2YmUwNGI2OWQ5MDAwMS4u
ZjNmYTNlNDg1MjdkMjE4MzhmNTA1NDYwZWM4ZGNlMzEzYTA5ZGQyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKQEAg
LTEwMCw0ICsxMDAsMTQgQEAgc3RkOjpvcHRpb25hbDxTdHJlYW1Db25uZWN0aW9uQnVmZmVyPiBT
dHJlYW1Db25uZWN0aW9uQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGUKICAgICByZXR1cm4gU3Ry
ZWFtQ29ubmVjdGlvbkJ1ZmZlciB7IHNoYXJlZE1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpLCBkYXRh
U2l6ZSwgIFdURk1vdmUoKnNlbWFwaG9yZSkgfTsKIH0KIAorU3Bhbjx1aW50OF90PiBTdHJlYW1D
b25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4geyBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIG1fc2hhcmVkTWVtb3J5
LT5zaXplKCkgLSBoZWFkZXJTaXplKCkgfTsKK30KKworU3Bhbjx1aW50OF90PiBTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOjpkYXRhRm9yVGVzdGluZygpCit7CisgICAgcmV0dXJuIHsgZGF0YSgpLCBt
X3NoYXJlZE1lbW9yeS0+c2l6ZSgpIC0gaGVhZGVyU2l6ZSgpIH07Cit9CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaAppbmRl
eCAyMmFlMTEzYTcxYTI5M2IyNGNjYzY2ODFjYWM1ZTgxN2RkZDhjZThhLi5iZjU3MmYzZjdiYTQx
ODhlNzhlOWNjMGRlYTFjZDA2M2JkODY3NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oCkBAIC0xMTUsNiArMTE1LDkgQEAg
cHVibGljOgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxTdHJlYW1Db25uZWN0aW9uQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCisg
ICAgU3Bhbjx1aW50OF90PiBoZWFkZXJGb3JUZXN0aW5nKCk7CisgICAgU3Bhbjx1aW50OF90PiBk
YXRhRm9yVGVzdGluZygpOworCiBwcml2YXRlOgogICAgIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIo
UmVmPFdlYktpdDo6U2hhcmVkTWVtb3J5PiYmLCBzaXplX3QgbWVtb3J5U2l6ZSwgU2VtYXBob3Jl
JiYgY2xpZW50V2FpdFNlbWFwaG9yZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggNzNmYjMxMDFlMjZjNmM2ZjFkMjVj
YzFhYWNkNGMxM2ExMjE3Nzc4ZS4uZWUxNjQ1ZWY0ZTBjODQ0NzU3NDAzZDJjZGU1MWFkNGIxMTMw
MmNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVz
dGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVz
dGluZ0FQSS5jcHAKQEAgLTExOSw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgSVBDOjpTdHJlYW1D
bGllbnRDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9zdHJlYW1Db25uZWN0aW9u
OyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlcjsKKwogICAgIEpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbihKU0lQQyYganNJUEMsIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgICAgIDog
bV9qc0lQQyhqc0lQQykKICAgICAgICAgLCBtX3N0cmVhbUNvbm5lY3Rpb24geyBjb25uZWN0aW9u
LCBidWZmZXJTaXplIH0KQEAgLTE2Nyw2ICsxNjksMTMgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIAorICAgIHN0YXRp
YyBKU1ZhbHVlUmVmIHJlYWRIZWFkZXJCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVJlZiByZWFkRGF0YUJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IHJlYWRCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBTcGFuPHVpbnQ4X3Q+KTsKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiB3cml0ZUhlYWRlckJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IHdyaXRlRGF0YUJ5dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdyaXRl
Qnl0ZXMoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbiwgU3Bhbjx1aW50OF90Pik7CisKICAgICBXZWFrUHRyPEpTSVBDU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbj4gbV9zdHJlYW1Db25uZWN0aW9uOwogfTsKIApAQCAtNjI5LDYg
KzYzOCwxMCBAQCB2b2lkIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZmluYWxpemUoSlNP
YmplY3RSZWYgb2JqZWN0KQogY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogSlNJUENTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogewogICAgIHN0YXRpYyBjb25zdCBKU1N0
YXRpY0Z1bmN0aW9uIGZ1bmN0aW9uc1tdID0geworICAgICAgICB7ICJyZWFkSGVhZGVyQnl0ZXMi
LCByZWFkSGVhZGVyQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAid3JpdGVIZWFkZXJCeXRlcyIs
IHdyaXRlSGVhZGVyQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAicmVhZERhdGFCeXRlcyIsIHJl
YWREYXRhQnl0ZXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfSwKKyAgICAgICAgeyAid3JpdGVEYXRhQnl0ZXMiLCB3cml0ZURh
dGFCeXRlcywga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAgICAgcmV0dXJu
IGZ1bmN0aW9uczsKQEAgLTg4NCw2ICs4OTcsMTc5IEBAIEpTVmFsdWVSZWYgSlNTaGFyZWRNZW1v
cnk6OndyaXRlQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVj
CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitKU1ZhbHVl
UmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZEhlYWRlckJ5dGVzKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBSZWZQdHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29u
dGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAq
ZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAg
IGlmICghanNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhj
ZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2
YWxpZCJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CisKKyAgICBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImIGJ1ZmZlciA9IGpzU3Ry
ZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24tPm1fc3RyZWFtQ29ubmVjdGlvbi5idWZmZXJG
b3JUZXN0aW5nKCk7CisgICAgU3Bhbjx1aW50OF90PiBzcGFuID0gYnVmZmVyLmhlYWRlckZvclRl
c3RpbmcoKTsKKworICAgIHJldHVybiByZWFkQnl0ZXMoY29udGV4dCwgbnVsbHB0ciwgdGhpc09i
amVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHNwYW4pOworfQorCitK
U1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6cmVhZERhdGFCeXRlcyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0gdG9XcmFwcGVk
KGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIpIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJfcyk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisK
KyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29ubmVjdGlvbiBu
b3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisgICAgfQorCisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBidWZmZXIgPSBq
c1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24uYnVm
ZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci5kYXRhRm9y
VGVzdGluZygpOworCisgICAgcmV0dXJuIHJlYWRCeXRlcyhjb250ZXh0LCBudWxscHRyLCB0aGlz
T2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgc3Bhbik7Cit9CisK
K0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkQnl0ZXMoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uLCBTcGFuPHVpbnQ4X3Q+IHNwYW4pCit7CisgICAgc2l6ZV90IG9mZnNldCA9
IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IHNwYW4uc2l6ZSgpOworICAgIHVpbnQ4X3QqIGRhdGEg
PSBzcGFuLmRhdGEoKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOwor
ICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGlmIChhcmd1bWVudENvdW50KSB7CisgICAgICAgIGF1dG8gb2Zmc2V0
VmFsdWUgPSBjb252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1swXSkp
OworICAgICAgICBpZiAoIW9mZnNldFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGJ5
dGUgb2Zmc2V0IHRvIHJlYWQiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqb2Zmc2V0VmFsdWUgPiBs
ZW5ndGgpCisgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG9mZnNldCA9ICpvZmZzZXRWYWx1ZTsKKyAgICAgICAgbGVuZ3RoIC09IG9mZnNldDsK
KyAgICB9CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEpIHsKKyAgICAgICAgYXV0byBsZW5n
dGhWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzFd
KSk7CisgICAgICAgIGlmICghbGVuZ3RoVmFsdWUpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSB0
aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQiX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmICgqbGVuZ3Ro
VmFsdWUgPCBsZW5ndGgpCisgICAgICAgICAgICBsZW5ndGggPSAqbGVuZ3RoVmFsdWU7CisgICAg
fQorCisgICAgYXV0byBhcnJheUJ1ZmZlciA9IEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZShkYXRh
ICsgb2Zmc2V0LCBsZW5ndGgpOworICAgIEpTQzo6SlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZl
ciA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJy
YXlCdWZmZXJTdHJ1Y3R1cmUoYXJyYXlCdWZmZXItPnNoYXJpbmdNb2RlKCkpKQorICAgICAgICBq
c0FycmF5QnVmZmVyID0gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwg
V1RGTW92ZShhcnJheUJ1ZmZlcikpOworICAgIGlmICghanNBcnJheUJ1ZmZlcikgeworICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJGYWlsZWQgdG8gY3JlYXRl
IHRoZSBhcnJheSBidWZmZXIgZm9yIHRoZSByZWFkIGJ5dGVzIl9zKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIHJldHVybiB0b1Jl
Zihqc0FycmF5QnVmZmVyKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25C
dWZmZXI6OndyaXRlSGVhZGVyQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0
ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBp
ZiAoIWpzU3RyZWFtQnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlci0+bV9z
dHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgInN0cmVhbUNvbm5lY3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIElQQzo6U3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlciYgYnVmZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVj
dGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVp
bnQ4X3Q+IHNwYW4gPSBidWZmZXIuaGVhZGVyRm9yVGVzdGluZygpOworCisgICAgcmV0dXJuIHdy
aXRlQnl0ZXMoY29udGV4dCwgbnVsbHB0ciwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJn
dW1lbnRzLCBleGNlcHRpb24sIHNwYW4pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6d3JpdGVEYXRhQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IFJlZlB0ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsK
KyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVU
eXBlRXJyb3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZl
ci0+bV9zdHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgInN0cmVhbUNvbm5lY3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIElQQzo6
U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYgYnVmZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFt
Q29ubmVjdGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAgICBT
cGFuPHVpbnQ4X3Q+IHNwYW4gPSBidWZmZXIuZGF0YUZvclRlc3RpbmcoKTsKKworICAgIHJldHVy
biB3cml0ZUJ5dGVzKGNvbnRleHQsIG51bGxwdHIsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cywgZXhjZXB0aW9uLCBzcGFuKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBTcGFuPHVp
bnQ4X3Q+IHNwYW4pCit7CisgICAgYXV0byB0eXBlID0gYXJndW1lbnRDb3VudCA/IEpTVmFsdWVH
ZXRUeXBlZEFycmF5VHlwZShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikgOiBrSlNU
eXBlZEFycmF5VHlwZU5vbmU7CisgICAgaWYgKHR5cGUgPT0ga0pTVHlwZWRBcnJheVR5cGVOb25l
KSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBm
aXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciBvciBhIHR5cGVkIGFycmF5Il9z
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0K
KworICAgIGF1dG8gZGF0YSA9IGFycmF5QnVmZmVyRGF0YUZyb21WYWx1ZVJlZihjb250ZXh0LCB0
eXBlLCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgaWYgKCFkYXRhLmJ1ZmZlcikgewor
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJDb3VsZCBub3Qg
cmVhZCB0aGUgYnVmZmVyIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAgIHNpemVfdCBs
ZW5ndGggPSBkYXRhLmxlbmd0aDsKKworICAgIHNpemVfdCBzaGFyZWRNZW1vcnlTaXplID0gc3Bh
bi5zaXplKCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25EYXRhID0gc3Bhbi5kYXRhKCk7CisK
KyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIGF1dG8mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKSB7CisgICAgICAgIGF1dG8gb2Zmc2V0VmFsdWUgPSBj
b252ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1sxXSkpOworICAgICAg
ICBpZiAoIW9mZnNldFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlw
ZUVycm9yKGNvbnRleHQsICJUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBieXRlIG9mZnNl
dCB0byB3cml0ZSJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCpvZmZzZXRWYWx1ZSA+PSBzaGFyZWRN
ZW1vcnlTaXplKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNv
bnRleHQsICJPZmZzZXQgaXMgdG9vIGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ID0gKm9m
ZnNldFZhbHVlOworICAgIH0KKworICAgIGlmIChhcmd1bWVudENvdW50ID4gMikgeworICAgICAg
ICBhdXRvIGxlbmd0aFZhbHVlID0gY29udmVydFRvVWludDY0KHRvSlMoZ2xvYmFsT2JqZWN0LCBh
cmd1bWVudHNbMl0pKTsKKyAgICAgICAgaWYgKCFsZW5ndGhWYWx1ZSkgeworICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIHRoaXJkIGFyZ3VtZW50
IG11c3QgYmUgdGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSJfcyk7CisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCpsZW5ndGhWYWx1ZSA+IHNoYXJlZE1lbW9yeVNpemUgLSBvZmZzZXQgfHwgKmxlbmd0aFZh
bHVlID4gbGVuZ3RoKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9y
KGNvbnRleHQsICJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIGlzIHRvbyBiaWciX3MpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAg
ICB9CisgICAgICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKKyAgICB9CisKKyAgICBtZW1jcHko
ZGVzdGluYXRpb25EYXRhICsgb2Zmc2V0LCBkYXRhLmJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIEpTQ2xhc3NSZWYgSlNJUEM6
OndyYXBwZXJDbGFzcygpCiB7CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA3N2E1YTYyZWE3NDlmMTAzNDg5MjQyZTkzY2QzZjI0MzhmMDQ5YzAxLi42YWQwMTdhNTU1YjU0
NDZkOTgzYmU4YWI5OThhZTA1ZWY1MmVmMWNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjIt
MDMtMTAgIFNpbW9uIExld2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEZ1
bmN0aW9uYWwgdGVzdHMgZm9yIHJlYWQgYW5kIHdyaXRlIG1ldGhvZHMgb2YgSlNJUENTdHJlYW1D
b25uZWN0aW9uQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzc3MzAKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk2NzY0NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBLaW1tbyBLaW5udW5lbi4KKworICAgICAgICAqIGlwYy9zdHJlYW0tYnVm
ZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpcGMvc3RyZWFt
LWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWw6IEFkZGVkLgorCiAyMDIyLTAzLTA3ICBLaW1tbyBLaW5u
dW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVzdHMvd2ViZ2wv
bWF4LWFjdGl2ZS1jb250ZXh0cy1nYy5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYyNTQwZWI1NzZmMTJiOGE2OGI2N2RmMzUxNjJhMWY1ODY5YjQyMDUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDIgQEAKK1BBU1MKK1Rlc3QgcGFzc2VzIGlmIGl0IGRvZXMgbm90IGNyYXNo
IGFuZCBoYXMgbm8gJ0ZBSUwnIG91dHB1dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaXBjL3N0
cmVhbS1idWZmZXItcmVhZC13cml0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZm
ZXItcmVhZC13cml0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2ZGZhNjllZWRhNzc1NGQxYTVlM2Y3ZjEw
NDg1ZjAzODIyY2I1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFt
LWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJUENUZXN0aW5nQVBJRW5hYmxlZD10cnVlIF0gLS0+
Cis8c2NyaXB0PgorZnVuY3Rpb24gYXJyYXlzQXJlRXF1YWwoYSwgYikgeworICAgIGlmIChhLmJ5
dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBhLmV2
ZXJ5KCh2YWwsIGkpID0+IHZhbCA9PT0gYltpXSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKQorCitpZiAod2luZG93LklQQykgeworICAg
IGxldCBoZWFkZXJSZWFkU3VjY2VzcyA9IGZhbHNlOworICAgIGxldCBoZWFkZXJXcml0ZVN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICBsZXQgZGF0YVJlYWRTdWNjZXNzID0gZmFsc2U7CisgICAgbGV0IGRh
dGFXcml0ZVN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGNvbnN0IHRlc3RCeXRlcyA9IFVpbnQ4QXJy
YXkuZnJvbSh7bGVuZ3RoOiAxNn0sICh4LCBpKSA9PiBpICsgMHg0MSk7CisgICAgY29uc3QgYnVm
ZmVyU2l6ZSA9IDQ4OworICAgIGNvbnN0IHN0cmVhbUNvbm5lY3Rpb24gPSBJUEMuY3JlYXRlU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbignR1BVJywgYnVmZmVyU2l6ZSk7CisKKyAgICBsZXQgc3RyZWFt
QnVmZmVyID0gc3RyZWFtQ29ubmVjdGlvbi5zdHJlYW1CdWZmZXIoKTsKKyAgICBsZXQgaW5pdGlh
bERhdGEgPSBuZXcgVWludDhBcnJheShzdHJlYW1CdWZmZXIucmVhZEhlYWRlckJ5dGVzKDAsIDMy
KSk7CisKKyAgICBzdHJlYW1CdWZmZXIud3JpdGVIZWFkZXJCeXRlcyh0ZXN0Qnl0ZXMsIDAsIDQp
OworICAgIHN0cmVhbUJ1ZmZlci53cml0ZUhlYWRlckJ5dGVzKHRlc3RCeXRlcy5zbGljZSg0LDgp
LCA0LCA0KTsKKworICAgIGxldCByZWFkUmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVm
ZmVyLnJlYWRIZWFkZXJCeXRlcygwLCAzMikpOworCisgICAgbGV0IGV4cGVjdGVkID0gaW5pdGlh
bERhdGEuc2xpY2UoKTsKKyAgICBmb3IobGV0IGk9MDsgaTw4OyBpKyspeworICAgICAgICBleHBl
Y3RlZFtpXSA9IHRlc3RCeXRlc1tpXTsKKyAgICB9CisKKyAgICBpZihhcnJheXNBcmVFcXVhbChy
ZWFkUmVzdWx0LCBleHBlY3RlZCkpeworICAgICAgICBoZWFkZXJXcml0ZVN1Y2Nlc3MgPSB0cnVl
OworICAgICAgICByZWFkUmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWRI
ZWFkZXJCeXRlcyg0LCAyOCkpOworICAgICAgICBpZihhcnJheXNBcmVFcXVhbChyZWFkUmVzdWx0
LCBleHBlY3RlZC5zbGljZSg0LCAzMikpKXsKKyAgICAgICAgICAgIGhlYWRlclJlYWRTdWNjZXNz
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJG
QUlMOiBIZWFkZXIgb2Zmc2V0IHJlYWQiKTsKKyAgICAgICAgfSAgIAorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBIZWFkZXIgd3JpdGUiKTsKKyAgICB9CisKKyAg
ICBpZihoZWFkZXJXcml0ZVN1Y2Nlc3MgJiYgaGVhZGVyUmVhZFN1Y2Nlc3MpeworICAgICAgICBz
dHJlYW1CdWZmZXIud3JpdGVEYXRhQnl0ZXModGVzdEJ5dGVzLnNsaWNlKDAsOCksIDAsIDgpOwor
ICAgICAgICBzdHJlYW1CdWZmZXIud3JpdGVEYXRhQnl0ZXModGVzdEJ5dGVzLnNsaWNlKDgsMTYp
LCA4LCA4KTsKKyAgICAgICAgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZl
ci5yZWFkRGF0YUJ5dGVzKDApKTsKKworICAgICAgICBpZihhcnJheXNBcmVFcXVhbChyZWFkUmVz
dWx0LCB0ZXN0Qnl0ZXMpKXsKKyAgICAgICAgICAgIGRhdGFXcml0ZVN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICAgICAgcmVhZFJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHN0cmVhbUJ1ZmZlci5yZWFk
RGF0YUJ5dGVzKDMpKTsKKyAgICAgICAgICAgIGlmKGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQs
IHRlc3RCeXRlcy5zbGljZSgzKSkpeworICAgICAgICAgICAgICAgIGRhdGFSZWFkU3VjY2VzcyA9
IHRydWU7CisgICAgICAgICAgICB9ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC53
cml0ZSgiRkFJTDogRGF0YSBvZmZzZXQgcmVhZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoIkZBSUw6IERhdGEgd3JpdGUiKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmKGRhdGFXcml0ZVN1Y2Nlc3MgJiYgZGF0YVJlYWRTdWNj
ZXNzKXsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJQQVNTIik7CisgICAgICAgIH0KKyAg
ICB9Cit9IGVsc2UgeworICAgIC8vIElQQyBub3QgZW5hYmxlZCBzbyB0aGlzIHRlc3QgcGFzc2Vz
IGJ5IGRlZmF1bHQuCisgICAgZG9jdW1lbnQud3JpdGUoIlBBU1MiKTsgICAgCit9Cis8L3Njcmlw
dD4KKzxwPlRlc3QgcGFzc2VzIGlmIGl0IGRvZXMgbm90IGNyYXNoIGFuZCBoYXMgbm8gJ0ZBSUwn
IG91dHB1dDwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454995</attachid>
            <date>2022-03-17 10:52:32 -0700</date>
            <delta_ts>2022-03-17 12:57:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237730-20220317105231.patch</filename>
            <type>text/plain</type>
            <size>18729</size>
            <attacher name="Simon Lewis">simon.lewis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5
ZjcxMTI4MDA1ZTA5ODg0NTQ2MzE3YjguLmNlZDk3Mzg1YjIyYzk4Njk2N2E2Y2JmMjUwMTk4NjY0
YWM5OWZjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDMtMTUgIFNpbW9uIExl
d2lzICA8c2ltb24ubGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCByZWFkIGFuZCB3cml0
ZSBtZXRob2RzIHRvIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzMwCisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzg5Njc2NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2ltbW8gS2lubnVuZW4uCisK
KyAgICAgICAgV2hlbiB1c2luZyBJUENUZXN0aW5nQVBJLCB0aGlzIGNoYW5nZSBlbmFibGVzIHRo
ZSB1bmRlcmx5aW5nIGJ5dGVzCisgICAgICAgIG9mIGEgU3RyZWFtQ2xpZW50Q29ubmVjdGlvbiBi
dWZmZXIgdG8gYmUgbW9kaWZpZWQuCisKKyAgICAgICAgVGVzdDogaXBjL3N0cmVhbS1idWZmZXIt
cmVhZC13cml0ZS5odG1sCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb246OmJ1ZmZl
ckZvclRlc3RpbmcpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0
aW9uLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIuY3Bw
OgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5n
KToKKyAgICAgICAgKElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6ZGF0YUZvclRlc3Rpbmcp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uQnVmZmVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ29u
bmVjdGlvbkJ1ZmZlcjo6cmVhZEhlYWRlckJ5dGVzKToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjpyZWFkRGF0YUJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVy
OjpyZWFkQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVh
bUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlSGVhZGVyQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OndyaXRlRGF0YUJ5dGVz
KToKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUENTdHJlYW1Db25uZWN0aW9u
QnVmZmVyOjp3cml0ZUJ5dGVzKToKKwogMjAyMi0wMy0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBEZWxldGUgV2ViSURCU2VydmVyIGFuZCBXZWJJREJDb25u
ZWN0aW9uVG9DbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNsaWVudENvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ2xpZW50Q29ubmVjdGlvbi5jcHAKaW5kZXggNTRkZmRlOTQyMzQ2N2IyZDc0NDFmODNmODBi
OGI1MWZkM2Q5ZWU4Zi4uYjEwMWUwMmZkYjVlNWE0YTU2ODYxZGM3ZWViZjFiYTJhMWNlMmI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29u
bmVjdGlvbi5jcHAKQEAgLTc4LDQgKzc4LDkgQEAgdm9pZCBTdHJlYW1DbGllbnRDb25uZWN0aW9u
OjpzZW5kRGVmZXJyZWRXYWtlVXBNZXNzYWdlSWZOZWVkZWQoKQogICAgIHdha2VVcFNlcnZlcigp
OwogfQogCitTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBTdHJlYW1DbGllbnRDb25uZWN0aW9uOjpi
dWZmZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gbV9idWZmZXI7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNsaWVudENvbm5lY3Rpb24uaApp
bmRleCA1ZWU2MWY3YzE4MWNiYWU4NTdlM2E3ODE4MTI2OTUxYjk4NWI0OTkyLi5iYjdiM2E2ZWI4
YTZkY2IyOWEwYzM4NTUzZmYzM2Y1Nzg3ZjJhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9TdHJlYW1DbGllbnRDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ2xpZW50Q29ubmVjdGlvbi5oCkBAIC03NCw2ICs3NCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBTZW5kU3luY1Jlc3VsdCA9IENvbm5lY3Rpb246OlNlbmRTeW5j
UmVzdWx0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgU2VuZFN5
bmNSZXN1bHQgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIE9iamVj
dElkZW50aWZpZXI8VT4gZGVzdGluYXRpb25JRCwgVGltZW91dCk7CisgICAgU3RyZWFtQ29ubmVj
dGlvbkJ1ZmZlciYgYnVmZmVyRm9yVGVzdGluZygpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDU3RyZWFtQ2xpZW50Q29ubmVjdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25C
dWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1
ZmZlci5jcHAKaW5kZXggNzVmNGVlMzU5MmMzN2NlNDVlNjIxMzg0N2I2YmUwNGI2OWQ5MDAwMS4u
NzRhMTc4NDRjODYzZTA2YWE5ZDIwM2UzMmE1MmM3ZGFhOTEwN2NiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5jcHAKQEAg
LTEwMCw0ICsxMDAsMTQgQEAgc3RkOjpvcHRpb25hbDxTdHJlYW1Db25uZWN0aW9uQnVmZmVyPiBT
dHJlYW1Db25uZWN0aW9uQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGUKICAgICByZXR1cm4gU3Ry
ZWFtQ29ubmVjdGlvbkJ1ZmZlciB7IHNoYXJlZE1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpLCBkYXRh
U2l6ZSwgIFdURk1vdmUoKnNlbWFwaG9yZSkgfTsKIH0KIAorU3Bhbjx1aW50OF90PiBTdHJlYW1D
b25uZWN0aW9uQnVmZmVyOjpoZWFkZXJGb3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4geyBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIGhlYWRlclNpemUoKSB9
OworfQorCitTcGFuPHVpbnQ4X3Q+IFN0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OmRhdGFGb3JUZXN0
aW5nKCkKK3sKKyAgICByZXR1cm4geyBkYXRhKCksIG1fc2hhcmVkTWVtb3J5LT5zaXplKCkgLSBo
ZWFkZXJTaXplKCkgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oCmluZGV4IDIyYWUxMTNhNzFhMjkzYjI0Y2NjNjY4
MWNhYzVlODE3ZGRkOGNlOGEuLmJmNTcyZjNmN2JhNDE4OGU3OGU5Y2MwZGVhMWNkMDYzYmQ4Njc0
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rp
b25CdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0
aW9uQnVmZmVyLmgKQEAgLTExNSw2ICsxMTUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFN0cmVhbUNvbm5lY3Rp
b25CdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKKyAgICBTcGFuPHVpbnQ4X3Q+IGhlYWRlckZv
clRlc3RpbmcoKTsKKyAgICBTcGFuPHVpbnQ4X3Q+IGRhdGFGb3JUZXN0aW5nKCk7CisKIHByaXZh
dGU6CiAgICAgU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcihSZWY8V2ViS2l0OjpTaGFyZWRNZW1vcnk+
JiYsIHNpemVfdCBtZW1vcnlTaXplLCBTZW1hcGhvcmUmJiBjbGllbnRXYWl0U2VtYXBob3JlKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGlu
Z0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJ
LmNwcAppbmRleCA3M2ZiMzEwMWUyNmM2YzZmMWQyNWNjMWFhY2Q0YzEzYTEyMTc3NzhlLi5lZTE2
NDVlZjRlMGM4NDQ3NTc0MDNkMmNkZTUxYWQ0YjExMzAyY2NiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcApAQCAtMTE5LDYgKzEx
OSw4IEBAIHB1YmxpYzoKICAgICBJUEM6OlN0cmVhbUNsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rp
b24oKSB7IHJldHVybiBtX3N0cmVhbUNvbm5lY3Rpb247IH0KIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOworCiAgICAgSlNJUENTdHJlYW1D
bGllbnRDb25uZWN0aW9uKEpTSVBDJiBqc0lQQywgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICAgICAgOiBtX2pzSVBDKGpzSVBDKQogICAgICAgICAs
IG1fc3RyZWFtQ29ubmVjdGlvbiB7IGNvbm5lY3Rpb24sIGJ1ZmZlclNpemUgfQpAQCAtMTY3LDYg
KzE2OSwxMyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24q
IHN0YXRpY0Z1bmN0aW9ucygpOwogCisgICAgc3RhdGljIEpTVmFsdWVSZWYgcmVhZEhlYWRlckJ5
dGVzKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHJlYWREYXRhQnl0ZXMoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgcmVhZEJ5dGVzKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFNw
YW48dWludDhfdD4pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIHdyaXRlSGVhZGVyQnl0ZXMoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd3JpdGVEYXRhQnl0ZXMoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYgd3JpdGVCeXRlcyhKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBTcGFuPHVp
bnQ4X3Q+KTsKKwogICAgIFdlYWtQdHI8SlNJUENTdHJlYW1DbGllbnRDb25uZWN0aW9uPiBtX3N0
cmVhbUNvbm5lY3Rpb247CiB9OwogCkBAIC02MjksNiArNjM4LDEwIEBAIHZvaWQgSlNJUENTdHJl
YW1Db25uZWN0aW9uQnVmZmVyOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiBjb25zdCBK
U1N0YXRpY0Z1bmN0aW9uKiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXI6OnN0YXRpY0Z1bmN0
aW9ucygpCiB7CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljRnVuY3Rpb24gZnVuY3Rpb25zW10g
PSB7CisgICAgICAgIHsgInJlYWRIZWFkZXJCeXRlcyIsIHJlYWRIZWFkZXJCeXRlcywga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9
LAorICAgICAgICB7ICJ3cml0ZUhlYWRlckJ5dGVzIiwgd3JpdGVIZWFkZXJCeXRlcywga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9
LAorICAgICAgICB7ICJyZWFkRGF0YUJ5dGVzIiwgcmVhZERhdGFCeXRlcywga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAg
ICAgICB7ICJ3cml0ZURhdGFCeXRlcyIsIHdyaXRlRGF0YUJ5dGVzLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAgICAg
IHsgMCwgMCwgMCB9CiAgICAgfTsKICAgICByZXR1cm4gZnVuY3Rpb25zOwpAQCAtODg0LDYgKzg5
NywxNzkgQEAgSlNWYWx1ZVJlZiBKU1NoYXJlZE1lbW9yeTo6d3JpdGVCeXRlcyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CiAKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9u
QnVmZmVyOjpyZWFkSGVhZGVyQnl0ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFJlZlB0
ciBqc1N0cmVhbUJ1ZmZlciA9IHRvV3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KTsKKyAgICBp
ZiAoIWpzU3RyZWFtQnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJy
b3IoY29udGV4dCwgIldyb25nIHR5cGUiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKCFqc1N0cmVhbUJ1ZmZlci0+bV9z
dHJlYW1Db25uZWN0aW9uKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3Io
Y29udGV4dCwgInN0cmVhbUNvbm5lY3Rpb24gbm90IHZhbGlkIl9zKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIElQQzo6U3RyZWFt
Q29ubmVjdGlvbkJ1ZmZlciYgYnVmZmVyID0ganNTdHJlYW1CdWZmZXItPm1fc3RyZWFtQ29ubmVj
dGlvbi0+bV9zdHJlYW1Db25uZWN0aW9uLmJ1ZmZlckZvclRlc3RpbmcoKTsKKyAgICBTcGFuPHVp
bnQ4X3Q+IHNwYW4gPSBidWZmZXIuaGVhZGVyRm9yVGVzdGluZygpOworCisgICAgcmV0dXJuIHJl
YWRCeXRlcyhjb250ZXh0LCBudWxscHRyLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1
bWVudHMsIGV4Y2VwdGlvbiwgc3Bhbik7Cit9CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25u
ZWN0aW9uQnVmZmVyOjpyZWFkRGF0YUJ5dGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBS
ZWZQdHIganNTdHJlYW1CdWZmZXIgPSB0b1dyYXBwZWQoY29udGV4dCwgdGhpc09iamVjdCk7Cisg
ICAgaWYgKCFqc1N0cmVhbUJ1ZmZlcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlw
ZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KKworICAgIGlmICghanNTdHJlYW1CdWZmZXIt
Pm1fc3RyZWFtQ29ubmVjdGlvbikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJzdHJlYW1Db25uZWN0aW9uIG5vdCB2YWxpZCJfcyk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CisKKyAgICBJUEM6OlN0
cmVhbUNvbm5lY3Rpb25CdWZmZXImIGJ1ZmZlciA9IGpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNv
bm5lY3Rpb24tPm1fc3RyZWFtQ29ubmVjdGlvbi5idWZmZXJGb3JUZXN0aW5nKCk7CisgICAgU3Bh
bjx1aW50OF90PiBzcGFuID0gYnVmZmVyLmRhdGFGb3JUZXN0aW5nKCk7CisKKyAgICByZXR1cm4g
cmVhZEJ5dGVzKGNvbnRleHQsIG51bGxwdHIsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3VtZW50cywgZXhjZXB0aW9uLCBzcGFuKTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQ1N0cmVhbUNv
bm5lY3Rpb25CdWZmZXI6OnJlYWRCeXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFNwYW48dWludDhf
dD4gc3BhbikKK3sKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoID0g
c3Bhbi5zaXplKCk7CisgICAgdWludDhfdCogZGF0YSA9IHNwYW4uZGF0YSgpOworICAgIGF1dG8q
IGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQpIHsKKyAgICAgICAgYXV0byBvZmZzZXRWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0
b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdKSk7CisgICAgICAgIGlmICghb2Zmc2V0VmFs
dWUpIHsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwg
IlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgYnl0ZSBvZmZzZXQgdG8gcmVhZCJfcyk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCpvZmZzZXRWYWx1ZSA+IGxlbmd0aCkKKyAgICAgICAgICAgIG9mZnNl
dCA9IGxlbmd0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gKm9mZnNldFZh
bHVlOworICAgICAgICBsZW5ndGggLT0gb2Zmc2V0OworICAgIH0KKworICAgIGlmIChhcmd1bWVu
dENvdW50ID4gMSkgeworICAgICAgICBhdXRvIGxlbmd0aFZhbHVlID0gY29udmVydFRvVWludDY0
KHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgaWYgKCFsZW5ndGhW
YWx1ZSkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0
LCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVh
ZCJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCpsZW5ndGhWYWx1ZSA8IGxlbmd0aCkKKyAgICAgICAg
ICAgIGxlbmd0aCA9ICpsZW5ndGhWYWx1ZTsKKyAgICB9CisKKyAgICBhdXRvIGFycmF5QnVmZmVy
ID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGRhdGEgKyBvZmZzZXQsIGxlbmd0aCk7CisgICAg
SlNDOjpKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0
byogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShhcnJheUJ1
ZmZlci0+c2hhcmluZ01vZGUoKSkpCisgICAgICAgIGpzQXJyYXlCdWZmZXIgPSBKU0M6OkpTQXJy
YXlCdWZmZXI6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGFycmF5QnVmZmVyKSk7Cisg
ICAgaWYgKCFqc0FycmF5QnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBl
RXJyb3IoY29udGV4dCwgIkZhaWxlZCB0byBjcmVhdGUgdGhlIGFycmF5IGJ1ZmZlciBmb3IgdGhl
IHJlYWQgYnl0ZXMiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuIHRvUmVmKGpzQXJyYXlCdWZmZXIpOworfQorCitK
U1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6d3JpdGVIZWFkZXJCeXRlcyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0gdG9XcmFw
cGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIpIHsKKyAg
ICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3JvbmcgdHlwZSJf
cyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9
CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsKKyAgICAg
ICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29ubmVjdGlv
biBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisgICAgfQorCisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBidWZmZXIg
PSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5lY3Rpb24u
YnVmZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZlci5oZWFk
ZXJGb3JUZXN0aW5nKCk7CisKKyAgICByZXR1cm4gd3JpdGVCeXRlcyhjb250ZXh0LCBudWxscHRy
LCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbiwgc3Bhbik7
Cit9CisKK0pTVmFsdWVSZWYgSlNJUENTdHJlYW1Db25uZWN0aW9uQnVmZmVyOjp3cml0ZURhdGFC
eXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgUmVmUHRyIGpzU3RyZWFtQnVmZmVyID0g
dG9XcmFwcGVkKGNvbnRleHQsIHRoaXNPYmplY3QpOworICAgIGlmICghanNTdHJlYW1CdWZmZXIp
IHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiV3Jvbmcg
dHlwZSJfcyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CisKKyAgICBpZiAoIWpzU3RyZWFtQnVmZmVyLT5tX3N0cmVhbUNvbm5lY3Rpb24pIHsK
KyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAic3RyZWFtQ29u
bmVjdGlvbiBub3QgdmFsaWQiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisgICAgfQorCisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uQnVmZmVyJiBi
dWZmZXIgPSBqc1N0cmVhbUJ1ZmZlci0+bV9zdHJlYW1Db25uZWN0aW9uLT5tX3N0cmVhbUNvbm5l
Y3Rpb24uYnVmZmVyRm9yVGVzdGluZygpOworICAgIFNwYW48dWludDhfdD4gc3BhbiA9IGJ1ZmZl
ci5kYXRhRm9yVGVzdGluZygpOworCisgICAgcmV0dXJuIHdyaXRlQnl0ZXMoY29udGV4dCwgbnVs
bHB0ciwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24sIHNw
YW4pOworfQorCitKU1ZhbHVlUmVmIEpTSVBDU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlcjo6d3JpdGVC
eXRlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFNwYW48dWludDhfdD4gc3BhbikKK3sKKyAgICBhdXRv
IHR5cGUgPSBhcmd1bWVudENvdW50ID8gSlNWYWx1ZUdldFR5cGVkQXJyYXlUeXBlKGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSA6IGtKU1R5cGVkQXJyYXlUeXBlTm9uZTsKKyAgICBp
ZiAodHlwZSA9PSBrSlNUeXBlZEFycmF5VHlwZU5vbmUpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9
IGNyZWF0ZVR5cGVFcnJvcihjb250ZXh0LCAiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4g
YXJyYXkgYnVmZmVyIG9yIGEgdHlwZWQgYXJyYXkiX3MpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAgYXV0byBkYXRhID0gYXJyYXlC
dWZmZXJEYXRhRnJvbVZhbHVlUmVmKGNvbnRleHQsIHR5cGUsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKTsKKyAgICBpZiAoIWRhdGEuYnVmZmVyKSB7CisgICAgICAgICpleGNlcHRpb24gPSBjcmVh
dGVUeXBlRXJyb3IoY29udGV4dCwgIkNvdWxkIG5vdCByZWFkIHRoZSBidWZmZXIiX3MpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgfQorCisgICAg
c2l6ZV90IG9mZnNldCA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworCisg
ICAgc2l6ZV90IHNoYXJlZE1lbW9yeVNpemUgPSBzcGFuLnNpemUoKTsKKyAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkRhdGEgPSBzcGFuLmRhdGEoKTsKKworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9
IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEp
IHsKKyAgICAgICAgYXV0byBvZmZzZXRWYWx1ZSA9IGNvbnZlcnRUb1VpbnQ2NCh0b0pTKGdsb2Jh
bE9iamVjdCwgYXJndW1lbnRzWzFdKSk7CisgICAgICAgIGlmICghb2Zmc2V0VmFsdWUpIHsKKyAg
ICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBzZWNv
bmQgYXJndW1lbnQgbXVzdCBiZSBhIGJ5dGUgb2Zmc2V0IHRvIHdyaXRlIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoKm9mZnNldFZhbHVlID49IHNoYXJlZE1lbW9yeVNpemUpIHsKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIk9mZnNldCBpcyB0b28gYmln
Il9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICAgICAgfQorICAgICAgICBvZmZzZXQgPSAqb2Zmc2V0VmFsdWU7CisgICAgfQorCisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPiAyKSB7CisgICAgICAgIGF1dG8gbGVuZ3RoVmFsdWUgPSBjb252
ZXJ0VG9VaW50NjQodG9KUyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1syXSkpOworICAgICAgICBp
ZiAoIWxlbmd0aFZhbHVlKSB7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVy
cm9yKGNvbnRleHQsICJUaGUgdGhpcmQgYXJndW1lbnQgbXVzdCBiZSB0aGUgbnVtYmVyIG9mIGJ5
dGVzIHRvIHdyaXRlIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmxlbmd0aFZhbHVlID4gc2hhcmVk
TWVtb3J5U2l6ZSAtIG9mZnNldCB8fCAqbGVuZ3RoVmFsdWUgPiBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoY29udGV4dCwgIlRoZSBudW1iZXIgb2Yg
Ynl0ZXMgdG8gd3JpdGUgaXMgdG9vIGJpZyJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gKmxl
bmd0aFZhbHVlOworICAgIH0KKworICAgIG1lbWNweShkZXN0aW5hdGlvbkRhdGEgKyBvZmZzZXQs
IGRhdGEuYnVmZmVyLCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKwogSlNDbGFzc1JlZiBKU0lQQzo6d3JhcHBlckNsYXNzKCkKIHsKICAgICBz
dGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc3YTVhNjJlYTc0OWYxMDM0ODkyNDJl
OTNjZDNmMjQzOGYwNDljMDEuLjZhZDAxN2E1NTViNTQ0NmQ5ODNiZThhYjk5OGFlMDVlZjUyZWYx
Y2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMy0xMCAgU2ltb24gTGV3aXMgIDxzaW1v
bi5sZXdpc0BhcHBsZS5jb20+CisKKyAgICAgICAgRnVuY3Rpb25hbCB0ZXN0cyBmb3IgcmVhZCBh
bmQgd3JpdGUgbWV0aG9kcyBvZiBKU0lQQ1N0cmVhbUNvbm5lY3Rpb25CdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzczMAorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS84OTY3NjQ2MAorCisgICAgICAgIFJldmlld2VkIGJ5IEtpbW1vIEtpbm51
bmVuLgorCisgICAgICAgICogaXBjL3N0cmVhbS1idWZmZXItcmVhZC13cml0ZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGlwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbDog
QWRkZWQuCisKIDIwMjItMDMtMDcgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBMYXlvdXRUZXN0cy93ZWJnbC9tYXgtYWN0aXZlLWNvbnRleHRzLWdjLmh0
bWwgaXMgZmxha3kKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJl
YWQtd3JpdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaXBjL3N0cmVhbS1idWZmZXItcmVh
ZC13cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI1NDBlYjU3NmYxMmI4YTY4YjY3ZGYz
NTE2MmExZjU4NjliNDIwNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lwYy9zdHJl
YW0tYnVmZmVyLXJlYWQtd3JpdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUEFTUwor
VGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2ggYW5kIGhhcyBubyAnRkFJTCcgb3V0cHV0
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0
bWwgYi9MYXlvdXRUZXN0cy9pcGMvc3RyZWFtLWJ1ZmZlci1yZWFkLXdyaXRlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTZkZmE2OWVlZGE3NzU0ZDFhNWUzZjdmMTA0ODVmMDM4MjJjYjVhMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2lwYy9zdHJlYW0tYnVmZmVyLXJlYWQtd3JpdGUuaHRtbApA
QCAtMCwwICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IElQQ1Rlc3RpbmdBUElFbmFibGVkPXRydWUgXSAtLT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBhcnJh
eXNBcmVFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3Ro
KSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEuZXZlcnkoKHZhbCwgaSkgPT4gdmFsID09PSBi
W2ldKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpCisKK2lmICh3aW5kb3cuSVBDKSB7CisgICAgbGV0IGhlYWRlclJlYWRTdWNjZXNzID0g
ZmFsc2U7CisgICAgbGV0IGhlYWRlcldyaXRlU3VjY2VzcyA9IGZhbHNlOworICAgIGxldCBkYXRh
UmVhZFN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBsZXQgZGF0YVdyaXRlU3VjY2VzcyA9IGZhbHNlOwor
CisgICAgY29uc3QgdGVzdEJ5dGVzID0gVWludDhBcnJheS5mcm9tKHtsZW5ndGg6IDE2fSwgKHgs
IGkpID0+IGkgKyAweDQxKTsKKyAgICBjb25zdCBidWZmZXJTaXplID0gNDg7CisgICAgY29uc3Qg
c3RyZWFtQ29ubmVjdGlvbiA9IElQQy5jcmVhdGVTdHJlYW1DbGllbnRDb25uZWN0aW9uKCdHUFUn
LCBidWZmZXJTaXplKTsKKworICAgIGxldCBzdHJlYW1CdWZmZXIgPSBzdHJlYW1Db25uZWN0aW9u
LnN0cmVhbUJ1ZmZlcigpOworICAgIGxldCBpbml0aWFsRGF0YSA9IG5ldyBVaW50OEFycmF5KHN0
cmVhbUJ1ZmZlci5yZWFkSGVhZGVyQnl0ZXMoMCwgMzIpKTsKKworICAgIHN0cmVhbUJ1ZmZlci53
cml0ZUhlYWRlckJ5dGVzKHRlc3RCeXRlcywgMCwgNCk7CisgICAgc3RyZWFtQnVmZmVyLndyaXRl
SGVhZGVyQnl0ZXModGVzdEJ5dGVzLnNsaWNlKDQsOCksIDQsIDQpOworCisgICAgbGV0IHJlYWRS
ZXN1bHQgPSBuZXcgVWludDhBcnJheShzdHJlYW1CdWZmZXIucmVhZEhlYWRlckJ5dGVzKDAsIDMy
KSk7CisKKyAgICBsZXQgZXhwZWN0ZWQgPSBpbml0aWFsRGF0YS5zbGljZSgpOworICAgIGZvcihs
ZXQgaT0wOyBpPDg7IGkrKyl7CisgICAgICAgIGV4cGVjdGVkW2ldID0gdGVzdEJ5dGVzW2ldOwor
ICAgIH0KKworICAgIGlmKGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQsIGV4cGVjdGVkKSl7Cisg
ICAgICAgIGhlYWRlcldyaXRlU3VjY2VzcyA9IHRydWU7CisgICAgICAgIHJlYWRSZXN1bHQgPSBu
ZXcgVWludDhBcnJheShzdHJlYW1CdWZmZXIucmVhZEhlYWRlckJ5dGVzKDQsIDI4KSk7CisgICAg
ICAgIGlmKGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQsIGV4cGVjdGVkLnNsaWNlKDQsIDMyKSkp
eworICAgICAgICAgICAgaGVhZGVyUmVhZFN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoIkZBSUw6IEhlYWRlciBvZmZzZXQgcmVhZCIp
OworICAgICAgICB9ICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIkZB
SUw6IEhlYWRlciB3cml0ZSIpOworICAgIH0KKworICAgIGlmKGhlYWRlcldyaXRlU3VjY2VzcyAm
JiBoZWFkZXJSZWFkU3VjY2Vzcyl7CisgICAgICAgIHN0cmVhbUJ1ZmZlci53cml0ZURhdGFCeXRl
cyh0ZXN0Qnl0ZXMuc2xpY2UoMCw4KSwgMCwgOCk7CisgICAgICAgIHN0cmVhbUJ1ZmZlci53cml0
ZURhdGFCeXRlcyh0ZXN0Qnl0ZXMuc2xpY2UoOCwxNiksIDgsIDgpOworICAgICAgICByZWFkUmVz
dWx0ID0gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWREYXRhQnl0ZXMoMCkpOworCisg
ICAgICAgIGlmKGFycmF5c0FyZUVxdWFsKHJlYWRSZXN1bHQsIHRlc3RCeXRlcykpeworICAgICAg
ICAgICAgZGF0YVdyaXRlU3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICByZWFkUmVzdWx0ID0g
bmV3IFVpbnQ4QXJyYXkoc3RyZWFtQnVmZmVyLnJlYWREYXRhQnl0ZXMoMykpOworICAgICAgICAg
ICAgaWYoYXJyYXlzQXJlRXF1YWwocmVhZFJlc3VsdCwgdGVzdEJ5dGVzLnNsaWNlKDMpKSl7Cisg
ICAgICAgICAgICAgICAgZGF0YVJlYWRTdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gIGVs
c2UgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBEYXRhIG9mZnNldCBy
ZWFkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb2N1
bWVudC53cml0ZSgiRkFJTDogRGF0YSB3cml0ZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYo
ZGF0YVdyaXRlU3VjY2VzcyAmJiBkYXRhUmVhZFN1Y2Nlc3MpeworICAgICAgICAgICAgZG9jdW1l
bnQud3JpdGUoIlBBU1MiKTsKKyAgICAgICAgfQorICAgIH0KK30gZWxzZSB7CisgICAgLy8gSVBD
IG5vdCBlbmFibGVkIHNvIHRoaXMgdGVzdCBwYXNzZXMgYnkgZGVmYXVsdC4KKyAgICBkb2N1bWVu
dC53cml0ZSgiUEFTUyIpOyAgICAKK30KKzwvc2NyaXB0PgorPHA+VGVzdCBwYXNzZXMgaWYgaXQg
ZG9lcyBub3QgY3Jhc2ggYW5kIGhhcyBubyAnRkFJTCcgb3V0cHV0PC9wPgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>