<?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>197751</bug_id>
          
          <creation_ts>2019-05-09 12:24:01 -0700</creation_ts>
          <short_desc>[Apple Pay] Payment APIs should be completely disabled in web views into which clients have injected user scripts</short_desc>
          <delta_ts>2019-05-14 15:50:29 -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>New Bugs</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="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1534819</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-09 12:24:01 -0700</bug_when>
    <thetext>[Apple Pay] Payment APIs should be disabled in web views that clients have injected user scripts i into</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534820</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-09 12:24:51 -0700</bug_when>
    <thetext>rdar://problem/50631563</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534831</commentid>
    <comment_count>2</comment_count>
      <attachid>369514</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-09 12:39:22 -0700</bug_when>
    <thetext>Created attachment 369514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534837</commentid>
    <comment_count>3</comment_count>
      <attachid>369516</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-09 12:46:35 -0700</bug_when>
    <thetext>Created attachment 369516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534843</commentid>
    <comment_count>4</comment_count>
      <attachid>369516</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-05-09 12:55:48 -0700</bug_when>
    <thetext>Comment on attachment 369516
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        In r243324, when a document has had user agent scripts injected into it, payment APIs were
&gt; +        disabled at runtime by having all entry points return falsy values or throw exceptions
&gt; +        (e.g., ApplePaySession.canMakePayments() returns false).
&gt; +
&gt; +        In the case of user scripts in particular (e.g., WKUserScript), since we know whether these
&gt; +        exist at the time we create a document&apos;s DOMWindow, we can do better than r243324 by
&gt; +        completely disabling the payment APIs in the presence of user scripts.

It seems like it will be more confusing and more work for developers to have to deal with with these both (falsy values and completed disabled) cases. Since the developer already has to deal with the first case, why introduce this as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534844</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-09 12:59:50 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Comment on attachment 369516 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=369516&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        In r243324, when a document has had user agent scripts injected into it, payment APIs were
&gt; &gt; +        disabled at runtime by having all entry points return falsy values or throw exceptions
&gt; &gt; +        (e.g., ApplePaySession.canMakePayments() returns false).
&gt; &gt; +
&gt; &gt; +        In the case of user scripts in particular (e.g., WKUserScript), since we know whether these
&gt; &gt; +        exist at the time we create a document&apos;s DOMWindow, we can do better than r243324 by
&gt; &gt; +        completely disabling the payment APIs in the presence of user scripts.
&gt; 
&gt; It seems like it will be more confusing and more work for developers to have
&gt; to deal with with these both (falsy values and completed disabled) cases.
&gt; Since the developer already has to deal with the first case, why introduce
&gt; this as well?

We&apos;ve found some cases where sites check for API availability but do not use the API properly. For instance, some sites will render Apple Pay buttons whenever window.ApplePaySession exists without first calling canMakePayments().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534855</commentid>
    <comment_count>6</comment_count>
      <attachid>369516</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-05-09 14:00:29 -0700</bug_when>
    <thetext>Comment on attachment 369516
Patch

We should add a test that stores a reference to a PaymentRequest, has scripts injected then verify that using that stored reference still gets falsy values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535100</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-05-10 11:49:02 -0700</bug_when>
    <thetext>Is this a bug in the new test?

FAIL: (JS) JSTestEnabledForContext.cpp
--- WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp	2019-05-09 12:47:19.000000000 -0700
+++ /var/folders/19/dls3q4zx3yvd609xbdvv189h0000gn/T/tmpOkWHzN/JSTestEnabledForContext.cpp	2019-05-09 12:47:36.000000000 -0700
@@ -69,7 +69,6 @@
     JSTestEnabledForContextPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
         : JSC::JSNonFinalObject(vm, structure)
     {
-        didBecomePrototype();
     }
 
     void finishCreation(JSC::VM&amp;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535114</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-10 12:00:15 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #7)
&gt; Is this a bug in the new test?
&gt; 
&gt; FAIL: (JS) JSTestEnabledForContext.cpp
&gt; --- WebCore/bindings/scripts/test/JS/JSTestEnabledForContext.cpp	2019-05-09
&gt; 12:47:19.000000000 -0700
&gt; +++
&gt; /var/folders/19/dls3q4zx3yvd609xbdvv189h0000gn/T/tmpOkWHzN/
&gt; JSTestEnabledForContext.cpp	2019-05-09 12:47:36.000000000 -0700
&gt; @@ -69,7 +69,6 @@
&gt;      JSTestEnabledForContextPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*,
&gt; JSC::Structure* structure)
&gt;          : JSC::JSNonFinalObject(vm, structure)
&gt;      {
&gt; -        didBecomePrototype();
&gt;      }
&gt;  
&gt;      void finishCreation(JSC::VM&amp;);

No, I just need to rebase the result after r245082.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535235</commentid>
    <comment_count>9</comment_count>
      <attachid>369616</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-10 16:21:13 -0700</bug_when>
    <thetext>Created attachment 369616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535247</commentid>
    <comment_count>10</comment_count>
      <attachid>369620</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-10 16:33:45 -0700</bug_when>
    <thetext>Created attachment 369620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535262</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-10 17:00:18 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; Comment on attachment 369516 [details]
&gt; Patch
&gt; 
&gt; We should add a test that stores a reference to a PaymentRequest, has
&gt; scripts injected then verify that using that stored reference still gets
&gt; falsy values.

I added the test you suggested to attachment #369620.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536233</commentid>
    <comment_count>12</comment_count>
      <attachid>369889</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-05-14 13:57:53 -0700</bug_when>
    <thetext>Created attachment 369889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536283</commentid>
    <comment_count>13</comment_count>
      <attachid>369889</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-14 15:50:27 -0700</bug_when>
    <thetext>Comment on attachment 369889
Patch

Clearing flags on attachment: 369889

Committed r245314: &lt;https://trac.webkit.org/changeset/245314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536284</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-14 15:50:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369514</attachid>
            <date>2019-05-09 12:39:22 -0700</date>
            <delta_ts>2019-05-09 12:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197751-20190509123921.patch</filename>
            <type>text/plain</type>
            <size>49157</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc0NTkzNDM4NmEwODYz
ZGFmN2M3Nzc5YTI2MDM1NTJiMWUzNmIzZi4uMjRmZTk0MmM5NTBiZGIzNmQ0YTRjNjUxOWI4Nzkz
OGFmZTk2MTNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTA1LTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUgUGF5XSBQYXltZW50
IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZpZXdzIGludG8gd2hp
Y2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiByMjQzMzI0LCB3aGVuIGEgZG9jdW1lbnQgaGFzIGhhZCB1c2VyIGFnZW50IHNj
cmlwdHMgaW5qZWN0ZWQgaW50byBpdCwgcGF5bWVudCBBUElzIHdlcmUKKyAgICAgICAgZGlzYWJs
ZWQgYXQgcnVudGltZSBieSBoYXZpbmcgYWxsIGVudHJ5IHBvaW50cyByZXR1cm4gZmFsc3kgdmFs
dWVzIG9yIHRocm93IGV4Y2VwdGlvbnMKKyAgICAgICAgKGUuZy4sIEFwcGxlUGF5U2Vzc2lvbi5j
YW5NYWtlUGF5bWVudHMoKSByZXR1cm5zIGZhbHNlKS4KKworICAgICAgICBJbiB0aGUgY2FzZSBv
ZiB1c2VyIHNjcmlwdHMgaW4gcGFydGljdWxhciAoZS5nLiwgV0tVc2VyU2NyaXB0KSwgc2luY2Ug
d2Uga25vdyB3aGV0aGVyIHRoZXNlCisgICAgICAgIGV4aXN0IGF0IHRoZSB0aW1lIHdlIGNyZWF0
ZSBhIGRvY3VtZW50J3MgRE9NV2luZG93LCB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gcjI0MzMyNCBi
eQorICAgICAgICBjb21wbGV0ZWx5IGRpc2FibGluZyB0aGUgcGF5bWVudCBBUElzIGluIHRoZSBw
cmVzZW5jZSBvZiB1c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB0aGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHRoZSAnRW5hYmxlZEJ5Q29udGV4dCcgZXh0ZW5kZWQgYXR0cmli
dXRlIGZvcgorICAgICAgICBpbnRlcmZhY2VzLCB3aGljaCBpbnN0cnVjdHMgdGhlIGJpbmRpbmdz
IGdlbmVyYXRvciB0byBhZGQgYSBjb25qdW5jdCB0byB0aGUgcGF5bWVudCBBUEkKKyAgICAgICAg
Y29uc3RydWN0b3JzIHRoYXQgYXNrcyB0aGUgaW50ZXJmYWNlJ3MgaW1wbGVtZW50YXRpb24gY2xh
c3Mgd2hldGhlciBpdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IKKyAgICAgICAgYSBnaXZlbiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LiBUaGUgUGF5bWVudFJlcXVlc3QgYW5kIEFwcGxlUGF5U2Vzc2lv
biBpbnRlcmZhY2VzIGFkb3B0IHRoaXMKKyAgICAgICAgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSB0
byBpbXBsZW1lbnQgdGhlIG5ldyB1c2VyIHNjcmlwdCBjaGVjay4KKworICAgICAgICBBZGRlZCBh
IG5ldyBBUEkgdGVzdC4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNz
aW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3I6OnNob3VsZEVuYWJsZUFw
cGxlUGF5QVBJcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29v
cmRpbmF0b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRTZXNzaW9uOjplbmFibGVkRm9yQ29udGV4dCk6
CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5oOgorICAgICAgICAq
IE1vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmg6CisgICAgICAgICogTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdDo6ZW5hYmxlZEZvckNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvcGF5bWVu
dHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1
ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5lZWRzUnVudGltZUNoZWNrKToKKyAgICAgICAgKEdl
bmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbjoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3ByZXByb2Nlc3MtaWRscy5wbDoKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmlk
bDogQWRkZWQuCisKIDIwMTktMDUtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGwgcHJvdG90eXBlcyBzaG91bGQgY2FsbCBkaWRCZWNvbWVQcm90
b3R5cGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBh
eVNlc3Npb24uaWRsCmluZGV4IDY2YTg5Zjg5YjM5Yzk0ZTQ5MzgwZGY1YWJlNjkzYTAwODJmZGQw
MDUuLjA4NTBiZDViNjA1MDJlNmJmODVjMGVlNmJjYzcwNWY2OTA1OTM5MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5pZGwKQEAg
LTMwLDYgKzMwLDcgQEAKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENv
bnN0cnVjdG9yTWF5VGhyb3dFeGNlcHRpb24sCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1BcHBsZVBh
eSwKKyAgICBFbmFibGVkRm9yQ29udGV4dCwKIF0gaW50ZXJmYWNlIEFwcGxlUGF5U2Vzc2lvbiA6
IEV2ZW50VGFyZ2V0IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFUVVNfU1VDQ0VTUyA9
IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1RBVFVTX0ZBSUxVUkUgPSAxOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDUyNGY0MzY1OThjMjI4NDVmYTUzYzcxNjY0OWU3NTQ2OGMzNmNmMGEuLmQ1NTk5
NDhkMGE2ZmFhNjNlMjA1YmEwOWZjZjE5MmIxYjBiYjAyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKQEAgLTMx
LDkgKzMxLDExIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJMaW5rSWNvbkNv
bGxlY3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJQYXltZW50Q29v
cmRpbmF0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQYXltZW50U2Vzc2lvbi5oIgorI2luY2x1ZGUg
IlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKQEAgLTI1MSw2ICsyNTMsMjIgQEAgT3B0aW9uYWw8
U3RyaW5nPiBQYXltZW50Q29vcmRpbmF0b3I6OnZhbGlkYXRlZFBheW1lbnROZXR3b3JrKERvY3Vt
ZW50JiBkb2N1bWVudCwKICAgICByZXR1cm4gbV9jbGllbnQudmFsaWRhdGVkUGF5bWVudE5ldHdv
cmsocGF5bWVudE5ldHdvcmspOwogfQogCitib29sIFBheW1lbnRDb29yZGluYXRvcjo6c2hvdWxk
RW5hYmxlQXBwbGVQYXlBUElzKERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jbGllbnQuc3VwcG9ydHNVbnJlc3RyaWN0ZWRBcHBsZVBheSgpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoInNob3VsZEVuYWJsZUFwcGxlUGF5QVBJcygpIC0+IHRydWUgKHVu
cmVzdHJpY3RlZCBjbGllbnQpIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgc2hvdWxkRW5hYmxlQVBJcyA9IHRydWU7CisgICAgZG9jdW1lbnQucGFnZSgpLT51c2Vy
Q29udGVudFByb3ZpZGVyKCkuZm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYs
IGNvbnN0IFVzZXJTY3JpcHQmKSB7CisgICAgICAgIHNob3VsZEVuYWJsZUFQSXMgPSBmYWxzZTsK
KyAgICB9KTsKKworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInNob3VsZEVuYWJsZUFwcGxl
UGF5QVBJcygpIC0+ICVkIiwgc2hvdWxkRW5hYmxlQVBJcyk7CisgICAgcmV0dXJuIHNob3VsZEVu
YWJsZUFQSXM7Cit9CisKIGJvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpzaG91bGRBbGxvd0FwcGxl
UGF5KERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAobV9jbGllbnQuc3VwcG9y
dHNVbnJlc3RyaWN0ZWRBcHBsZVBheSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuaAppbmRleCAzYjMyMWEyMTg1NTBkMDk0
ZGNmZDExY2NiNjk0ZWFhNDU1Yzk1MGY5Li4yNjBhM2UyODExNjI2ZTdlNDhkY2IwMGMyMmUwNzYz
YzliMmE2ZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1Bh
eW1lbnRDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
UGF5bWVudENvb3JkaW5hdG9yLmgKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogCiAgICAgT3B0
aW9uYWw8U3RyaW5nPiB2YWxpZGF0ZWRQYXltZW50TmV0d29yayhEb2N1bWVudCYsIHVuc2lnbmVk
IHZlcnNpb24sIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCisgICAgYm9vbCBzaG91bGRFbmFibGVB
cHBsZVBheUFQSXMoRG9jdW1lbnQmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNo
b3VsZEFsbG93QXBwbGVQYXkoRG9jdW1lbnQmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNob3VsZEFsbG93VXNlckFnZW50U2NyaXB0cyhEb2N1bWVudCYpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCmlu
ZGV4IDg3YTQ0ZjRiMzViYjJmYjQyOTNlMzA0ZjI3ZjA2YjZlNmViYTE5NDkuLjY1ZDlmODY5YjA4
YzgxOTQ2NTY5Yzc5Nzc3ODc3ZjhjYWE0MzVhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzIsNiArNzMsMTUgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGF5bWVudFNlc3Npb246
OmNhbkNyZWF0ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIHJldHVybiB7IH07CiB9
CiAKK2Jvb2wgUGF5bWVudFNlc3Npb246OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCk7CisgICAgaWYgKGF1dG8gcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIHBhZ2UtPnBheW1lbnRDb29yZGluYXRvcigpLnNob3VsZEVuYWJsZUFwcGxl
UGF5QVBJcyhkb2N1bWVudCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMRV9QQVkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmgKaW5kZXggOGY3YTRiNjUw
ZjBiOTJmODE1ZjliNWQ1Y2NlMTc5YTdkNTI5MTA0My4uMzIyMmY1OWUwOTA2MTMzZWM0YzQ4Nzcz
ZTAxNzg1NDNmZjcxYTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9QYXltZW50U2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvUGF5bWVudFNlc3Npb24uaApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBQYXltZW50TWV0aG9k
OwogY2xhc3MgUGF5bWVudFNlc3Npb24gOiBwdWJsaWMgdmlydHVhbCBQYXltZW50U2Vzc2lvbkJh
c2UgewogcHVibGljOgogICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBjYW5DcmVhdGVTZXNz
aW9uKERvY3VtZW50Jik7CisgICAgc3RhdGljIGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCB2ZXJzaW9uKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZU1lcmNoYW50KFVSTCYmKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVu
dEhhbmRsZXIuY3BwCmluZGV4IDA0ODhlYWViNjZmYjUwYzliNDg1MDMwZWFmM2Q0ZDEwMjlhZWEw
MTguLmE3NmQ0YjRiOWJkYmE3OWM0ZTI2MWFkNWIxNjEzOWNlN2YyYmQ2MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRs
ZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYxLDYgKzYxLDE2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBheW1lbnRIYW5kbGVyOjpj
YW5DcmVhdGVTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICByZXR1cm4geyB9OwogfQog
Citib29sIFBheW1lbnRIYW5kbGVyOjplbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KQoreworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisgICAgcmV0dXJuIFBh
eW1lbnRTZXNzaW9uOjplbmFibGVkRm9yQ29udGV4dChjb250ZXh0KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29s
IFBheW1lbnRIYW5kbGVyOjpoYXNBY3RpdmVTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsK
ICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oCmluZGV4IDBiNGRmMDNiYjY3YjQ3YTNk
YjFlNWE3ODYyNGQyOTRhNzQwNzBhZmEuLmI0OGJhNzMzYmIwYTBkNDdjNjdjNmM5NDgxNTk2ODg3
MmExOTcwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVl
c3QvUGF5bWVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRy
ZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgUGF5bWVudEhh
bmRsZXIgOiBwdWJsaWMgdmlydHVhbCBQYXltZW50U2Vzc2lvbkJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8UGF5bWVudEhhbmRsZXI+IGNyZWF0ZShEb2N1bWVudCYsIFBheW1lbnRS
ZXF1ZXN0JiwgY29uc3QgUGF5bWVudFJlcXVlc3Q6Ok1ldGhvZElkZW50aWZpZXImKTsKICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gY2FuQ3JlYXRlU2Vzc2lvbihEb2N1bWVudCYpOworICAg
IHN0YXRpYyBib29sIGVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsK
ICAgICBzdGF0aWMgYm9vbCBoYXNBY3RpdmVTZXNzaW9uKERvY3VtZW50Jik7CiAKICAgICB2aXJ0
dWFsIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnREYXRhKEpTQzo6SlNWYWx1ZSYmKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVu
dFJlcXVlc3QuY3BwCmluZGV4IDYxZmY1YmUyMWNhYWU3ZWRlOTk4NjZhZmMwMjlmY2RkZDA4MmNi
OTguLmQyZWY3YTYxZWQ1MTBiMDZhMzJjMDUyZmM3MDkwMzY1NWIzOWUwMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVl
c3QuY3BwCkBAIC0zNCw3ICszNCw5IEBACiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5j
bHVkZSAiSlNQYXltZW50RGV0YWlsc1VwZGF0ZS5oIgogI2luY2x1ZGUgIkpTUGF5bWVudFJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBheW1lbnRBZGRyZXNzLmgiCisj
aW5jbHVkZSAiUGF5bWVudENvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiUGF5bWVudEN1cnJlbmN5
QW1vdW50LmgiCiAjaW5jbHVkZSAiUGF5bWVudERldGFpbHNJbml0LmgiCiAjaW5jbHVkZSAiUGF5
bWVudEhhbmRsZXIuaCIKQEAgLTM1MSw2ICszNTMsMTEgQEAgRXhjZXB0aW9uT3I8UmVmPFBheW1l
bnRSZXF1ZXN0Pj4gUGF5bWVudFJlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZl
Y3QKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXltZW50UmVxdWVzdChkb2N1bWVudCwgV1RG
TW92ZShvcHRpb25zKSwgV1RGTW92ZShkZXRhaWxzKSwgV1RGTW92ZShzdGQ6OmdldDwxPihzaGlw
cGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YSkpLCBXVEZNb3ZlKHNlcmlhbGl6ZWRNZXRob2REYXRh
KSwgV1RGTW92ZShzdGQ6OmdldDwwPihzaGlwcGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YSkpKSk7
CiB9CiAKK2Jvb2wgUGF5bWVudFJlcXVlc3Q6OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIFBheW1lbnRIYW5kbGVyOjplbmFi
bGVkRm9yQ29udGV4dChjb250ZXh0KTsKK30KKwogUGF5bWVudFJlcXVlc3Q6OlBheW1lbnRSZXF1
ZXN0KERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudE9wdGlvbnMmJiBvcHRpb25zLCBQYXltZW50
RGV0YWlsc0luaXQmJiBkZXRhaWxzLCBWZWN0b3I8U3RyaW5nPiYmIHNlcmlhbGl6ZWRNb2RpZmll
ckRhdGEsIFZlY3RvcjxNZXRob2Q+JiYgc2VyaWFsaXplZE1ldGhvZERhdGEsIFN0cmluZyYmIHNl
bGVjdGVkU2hpcHBpbmdPcHRpb24pCiAgICAgOiBBY3RpdmVET01PYmplY3QgeyBkb2N1bWVudCB9
CiAgICAgLCBtX29wdGlvbnMgeyBXVEZNb3ZlKG9wdGlvbnMpIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaAppbmRleCBj
YzBiYmNiNWY0Yzg0YzlmYmQ3ZDhmMzg0Yjk2NWJiZmFiNTI3Y2RmLi5mN2MzNDI2Nzk0NDUxYjVi
ZWZkYTA3YmI5NWQzNTc2NDQxYWRlZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCkBAIC01OCw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBTaG93UHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExJ
bnRlcmZhY2U8UGF5bWVudFJlc3BvbnNlPj47CiAKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVm
PFBheW1lbnRSZXF1ZXN0Pj4gY3JlYXRlKERvY3VtZW50JiwgVmVjdG9yPFBheW1lbnRNZXRob2RE
YXRhPiYmLCBQYXltZW50RGV0YWlsc0luaXQmJiwgUGF5bWVudE9wdGlvbnMmJik7CisgICAgc3Rh
dGljIGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAg
IH5QYXltZW50UmVxdWVzdCgpOwogCiAgICAgdm9pZCBzaG93KERvY3VtZW50JiwgUmVmUHRyPERP
TVByb21pc2U+JiYgZGV0YWlsc1Byb21pc2UsIFNob3dQcm9taXNlJiYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0Lmlk
bAppbmRleCBiOWMxMjY0Y2NhNDg3MTc0ZmZmNGQ1NWQzYzc4ZDMyMjUyNmI5OWYwLi45MThjMTA4
M2Y0YmM2YWQ3YzE5OTI2NDU0ZjQwNzE5YTc0NmFiNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbApAQCAt
MzAsNiArMzAsNyBAQAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAgICAgQ29u
c3RydWN0b3JNYXlUaHJvd0V4Y2VwdGlvbiwKICAgICBFbmFibGVkQnlTZXR0aW5nPVBheW1lbnRS
ZXF1ZXN0LAorICAgIEVuYWJsZWRGb3JDb250ZXh0LAogICAgIFNlY3VyZUNvbnRleHQsCiBdIGlu
dGVyZmFjZSBQYXltZW50UmVxdWVzdCA6IEV2ZW50VGFyZ2V0IHsKICAgICBbQ2FsbFdpdGg9RG9j
dW1lbnRdIFByb21pc2U8UGF5bWVudFJlc3BvbnNlPiBzaG93KG9wdGlvbmFsIFByb21pc2U8UGF5
bWVudERldGFpbHNVcGRhdGU+IGRldGFpbHNQcm9taXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMTU2MTFkMTM5YTQ3
MzUyNWIwZWU3NDBkZjI4YmY0M2Y3YjUyNDA4Ni4uMDBjMDNmYzQ5YThiNTIzY2YyZjY5NjM0ZTA5
N2EyMzk5ZTk1ZTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE3MDUsNiArMTcwNSw3IEBAIHN1YiBOZWVkc1J1bnRp
bWVDaGVjawogICAgIH0KIAogICAgIHJldHVybiAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57RW5hYmxlZEF0UnVudGltZX0KKyAgICAgICAgfHwgJGNvbnRleHQtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VuYWJsZWRGb3JDb250ZXh0fQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RW5hYmxlZEZvcldvcmxkfQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEJ5U2V0dGluZ30KICAgICAgICAgfHwgJGNvbnRleHQtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0Rpc2FibGVkQnlRdWlya30KQEAgLTM3ODgsNiArMzc4OSwxNSBA
QCBzdWIgR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcKICAgICAgICAgfQog
ICAgIH0KIAorICAgIGlmICgkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEZv
ckNvbnRleHR9KSB7CisgICAgICAgIGFzc2VydCgiTXVzdCBub3Qgc3BlY2lmeSB2YWx1ZSBmb3Ig
RW5hYmxlZEZvckNvbnRleHQuIikgdW5sZXNzICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntFbmFibGVkRm9yQ29udGV4dH0gZXEgIlZBTFVFX0lTX01JU1NJTkciOworICAgICAgICBhc3Nl
cnQoIkVuYWJsZWRGb3JDb250ZXh0IG11c3QgYmUgYW4gaW50ZXJmYWNlIG9yIGNvbnN0cnVjdG9y
IGF0dHJpYnV0ZS4iKSB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRj
b250ZXh0LT50eXBlKTsKKworICAgICAgICBteSAkY29udGV4dFJlZiA9ICIqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oIiAuICRnbG9iYWxPYmplY3RQdHIgLiAiKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIjsKKyAgICAgICAgbXkgJG5hbWUgPSAkY29udGV4dC0+bmFtZTsKKyAgICAgICAg
cHVzaChAY29uanVuY3RzLCAgIiR7bmFtZX06OmVuYWJsZWRGb3JDb250ZXh0KCIgLiAkY29udGV4
dFJlZiAuICIpIik7CisgICAgfQorCiAgICAgbXkgJHJlc3VsdCA9IGpvaW4oIiAmJiAiLCBAY29u
anVuY3RzKTsKICAgICAkcmVzdWx0ID0gIigkcmVzdWx0KSIgaWYgQGNvbmp1bmN0cyA+IDE7CiAg
ICAgcmV0dXJuICRyZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMQXR0cmlidXRlcy5qc29uCmluZGV4IGVmZTU2OTc5NDg1OTRlY2E1ZGM5MWYxZGQyZDEx
MjliNjhiNWFkMTUuLjQ2OWZkMmRmOWVlNmYyNzY5YWU4OWI0MDU4MGY1Y2FiYTdiOGNlMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5q
c29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5q
c29uCkBAIC0xOTIsNiArMTkyLDkgQEAKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBb
ImludGVyZmFjZSIsICJkaWN0aW9uYXJ5IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlv
biIsICJjb25zdGFudCJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsiKiJdCiAgICAgICAgIH0s
CisgICAgICAgICJFbmFibGVkRm9yQ29udGV4dCI6IHsKKyAgICAgICAgICAgICJjb250ZXh0c0Fs
bG93ZWQiOiBbImF0dHJpYnV0ZSIsICJpbnRlcmZhY2UiXQorICAgICAgICB9LAogICAgICAgICAi
RW5hYmxlZEZvcldvcmxkIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiYXR0
cmlidXRlIiwgIm9wZXJhdGlvbiJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsiKiJdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5w
bCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCmlu
ZGV4IDFhYzhmZWQ2YTg2YmM0NDEzYmUyMWFkODkyODZhZjY1ZmJlMDA1YjguLjk3NzIxMzAzZjhh
OWFlMjI5ZGY2M2M0NGU1OGZjZDkzNGMyYzdjMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCkBAIC0yODMsNyArMjgzLDcgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JBdHRyaWJ1dGVzCiAgICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlTmFtZSAoc29ydCBrZXlzICV7JGV4dGVuZGVkQXR0cmlidXRlc30pIHsKICAgICAgIG5leHQg
dW5sZXNzICgkYXR0cmlidXRlTmFtZSBlcSAiQ29uZGl0aW9uYWwiIHx8ICRhdHRyaWJ1dGVOYW1l
IGVxICJFbmFibGVkQXRSdW50aW1lIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEZvcldv
cmxkIgogICAgICAgICB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEJ5U2V0dGluZyIgfHwg
JGF0dHJpYnV0ZU5hbWUgZXEgIlNlY3VyZUNvbnRleHQiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJQ
cml2YXRlSWRlbnRpZmllciIKLSAgICAgICAgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIlB1YmxpY0lk
ZW50aWZpZXIiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJEaXNhYmxlZEJ5UXVpcmsiIHx8ICRhdHRy
aWJ1dGVOYW1lIGVxICJFbmFibGVkQnlRdWlyayIpOworICAgICAgICB8fCAkYXR0cmlidXRlTmFt
ZSBlcSAiUHVibGljSWRlbnRpZmllciIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkRpc2FibGVkQnlR
dWlyayIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVuYWJsZWRCeVF1aXJrIiB8fCAkYXR0cmlidXRl
TmFtZSBlcSAiRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICAgIG15ICRleHRlbmRlZEF0dHJpYnV0
ZSA9ICRhdHRyaWJ1dGVOYW1lOwogICAgICAgJGV4dGVuZGVkQXR0cmlidXRlIC49ICI9IiAuICRl
eHRlbmRlZEF0dHJpYnV0ZXMtPnskYXR0cmlidXRlTmFtZX0gdW5sZXNzICRleHRlbmRlZEF0dHJp
YnV0ZXMtPnskYXR0cmlidXRlTmFtZX0gZXEgIlZBTFVFX0lTX01JU1NJTkciOwogICAgICAgcHVz
aChAZXh0ZW5kZWRBdHRyaWJ1dGVzTGlzdCwgJGV4dGVuZGVkQXR0cmlidXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5MmU4ODczNjU0Yzc4M2Vm
MWYwNjQ5ZWFhZjZjMzczMTYzYzFlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCkBA
IC0wLDAgKzEsMjY3IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJv
dG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcFNuYXBzaG90QnVpbGRlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RW5h
YmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
CitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmlu
YWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0RW5hYmxlZEZvckNv
bnRleHRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0PjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30K
KwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiX3MpKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5
cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRp
Y19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dENvbnN0cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RW5h
YmxlZEZvckNvbnRleHRQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RFbmFibGVkRm9yQ29udGV4
dFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVz
KHZtLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6aW5mbygpLCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6c19pbmZvID0geyAiVGVzdEVuYWJsZWRGb3JDb250ZXh0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dCkgfTsKKworSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OkpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpCisg
ICAgOiBKU0RPTVdyYXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgaWYgKChkb3du
Y2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxl
ZCgpICYmIFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dDo6ZW5hYmxlZEZvckNvbnRleHQoanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpKSkKKyAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLlRlc3RT
dWJPYmpFbmFibGVkRm9yQ29udGV4dFB1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpj
cmVhdGUodm0sIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250
ZXh0Q29uc3RydWN0b3IsIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKK30KKwor
SlNPYmplY3QqIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3Qq
IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp+
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQqIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46
OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oc3RhdGUudm0o
KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpF
bmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFi
bGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+OjpnZXQ8anNU
ZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVz
dFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZS52bSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVk
Rm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFs
dWUpOworfQorCitib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OnNldDxzZXRKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250
ZXh0Iik7Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmhlYXBTbmFwc2hvdChK
U0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KGNlbGwpOworICAg
IGJ1aWxkZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBw
ZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAg
ICAgICAgYnVpbGRlci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6aGVh
cFNuYXBzaG90KGNlbGwsIGJ1aWxkZXIpOworfQorCitib29sIEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rl
c3RFbmFibGVkRm9yQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19j
YXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxk
LCAmanNUZXN0RW5hYmxlZEZvckNvbnRleHQtPndyYXBwZWQoKSwganNUZXN0RW5hYmxlZEZvckNv
bnRleHQpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JN
KFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVy
biB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdEVuYWJsZWRGb3JDb250ZXh0QFdl
YkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9a
VFZON1dlYkNvcmUyMVRlc3RFbmFibGVkRm9yQ29udGV4dEVbXTsgfQorI2VuZGlmCisjZW5kaWYK
KworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGlt
cGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFs
VlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsK
KyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gV1RG
X1BSRVBBUkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OKF9faWRlbnRpZmllcigiPz9fN1Rl
c3RFbmFibGVkRm9yQ29udGV4dEBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4
cGVjdGVkVlRhYmxlUG9pbnRlciA9IFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVD
VElPTigmX1pUVk43V2ViQ29yZTIxVGVzdEVuYWJsZWRGb3JDb250ZXh0RVsyXSk7CisjZW5kaWYK
KworICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdEVuYWJsZWRGb3JDb250ZXh0IGRvZXMgbm90IGhh
dmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlv
bkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6
dmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQgaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAg
ICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRl
ciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0RW5hYmxlZEZvckNvbnRleHQgaGFzIHN1YmNsYXNz
ZXMuIElmIFRlc3RFbmFibGVkRm9yQ29udGV4dCBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNz
ZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdEVuYWJsZWRGb3JD
b250ZXh0IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRk
aW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJ
REwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0g
ZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
PFRlc3RFbmFibGVkRm9yQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30K
KworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RW5hYmxlZEZvckNvbnRleHQmIGltcGwpCit7CisgICAg
cmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RFbmFibGVk
Rm9yQ29udGV4dCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnRvV3JhcHBlZChKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJl
dHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2Mzg3ZDQyMzYxMzIy
NDdmMmQ3YzQ5OWZmNGEwZjk1NmVjMDZhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaApA
QCAtMCwwICsxLDg4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQgOiBwdWJsaWMgSlNET01XcmFw
cGVyPFRlc3RFbmFibGVkRm9yQ29udGV4dD4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U0RPTVdyYXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PjsKKyAgICBzdGF0aWMgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGlt
cGwpCisgICAgeworICAgICAgICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dChzdHJ1Y3R1cmUsICpn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0RW5hYmxlZEZvckNvbnRleHQq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBoZWFw
U25hcHNob3QoSlNDZWxsKiwgSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyJik7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7Citwcm90ZWN0ZWQ6CisgICAgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyIDog
cHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9p
ZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVh
bCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQp
OworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3Jh
cHBlcldvcmxkJiwgVGVzdEVuYWJsZWRGb3JDb250ZXh0KikKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRPd25lcj4gb3duZXI7CisgICAgcmV0dXJu
ICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdEVuYWJsZWRG
b3JDb250ZXh0KiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVj
dDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RFbmFibGVkRm9yQ29udGV4dCYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdEVuYWJsZWRGb3JDb250ZXh0KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3RFbmFibGVkRm9yQ29udGV4dD4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpIHsgcmV0dXJuIGltcGwg
PyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51
bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0RW5hYmxlZEZvckNvbnRleHQ+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDsKKyAgICB1c2luZyBUb1dyYXBwZWRS
ZXR1cm5UeXBlID0gVGVzdEVuYWJsZWRGb3JDb250ZXh0KjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggMzVkMTZlZTBmNzM0ODcx
YjM5MzdlOWYzZTRlZjZkOTUyODliYzhiOC4uODMzODMxMzc1MWY0MDUwZDI1YTg1ZWUzNjAzMGNk
ZDhlOWNmNzgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1
cml0eS5oIgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKKyNpbmNsdWRlICJK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdEV4
Y2VwdGlvbi5oIgpAQCAtMTcyLDYgKzE3Myw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhCiBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFy
Z2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CkBAIC03MDIsNiArNzA1LDggQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkKICAgICAgICAgcHV0RGly
ZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVQdWJsaWNO
YW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlLCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKSk7CiAjZW5kaWYK
KyAgICBpZiAoKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBUZXN0RW5hYmxlZEZv
ckNvbnRleHQ6OmVuYWJsZWRGb3JDb250ZXh0KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkpCisgICAgICAgIHB1dERp
cmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5UZXN0RW5hYmxlZEZvckNvbnRleHRQdWJsaWNOYW1l
KCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvciwgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKICAg
ICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0
ZVByaXZhdGVOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9i
YWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlLCBudWxscHRyKSwgYXR0cmlidXRlc0Zv
clN0cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAg
IHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9u
YWxBdHRyaWJ1dGVQcml2YXRlTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwg
anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlLCBu
dWxscHRyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKQEAgLTExMTYs
NiArMTEyMSwzMCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jbwogICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RF
bmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIHJldHVybiBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9y
Q29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENv
bnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4
dCIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSwgc3RybGVu
KCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4
dCIpOworfQorCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEVuYWJsZWRGb3JDb250ZXh0LmlkbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZTcwOTQ0NTNlZDU3MjIyYjM0NDFiYTZlOThhNDkwYmU5N2QxYjkyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFi
bGVkRm9yQ29udGV4dC5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBF
bmFibGVkRm9yQ29udGV4dCwKKyAgICBTZWN1cmVDb250ZXh0LAorXSBpbnRlcmZhY2UgVGVzdEVu
YWJsZWRGb3JDb250ZXh0IHsKKyAgICBbRW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZywgRW5h
YmxlZEZvckNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0U3ViT2JqQ29uc3RydWN0b3IgVGVzdFN1Yk9i
akVuYWJsZWRGb3JDb250ZXh0OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA0Yzg2ZWIzYjMyMTQxODZlNzE3MDYyYWIzMDUxNzM2OWNiNWMw
MDBmLi5kYjRiOGMzZTI1NTE5NjcyN2UwZTUyYTBkNTY3NzAzMjlmMTVkNTBlIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTktMDUtMDkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtB
cHBsZSBQYXldIFBheW1lbnQgQVBJcyBzaG91bGQgYmUgY29tcGxldGVseSBkaXNhYmxlZCBpbiB3
ZWIgdmlld3MgaW50byB3aGljaCBjbGllbnRzIGhhdmUgaW5qZWN0ZWQgdXNlciBzY3JpcHRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3NTEKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwNjMxNTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IEFQSSB0ZXN0LgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbToKKyAgICAgICAg
KC1bVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgaW5pdFdpdGhBUElzQXZhaWxhYmxl
RXhwZWN0YXRpb246Y2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246XSk6CisgICAgICAgICgtW1Rl
c3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRS
ZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAoLVtUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBpbml0V2l0aEV4cGVj
dGF0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sOgorCiAyMDE5LTA1LTA4ICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgbXkgc3RhdHVz
IHRvIGJlIGEgV2ViS2l0IHJldmlld2VyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvQXBwbGVQYXkubW0KaW5kZXggYTJiNTgwMWY5MzliZDcwNjEyYzNiODlm
ZDBkYmM1NWM4ZDU3MTQ2Zi4uZDYzNDFjYTc0M2NmMGZjMzFhMzUzZjEyY2RlNTg3MmVkNjcwZThi
NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBs
ZVBheS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxl
UGF5Lm1tCkBAIC00MSwyOSArNDEsMzMgQEAgc3RhdGljIGJvb2wgaXNEb25lOwogQGludGVyZmFj
ZSBUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciA6IE5TT2JqZWN0IDxXS1NjcmlwdE1l
c3NhZ2VIYW5kbGVyPgogCiAtIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEV4cGVjdGF0aW9uOihCT09MKWV4cGVjdGF0aW9uOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9uOihCT09MKWFwaXNB
dmFpbGFibGVFeHBlY3RhdGlvbiBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjooQk9PTCljYW5N
YWtlUGF5bWVudHNFeHBlY3RhdGlvbjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVzdEFw
cGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgewotICAgIEJPT0wgX2V4cGVjdGF0aW9uOworICAg
IEJPT0wgX2FwaXNBdmFpbGFibGVFeHBlY3RhdGlvbjsKKyAgICBCT09MIF9jYW5NYWtlUGF5bWVu
dHNFeHBlY3RhdGlvbjsKIH0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRXhwZWN0YXRpb246
KEJPT0wpZXhwZWN0YXRpb24KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFQSXNBdmFpbGFibGVF
eHBlY3RhdGlvbjooQk9PTClhcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24gY2FuTWFrZVBheW1lbnRz
RXhwZWN0YXRpb246KEJPT0wpY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb24KIHsKICAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF9leHBl
Y3RhdGlvbiA9IGV4cGVjdGF0aW9uOworICAgIF9hcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24gPSBh
cGlzQXZhaWxhYmxlRXhwZWN0YXRpb247CisgICAgX2Nhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9u
ID0gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb247CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0g
KHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVz
ZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNz
YWdlICopbWVzc2FnZQogewotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2FnZS5i
b2R5IG9iamVjdEZvcktleTpAInN1cHBvcnRzVmVyc2lvbiJdIGJvb2xWYWx1ZV0pOwotICAgIEVY
UEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1h
a2VQYXltZW50cyJdIGJvb2xWYWx1ZV0pOwotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtb
bWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJk
Il0gYm9vbFZhbHVlXSk7Ci0gICAgRVhQRUNUX0VRKF9leHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJv
ZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFrZVBheW1lbnQiXSBib29sVmFsdWVdKTsKKyAgICBFWFBF
Q1RfRVEoX2FwaXNBdmFpbGFibGVFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9y
S2V5OkAiYXBwbGVQYXlTZXNzaW9uQXZhaWxhYmxlIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNU
X0VRKF9hcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktl
eTpAInBheW1lbnRSZXF1ZXN0QXZhaWxhYmxlIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VR
KF9jYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5
OkAic3VwcG9ydHNWZXJzaW9uIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtl
UGF5bWVudHNFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFr
ZVBheW1lbnRzIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtlUGF5bWVudHNF
eHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFrZVBheW1lbnRz
V2l0aEFjdGl2ZUNhcmQiXSBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEoX2Nhbk1ha2VQYXlt
ZW50c0V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtlUGF5
bWVudCJdIGJvb2xWYWx1ZV0pOwogICAgIGlzRG9uZSA9IHRydWU7CiB9CiAKQEAgLTc1LDcgKzc5
LDcgQEAgVEVTVChBcHBsZVBheSwgQXBwbGVQYXlBdmFpbGFibGVCeURlZmF1bHQpCiB7CiAgICAg
W1Rlc3RQcm90b2NvbCByZWdpc3RlcldpdGhTY2hlbWU6QCJodHRwcyJdOwogCi0gICAgYXV0byBt
ZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdFdpdGhFeHBlY3RhdGlvbjpZRVNdKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5k
bGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBp
bml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjpZRVMgY2FuTWFrZVBheW1lbnRzRXhwZWN0
YXRpb246WUVTXSk7CiAKICAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9u
ID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1
Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKICAgICBbY29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6
bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RBcHBsZVBheSJdOwpAQCAtODgsMTEgKzky
LDExIEBAIFRFU1QoQXBwbGVQYXksIEFwcGxlUGF5QXZhaWxhYmxlQnlEZWZhdWx0KQogICAgIFtU
ZXN0UHJvdG9jb2wgdW5yZWdpc3Rlcl07CiB9CiAKLVRFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHRE
aXNhYmxlc0FwcGxlUGF5KQorVEVTVChBcHBsZVBheSwgVXNlclNjcmlwdEF0RG9jdW1lbnRTdGFy
dERpc2FibGVzQXBwbGVQYXkpCiB7CiAgICAgW1Rlc3RQcm90b2NvbCByZWdpc3RlcldpdGhTY2hl
bWU6QCJodHRwcyJdOwogCi0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0
QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RhdGlvbjpO
T10pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2Ny
aXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9u
Ok5PIGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOk5PXSk7CiAgICAgYXV0byB1c2VyU2NyaXB0
ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6QCJ3aW5kb3cu
d2tVc2VyU2NyaXB0SW5qZWN0ZWQgPSB0cnVlIiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdElu
amVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsKIAogICAg
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQ
cm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJdOwpAQCAtMTA5LDExICsxMTMsMzIgQEAgVEVTVChB
cHBsZVBheSwgVXNlclNjcmlwdERpc2FibGVzQXBwbGVQYXkpCiAgICAgW1Rlc3RQcm90b2NvbCB1
bnJlZ2lzdGVyXTsKIH0KIAorVEVTVChBcHBsZVBheSwgVXNlclNjcmlwdEF0RG9jdW1lbnRFbmRE
aXNhYmxlc0FwcGxlUGF5KQoreworICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1l
OkAiaHR0cHMiXTsKKyAgICAKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rl
c3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFi
bGVFeHBlY3RhdGlvbjpOTyBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjpOT10pOworICAgIGF1
dG8gdXNlclNjcmlwdCA9IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291
cmNlOkAid2luZG93LndrVXNlclNjcmlwdEluamVjdGVkID0gdHJ1ZSIgaW5qZWN0aW9uVGltZTpX
S1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudEVuZCBmb3JNYWluRnJhbWVPbmx5OllF
U10pOworICAgIAorICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5D
bGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJdOworICAgIFtjb25maWd1
cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRVc2VyU2NyaXB0OnVzZXJTY3JpcHQuZ2V0
KCldOworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07
CisgICAgCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsK
KyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9idW5kbGUtaHRtbC1maWxlL2FwcGxlLXBheS1h
dmFpbGFiaWxpdHkiXV1dOworICAgIAorICAgIFV0aWw6OnJ1bigmaXNEb25lKTsKKyAgICAKKyAg
ICBFWFBFQ1RfRVEoWUVTLCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
IndpbmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCJdIGJvb2xWYWx1ZV0pOworICAgIAorICAgIFtU
ZXN0UHJvdG9jb2wgdW5yZWdpc3Rlcl07Cit9CisKIFRFU1QoQXBwbGVQYXksIFVzZXJBZ2VudFNj
cmlwdEV2YWx1YXRpb25EaXNhYmxlc0FwcGxlUGF5KQogewogICAgIFtUZXN0UHJvdG9jb2wgcmVn
aXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKIAotICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRo
RXhwZWN0YXRpb246Tk9dKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rl
c3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFi
bGVFeHBlY3RhdGlvbjpZRVMgY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dKTsKIAogICAg
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQ
cm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJdOwogICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250
ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQo
KSBuYW1lOkAidGVzdEFwcGxlUGF5Il07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFpbGFiaWxpdHkuaHRtbCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1s
CmluZGV4IGYzMDJjNmFkOWY5NjkzOGFkNjQ0ZmMwN2UxMWUzZmIyNWZmZWEzM2EuLjFmYzRlOWI3
OWI2ZTE3NTU4OGE5YzEyZDRiMDljNTdhNzI0M2RmNGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWls
YWJpbGl0eS5odG1sCkBAIC0yOSw2ICsyOSwxMyBAQAogICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCdsb2FkJywgYXN5bmMgKCkgPT4gewogICAgICAgICBpbnRlcm5hbHMubW9ja1BheW1lbnRD
b29yZGluYXRvci5zdXBwb3J0c1VucmVzdHJpY3RlZEFwcGxlUGF5ID0gZmFsc2U7CiAKKyAgICAg
ICAgY29uc3QgYXBwbGVQYXlTZXNzaW9uQXZhaWxhYmxlID0gISF3aW5kb3cuQXBwbGVQYXlTZXNz
aW9uOworICAgICAgICBjb25zdCBwYXltZW50UmVxdWVzdEF2YWlsYWJsZSA9ICEhd2luZG93LlBh
eW1lbnRSZXF1ZXN0OworICAgICAgICBpZiAoIWFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSB8fCAh
cGF5bWVudFJlcXVlc3RBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVz
c2FnZUhhbmRsZXJzLnRlc3RBcHBsZVBheS5wb3N0TWVzc2FnZSh7IGFwcGxlUGF5U2Vzc2lvbkF2
YWlsYWJsZSwgcGF5bWVudFJlcXVlc3RBdmFpbGFibGUgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBzdXBwb3J0c1ZlcnNpb24gPSBBcHBsZVBheVNl
c3Npb24uc3VwcG9ydHNWZXJzaW9uKDEpOwogICAgICAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMg
PSBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCk7CiAgICAgICAgIGNvbnN0IGNhbk1h
a2VQYXltZW50c1dpdGhBY3RpdmVDYXJkID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQ
YXltZW50c1dpdGhBY3RpdmVDYXJkKCcnKTsKQEAgLTQzLDYgKzUwLDggQEAKICAgICAgICAgY29u
c3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwYXltZW50UmVxdWVzdC5jYW5NYWtlUGF5bWVudCgp
OwogCiAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RBcHBsZVBheS5w
b3N0TWVzc2FnZSh7CisgICAgICAgICAgICBhcHBsZVBheVNlc3Npb25BdmFpbGFibGUsCisgICAg
ICAgICAgICBwYXltZW50UmVxdWVzdEF2YWlsYWJsZSwKICAgICAgICAgICAgIHN1cHBvcnRzVmVy
c2lvbiwKICAgICAgICAgICAgIGNhbk1ha2VQYXltZW50cywKICAgICAgICAgICAgIGNhbk1ha2VQ
YXltZW50c1dpdGhBY3RpdmVDYXJkLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369516</attachid>
            <date>2019-05-09 12:46:35 -0700</date>
            <delta_ts>2019-05-10 16:21:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197751-20190509124635.patch</filename>
            <type>text/plain</type>
            <size>49190</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTc0NTkzNDM4NmEwODYz
ZGFmN2M3Nzc5YTI2MDM1NTJiMWUzNmIzZi4uMjRmZTk0MmM5NTBiZGIzNmQ0YTRjNjUxOWI4Nzkz
OGFmZTk2MTNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTA1LTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUgUGF5XSBQYXltZW50
IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZpZXdzIGludG8gd2hp
Y2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiByMjQzMzI0LCB3aGVuIGEgZG9jdW1lbnQgaGFzIGhhZCB1c2VyIGFnZW50IHNj
cmlwdHMgaW5qZWN0ZWQgaW50byBpdCwgcGF5bWVudCBBUElzIHdlcmUKKyAgICAgICAgZGlzYWJs
ZWQgYXQgcnVudGltZSBieSBoYXZpbmcgYWxsIGVudHJ5IHBvaW50cyByZXR1cm4gZmFsc3kgdmFs
dWVzIG9yIHRocm93IGV4Y2VwdGlvbnMKKyAgICAgICAgKGUuZy4sIEFwcGxlUGF5U2Vzc2lvbi5j
YW5NYWtlUGF5bWVudHMoKSByZXR1cm5zIGZhbHNlKS4KKworICAgICAgICBJbiB0aGUgY2FzZSBv
ZiB1c2VyIHNjcmlwdHMgaW4gcGFydGljdWxhciAoZS5nLiwgV0tVc2VyU2NyaXB0KSwgc2luY2Ug
d2Uga25vdyB3aGV0aGVyIHRoZXNlCisgICAgICAgIGV4aXN0IGF0IHRoZSB0aW1lIHdlIGNyZWF0
ZSBhIGRvY3VtZW50J3MgRE9NV2luZG93LCB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gcjI0MzMyNCBi
eQorICAgICAgICBjb21wbGV0ZWx5IGRpc2FibGluZyB0aGUgcGF5bWVudCBBUElzIGluIHRoZSBw
cmVzZW5jZSBvZiB1c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB0aGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHRoZSAnRW5hYmxlZEJ5Q29udGV4dCcgZXh0ZW5kZWQgYXR0cmli
dXRlIGZvcgorICAgICAgICBpbnRlcmZhY2VzLCB3aGljaCBpbnN0cnVjdHMgdGhlIGJpbmRpbmdz
IGdlbmVyYXRvciB0byBhZGQgYSBjb25qdW5jdCB0byB0aGUgcGF5bWVudCBBUEkKKyAgICAgICAg
Y29uc3RydWN0b3JzIHRoYXQgYXNrcyB0aGUgaW50ZXJmYWNlJ3MgaW1wbGVtZW50YXRpb24gY2xh
c3Mgd2hldGhlciBpdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IKKyAgICAgICAgYSBnaXZlbiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LiBUaGUgUGF5bWVudFJlcXVlc3QgYW5kIEFwcGxlUGF5U2Vzc2lv
biBpbnRlcmZhY2VzIGFkb3B0IHRoaXMKKyAgICAgICAgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSB0
byBpbXBsZW1lbnQgdGhlIG5ldyB1c2VyIHNjcmlwdCBjaGVjay4KKworICAgICAgICBBZGRlZCBh
IG5ldyBBUEkgdGVzdC4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNz
aW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3I6OnNob3VsZEVuYWJsZUFw
cGxlUGF5QVBJcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29v
cmRpbmF0b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRTZXNzaW9uOjplbmFibGVkRm9yQ29udGV4dCk6
CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5oOgorICAgICAgICAq
IE1vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmg6CisgICAgICAgICogTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXlt
ZW50UmVxdWVzdDo6ZW5hYmxlZEZvckNvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvcGF5bWVu
dHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1
ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5lZWRzUnVudGltZUNoZWNrKToKKyAgICAgICAgKEdl
bmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbjoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3ByZXByb2Nlc3MtaWRscy5wbDoKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmlk
bDogQWRkZWQuCisKIDIwMTktMDUtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxl
LmNvbT4KIAogICAgICAgICBBbGwgcHJvdG90eXBlcyBzaG91bGQgY2FsbCBkaWRCZWNvbWVQcm90
b3R5cGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBh
eVNlc3Npb24uaWRsCmluZGV4IDY2YTg5Zjg5YjM5Yzk0ZTQ5MzgwZGY1YWJlNjkzYTAwODJmZGQw
MDUuLjA4NTBiZDViNjA1MDJlNmJmODVjMGVlNmJjYzcwNWY2OTA1OTM5MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5pZGwKQEAg
LTMwLDYgKzMwLDcgQEAKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENv
bnN0cnVjdG9yTWF5VGhyb3dFeGNlcHRpb24sCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1BcHBsZVBh
eSwKKyAgICBFbmFibGVkRm9yQ29udGV4dCwKIF0gaW50ZXJmYWNlIEFwcGxlUGF5U2Vzc2lvbiA6
IEV2ZW50VGFyZ2V0IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFUVVNfU1VDQ0VTUyA9
IDA7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1RBVFVTX0ZBSUxVUkUgPSAxOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDUyNGY0MzY1OThjMjI4NDVmYTUzYzcxNjY0OWU3NTQ2OGMzNmNmMGEuLmQ1NTk5
NDhkMGE2ZmFhNjNlMjA1YmEwOWZjZjE5MmIxYjBiYjAyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKQEAgLTMx
LDkgKzMxLDExIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJMaW5rSWNvbkNv
bGxlY3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJQYXltZW50Q29v
cmRpbmF0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQYXltZW50U2Vzc2lvbi5oIgorI2luY2x1ZGUg
IlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKQEAgLTI1MSw2ICsyNTMsMjIgQEAgT3B0aW9uYWw8
U3RyaW5nPiBQYXltZW50Q29vcmRpbmF0b3I6OnZhbGlkYXRlZFBheW1lbnROZXR3b3JrKERvY3Vt
ZW50JiBkb2N1bWVudCwKICAgICByZXR1cm4gbV9jbGllbnQudmFsaWRhdGVkUGF5bWVudE5ldHdv
cmsocGF5bWVudE5ldHdvcmspOwogfQogCitib29sIFBheW1lbnRDb29yZGluYXRvcjo6c2hvdWxk
RW5hYmxlQXBwbGVQYXlBUElzKERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jbGllbnQuc3VwcG9ydHNVbnJlc3RyaWN0ZWRBcHBsZVBheSgpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoInNob3VsZEVuYWJsZUFwcGxlUGF5QVBJcygpIC0+IHRydWUgKHVu
cmVzdHJpY3RlZCBjbGllbnQpIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgc2hvdWxkRW5hYmxlQVBJcyA9IHRydWU7CisgICAgZG9jdW1lbnQucGFnZSgpLT51c2Vy
Q29udGVudFByb3ZpZGVyKCkuZm9yRWFjaFVzZXJTY3JpcHQoWyZdKERPTVdyYXBwZXJXb3JsZCYs
IGNvbnN0IFVzZXJTY3JpcHQmKSB7CisgICAgICAgIHNob3VsZEVuYWJsZUFQSXMgPSBmYWxzZTsK
KyAgICB9KTsKKworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInNob3VsZEVuYWJsZUFwcGxl
UGF5QVBJcygpIC0+ICVkIiwgc2hvdWxkRW5hYmxlQVBJcyk7CisgICAgcmV0dXJuIHNob3VsZEVu
YWJsZUFQSXM7Cit9CisKIGJvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpzaG91bGRBbGxvd0FwcGxl
UGF5KERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAobV9jbGllbnQuc3VwcG9y
dHNVbnJlc3RyaWN0ZWRBcHBsZVBheSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuaAppbmRleCAzYjMyMWEyMTg1NTBkMDk0
ZGNmZDExY2NiNjk0ZWFhNDU1Yzk1MGY5Li4yNjBhM2UyODExNjI2ZTdlNDhkY2IwMGMyMmUwNzYz
YzliMmE2ZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1Bh
eW1lbnRDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
UGF5bWVudENvb3JkaW5hdG9yLmgKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogCiAgICAgT3B0
aW9uYWw8U3RyaW5nPiB2YWxpZGF0ZWRQYXltZW50TmV0d29yayhEb2N1bWVudCYsIHVuc2lnbmVk
IHZlcnNpb24sIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCisgICAgYm9vbCBzaG91bGRFbmFibGVB
cHBsZVBheUFQSXMoRG9jdW1lbnQmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNo
b3VsZEFsbG93QXBwbGVQYXkoRG9jdW1lbnQmKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNob3VsZEFsbG93VXNlckFnZW50U2NyaXB0cyhEb2N1bWVudCYpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCmlu
ZGV4IDg3YTQ0ZjRiMzViYjJmYjQyOTNlMzA0ZjI3ZjA2YjZlNmViYTE5NDkuLjY1ZDlmODY5YjA4
YzgxOTQ2NTY5Yzc5Nzc3ODc3ZjhjYWE0MzVhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzIsNiArNzMsMTUgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGF5bWVudFNlc3Npb246
OmNhbkNyZWF0ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIHJldHVybiB7IH07CiB9
CiAKK2Jvb2wgUGF5bWVudFNlc3Npb246OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCk7CisgICAgaWYgKGF1dG8gcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIHBhZ2UtPnBheW1lbnRDb29yZGluYXRvcigpLnNob3VsZEVuYWJsZUFwcGxl
UGF5QVBJcyhkb2N1bWVudCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShBUFBMRV9QQVkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmgKaW5kZXggOGY3YTRiNjUw
ZjBiOTJmODE1ZjliNWQ1Y2NlMTc5YTdkNTI5MTA0My4uMzIyMmY1OWUwOTA2MTMzZWM0YzQ4Nzcz
ZTAxNzg1NDNmZjcxYTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9QYXltZW50U2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvUGF5bWVudFNlc3Npb24uaApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBQYXltZW50TWV0aG9k
OwogY2xhc3MgUGF5bWVudFNlc3Npb24gOiBwdWJsaWMgdmlydHVhbCBQYXltZW50U2Vzc2lvbkJh
c2UgewogcHVibGljOgogICAgIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBjYW5DcmVhdGVTZXNz
aW9uKERvY3VtZW50Jik7CisgICAgc3RhdGljIGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCB2ZXJzaW9uKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZU1lcmNoYW50KFVSTCYmKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVu
dEhhbmRsZXIuY3BwCmluZGV4IDA0ODhlYWViNjZmYjUwYzliNDg1MDMwZWFmM2Q0ZDEwMjlhZWEw
MTguLmE3NmQ0YjRiOWJkYmE3OWM0ZTI2MWFkNWIxNjEzOWNlN2YyYmQ2MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRs
ZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYxLDYgKzYxLDE2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBheW1lbnRIYW5kbGVyOjpj
YW5DcmVhdGVTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICByZXR1cm4geyB9OwogfQog
Citib29sIFBheW1lbnRIYW5kbGVyOjplbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KQoreworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisgICAgcmV0dXJuIFBh
eW1lbnRTZXNzaW9uOjplbmFibGVkRm9yQ29udGV4dChjb250ZXh0KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29s
IFBheW1lbnRIYW5kbGVyOjpoYXNBY3RpdmVTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKIHsK
ICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oCmluZGV4IDBiNGRmMDNiYjY3YjQ3YTNk
YjFlNWE3ODYyNGQyOTRhNzQwNzBhZmEuLmI0OGJhNzMzYmIwYTBkNDdjNjdjNmM5NDgxNTk2ODg3
MmExOTcwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVl
c3QvUGF5bWVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRy
ZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgUGF5bWVudEhh
bmRsZXIgOiBwdWJsaWMgdmlydHVhbCBQYXltZW50U2Vzc2lvbkJhc2UgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8UGF5bWVudEhhbmRsZXI+IGNyZWF0ZShEb2N1bWVudCYsIFBheW1lbnRS
ZXF1ZXN0JiwgY29uc3QgUGF5bWVudFJlcXVlc3Q6Ok1ldGhvZElkZW50aWZpZXImKTsKICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gY2FuQ3JlYXRlU2Vzc2lvbihEb2N1bWVudCYpOworICAg
IHN0YXRpYyBib29sIGVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsK
ICAgICBzdGF0aWMgYm9vbCBoYXNBY3RpdmVTZXNzaW9uKERvY3VtZW50Jik7CiAKICAgICB2aXJ0
dWFsIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbnZlcnREYXRhKEpTQzo6SlNWYWx1ZSYmKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVu
dFJlcXVlc3QuY3BwCmluZGV4IDYxZmY1YmUyMWNhYWU3ZWRlOTk4NjZhZmMwMjlmY2RkZDA4MmNi
OTguLmQyZWY3YTYxZWQ1MTBiMDZhMzJjMDUyZmM3MDkwMzY1NWIzOWUwMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVl
c3QuY3BwCkBAIC0zNCw3ICszNCw5IEBACiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5j
bHVkZSAiSlNQYXltZW50RGV0YWlsc1VwZGF0ZS5oIgogI2luY2x1ZGUgIkpTUGF5bWVudFJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBheW1lbnRBZGRyZXNzLmgiCisj
aW5jbHVkZSAiUGF5bWVudENvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiUGF5bWVudEN1cnJlbmN5
QW1vdW50LmgiCiAjaW5jbHVkZSAiUGF5bWVudERldGFpbHNJbml0LmgiCiAjaW5jbHVkZSAiUGF5
bWVudEhhbmRsZXIuaCIKQEAgLTM1MSw2ICszNTMsMTEgQEAgRXhjZXB0aW9uT3I8UmVmPFBheW1l
bnRSZXF1ZXN0Pj4gUGF5bWVudFJlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZl
Y3QKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXltZW50UmVxdWVzdChkb2N1bWVudCwgV1RG
TW92ZShvcHRpb25zKSwgV1RGTW92ZShkZXRhaWxzKSwgV1RGTW92ZShzdGQ6OmdldDwxPihzaGlw
cGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YSkpLCBXVEZNb3ZlKHNlcmlhbGl6ZWRNZXRob2REYXRh
KSwgV1RGTW92ZShzdGQ6OmdldDwwPihzaGlwcGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YSkpKSk7
CiB9CiAKK2Jvb2wgUGF5bWVudFJlcXVlc3Q6OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIFBheW1lbnRIYW5kbGVyOjplbmFi
bGVkRm9yQ29udGV4dChjb250ZXh0KTsKK30KKwogUGF5bWVudFJlcXVlc3Q6OlBheW1lbnRSZXF1
ZXN0KERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudE9wdGlvbnMmJiBvcHRpb25zLCBQYXltZW50
RGV0YWlsc0luaXQmJiBkZXRhaWxzLCBWZWN0b3I8U3RyaW5nPiYmIHNlcmlhbGl6ZWRNb2RpZmll
ckRhdGEsIFZlY3RvcjxNZXRob2Q+JiYgc2VyaWFsaXplZE1ldGhvZERhdGEsIFN0cmluZyYmIHNl
bGVjdGVkU2hpcHBpbmdPcHRpb24pCiAgICAgOiBBY3RpdmVET01PYmplY3QgeyBkb2N1bWVudCB9
CiAgICAgLCBtX29wdGlvbnMgeyBXVEZNb3ZlKG9wdGlvbnMpIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaAppbmRleCBj
YzBiYmNiNWY0Yzg0YzlmYmQ3ZDhmMzg0Yjk2NWJiZmFiNTI3Y2RmLi5mN2MzNDI2Nzk0NDUxYjVi
ZWZkYTA3YmI5NWQzNTc2NDQxYWRlZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCkBAIC01OCw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBTaG93UHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExJ
bnRlcmZhY2U8UGF5bWVudFJlc3BvbnNlPj47CiAKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVm
PFBheW1lbnRSZXF1ZXN0Pj4gY3JlYXRlKERvY3VtZW50JiwgVmVjdG9yPFBheW1lbnRNZXRob2RE
YXRhPiYmLCBQYXltZW50RGV0YWlsc0luaXQmJiwgUGF5bWVudE9wdGlvbnMmJik7CisgICAgc3Rh
dGljIGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAg
IH5QYXltZW50UmVxdWVzdCgpOwogCiAgICAgdm9pZCBzaG93KERvY3VtZW50JiwgUmVmUHRyPERP
TVByb21pc2U+JiYgZGV0YWlsc1Byb21pc2UsIFNob3dQcm9taXNlJiYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0Lmlk
bAppbmRleCBiOWMxMjY0Y2NhNDg3MTc0ZmZmNGQ1NWQzYzc4ZDMyMjUyNmI5OWYwLi45MThjMTA4
M2Y0YmM2YWQ3YzE5OTI2NDU0ZjQwNzE5YTc0NmFiNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbApAQCAt
MzAsNiArMzAsNyBAQAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAgICAgQ29u
c3RydWN0b3JNYXlUaHJvd0V4Y2VwdGlvbiwKICAgICBFbmFibGVkQnlTZXR0aW5nPVBheW1lbnRS
ZXF1ZXN0LAorICAgIEVuYWJsZWRGb3JDb250ZXh0LAogICAgIFNlY3VyZUNvbnRleHQsCiBdIGlu
dGVyZmFjZSBQYXltZW50UmVxdWVzdCA6IEV2ZW50VGFyZ2V0IHsKICAgICBbQ2FsbFdpdGg9RG9j
dW1lbnRdIFByb21pc2U8UGF5bWVudFJlc3BvbnNlPiBzaG93KG9wdGlvbmFsIFByb21pc2U8UGF5
bWVudERldGFpbHNVcGRhdGU+IGRldGFpbHNQcm9taXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMTU2MTFkMTM5YTQ3
MzUyNWIwZWU3NDBkZjI4YmY0M2Y3YjUyNDA4Ni4uMDBjMDNmYzQ5YThiNTIzY2YyZjY5NjM0ZTA5
N2EyMzk5ZTk1ZTg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE3MDUsNiArMTcwNSw3IEBAIHN1YiBOZWVkc1J1bnRp
bWVDaGVjawogICAgIH0KIAogICAgIHJldHVybiAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57RW5hYmxlZEF0UnVudGltZX0KKyAgICAgICAgfHwgJGNvbnRleHQtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VuYWJsZWRGb3JDb250ZXh0fQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RW5hYmxlZEZvcldvcmxkfQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEJ5U2V0dGluZ30KICAgICAgICAgfHwgJGNvbnRleHQtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0Rpc2FibGVkQnlRdWlya30KQEAgLTM3ODgsNiArMzc4OSwxNSBA
QCBzdWIgR2VuZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcKICAgICAgICAgfQog
ICAgIH0KIAorICAgIGlmICgkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5hYmxlZEZv
ckNvbnRleHR9KSB7CisgICAgICAgIGFzc2VydCgiTXVzdCBub3Qgc3BlY2lmeSB2YWx1ZSBmb3Ig
RW5hYmxlZEZvckNvbnRleHQuIikgdW5sZXNzICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntFbmFibGVkRm9yQ29udGV4dH0gZXEgIlZBTFVFX0lTX01JU1NJTkciOworICAgICAgICBhc3Nl
cnQoIkVuYWJsZWRGb3JDb250ZXh0IG11c3QgYmUgYW4gaW50ZXJmYWNlIG9yIGNvbnN0cnVjdG9y
IGF0dHJpYnV0ZS4iKSB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRj
b250ZXh0LT50eXBlKTsKKworICAgICAgICBteSAkY29udGV4dFJlZiA9ICIqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oIiAuICRnbG9iYWxPYmplY3RQdHIgLiAiKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIjsKKyAgICAgICAgbXkgJG5hbWUgPSAkY29udGV4dC0+bmFtZTsKKyAgICAgICAg
cHVzaChAY29uanVuY3RzLCAgIiR7bmFtZX06OmVuYWJsZWRGb3JDb250ZXh0KCIgLiAkY29udGV4
dFJlZiAuICIpIik7CisgICAgfQorCiAgICAgbXkgJHJlc3VsdCA9IGpvaW4oIiAmJiAiLCBAY29u
anVuY3RzKTsKICAgICAkcmVzdWx0ID0gIigkcmVzdWx0KSIgaWYgQGNvbmp1bmN0cyA+IDE7CiAg
ICAgcmV0dXJuICRyZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMQXR0cmlidXRlcy5qc29uCmluZGV4IGVmZTU2OTc5NDg1OTRlY2E1ZGM5MWYxZGQyZDEx
MjliNjhiNWFkMTUuLjQ2OWZkMmRmOWVlNmYyNzY5YWU4OWI0MDU4MGY1Y2FiYTdiOGNlMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5q
c29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5q
c29uCkBAIC0xOTIsNiArMTkyLDkgQEAKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBb
ImludGVyZmFjZSIsICJkaWN0aW9uYXJ5IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlv
biIsICJjb25zdGFudCJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsiKiJdCiAgICAgICAgIH0s
CisgICAgICAgICJFbmFibGVkRm9yQ29udGV4dCI6IHsKKyAgICAgICAgICAgICJjb250ZXh0c0Fs
bG93ZWQiOiBbImF0dHJpYnV0ZSIsICJpbnRlcmZhY2UiXQorICAgICAgICB9LAogICAgICAgICAi
RW5hYmxlZEZvcldvcmxkIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiYXR0
cmlidXRlIiwgIm9wZXJhdGlvbiJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsiKiJdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5w
bCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCmlu
ZGV4IDFhYzhmZWQ2YTg2YmM0NDEzYmUyMWFkODkyODZhZjY1ZmJlMDA1YjguLjk3NzIxMzAzZjhh
OWFlMjI5ZGY2M2M0NGU1OGZjZDkzNGMyYzdjMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCkBAIC0yODMsNyArMjgzLDcgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JBdHRyaWJ1dGVzCiAgICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlTmFtZSAoc29ydCBrZXlzICV7JGV4dGVuZGVkQXR0cmlidXRlc30pIHsKICAgICAgIG5leHQg
dW5sZXNzICgkYXR0cmlidXRlTmFtZSBlcSAiQ29uZGl0aW9uYWwiIHx8ICRhdHRyaWJ1dGVOYW1l
IGVxICJFbmFibGVkQXRSdW50aW1lIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEZvcldv
cmxkIgogICAgICAgICB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEJ5U2V0dGluZyIgfHwg
JGF0dHJpYnV0ZU5hbWUgZXEgIlNlY3VyZUNvbnRleHQiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJQ
cml2YXRlSWRlbnRpZmllciIKLSAgICAgICAgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIlB1YmxpY0lk
ZW50aWZpZXIiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJEaXNhYmxlZEJ5UXVpcmsiIHx8ICRhdHRy
aWJ1dGVOYW1lIGVxICJFbmFibGVkQnlRdWlyayIpOworICAgICAgICB8fCAkYXR0cmlidXRlTmFt
ZSBlcSAiUHVibGljSWRlbnRpZmllciIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkRpc2FibGVkQnlR
dWlyayIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVuYWJsZWRCeVF1aXJrIiB8fCAkYXR0cmlidXRl
TmFtZSBlcSAiRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICAgIG15ICRleHRlbmRlZEF0dHJpYnV0
ZSA9ICRhdHRyaWJ1dGVOYW1lOwogICAgICAgJGV4dGVuZGVkQXR0cmlidXRlIC49ICI9IiAuICRl
eHRlbmRlZEF0dHJpYnV0ZXMtPnskYXR0cmlidXRlTmFtZX0gdW5sZXNzICRleHRlbmRlZEF0dHJp
YnV0ZXMtPnskYXR0cmlidXRlTmFtZX0gZXEgIlZBTFVFX0lTX01JU1NJTkciOwogICAgICAgcHVz
aChAZXh0ZW5kZWRBdHRyaWJ1dGVzTGlzdCwgJGV4dGVuZGVkQXR0cmlidXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmNmUxNDE2YzdjMmRiMzA3
ODc5NWIxZDAzOWZhNmQyMjdhMjhjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCkBA
IC0wLDAgKzEsMjY4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlckNhY2hlLmgiCisjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJv
dG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcFNuYXBzaG90QnVpbGRlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RW5h
YmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
CitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmlu
YWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBkaWRCZWNvbWVQ
cm90b3R5cGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsK
K307CisKK3VzaW5nIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IgPSBKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD47CisKK3Rl
bXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFs
T2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygiVGVzdEVuYWJsZWRGb3JDb250ZXh0
Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlRlc3RFbmFibGVkRm9yQ29udGV4dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcikg
fTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZVRhYmxlVmFsdWVzW10g
PQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RFbmFibGVkRm9yQ29udGV4
dENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcikgfSB9LAor
fTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlOjpz
X2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0UHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmluZm8oKSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGVUYWJsZVZhbHVlcywg
KnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnNf
aW5mbyA9IHsgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RW5hYmxlZEZvckNvbnRleHQpIH07
CisKK0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpKU1Rlc3RFbmFibGVkRm9yQ29udGV4dChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RFbmFibGVkRm9yQ29udGV4dD4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3RFbmFi
bGVkRm9yQ29udGV4dD4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7
Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRz
KHZtLCBpbmZvKCkpKTsKKworICAgIGlmICgoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSAmJiBUZXN0U3ViT2JqRW5hYmxlZEZv
ckNvbnRleHQ6OmVuYWJsZWRGb3JDb250ZXh0KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpKQorICAgICAgICBwdXRE
aXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0UHVi
bGljTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0RW5hYmxlZEZv
ckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvciwgc2V0SlNUZXN0
RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvciks
IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkpOworfQorCitKU09iamVjdCogSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQ6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmpl
Y3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6
OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4odm0sIGds
b2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25z
dHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmpl
Y3QpKTsKK30KKwordm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oY2VsbCk7CisgICAgdGhpc09i
amVjdC0+SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6On5KU1Rlc3RFbmFibGVkRm9yQ29udGV4dCgp
OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogSURMQXR0
cmlidXRlPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90
b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OmdldDxqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RT
dWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0YXRlLnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVz
dFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0
RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0Pjo6c2V0PHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKK30KKwordm9pZCBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dDo6aGVhcFNuYXBzaG90KEpTQ2VsbCogY2VsbCwgSGVhcFNuYXBzaG90
QnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Kj4oY2VsbCk7CisgICAgYnVpbGRlci5zZXRXcmFwcGVkT2JqZWN0
Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBidWlsZGVyLnNldExhYmVsRm9y
Q2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjpoZWFwU25hcHNob3QoY2VsbCwgYnVpbGRlcik7
Cit9CisKK2Jvb2wgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFN
KHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwo
KSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29u
dGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RFbmFibGVkRm9yQ29udGV4
dC0+d3JhcHBlZCgpLCBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dCk7Cit9CisKKyNpZiBFTkFCTEUo
QklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZp
ZXIoIj8/XzdUZXN0RW5hYmxlZEZvckNvbnRleHRAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vs
c2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIxVGVzdEVuYWJsZWRG
b3JDb250ZXh0RVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5E
SU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2
b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBXVEZfUFJFUEFSRV9WVEJMX1BPSU5URVJfRk9S
X0lOU1BFQ1RJT04oX19pZGVudGlmaWVyKCI/P183VGVzdEVuYWJsZWRGb3JDb250ZXh0QFdlYkNv
cmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gV1RG
X1BSRVBBUkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OKCZfWlRWTjdXZWJDb3JlMjFUZXN0
RW5hYmxlZEZvckNvbnRleHRFWzJdKTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBU
ZXN0RW5hYmxlZEZvckNvbnRleHQgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQg
dG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5
bW9ycGhpYzxUZXN0RW5hYmxlZEZvckNvbnRleHQ+Ojp2YWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29u
dGV4dCBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3Nl
cnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRl
c3RFbmFibGVkRm9yQ29udGV4dCBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdEVuYWJsZWRGb3JDb250
ZXh0IGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBj
dXJyZW50bHkgcmVxdWlyZSBUZXN0RW5hYmxlZEZvckNvbnRleHQgeW91IHRvIG9wdCBvdXQgb2Yg
YmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0
aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFT
RV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0Pihn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RF
bmFibGVkRm9yQ29udGV4dCYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsKTsKK30KKworVGVzdEVuYWJsZWRGb3JDb250ZXh0KiBKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dDo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjYzODdkNDIzNjEzMjI0N2YyZDdjNDk5ZmY0YTBmOTU2ZWMwNmFk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKKyNpbmNsdWRlICJUZXN0RW5hYmxlZEZvckNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dCA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0RW5hYmxlZEZv
ckNvbnRleHQ+OworICAgIHN0YXRpYyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogY3JlYXRlKEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0KHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3Jl
YXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIFRlc3RFbmFibGVkRm9yQ29udGV4dCogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAg
IERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChKU0NlbGwqLCBKU0M6Okhl
YXBTbmFwc2hvdEJ1aWxkZXImKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dChKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RFbmFibGVkRm9yQ29udGV4
dD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNz
IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3du
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNp
dG9yJiwgY29uc3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0RW5hYmxlZEZv
ckNvbnRleHQqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dE93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxp
bmUgdm9pZCogd3JhcHBlcktleShUZXN0RW5hYmxlZEZvckNvbnRleHQqIHdyYXBwYWJsZU9iamVj
dCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEVuYWJsZWRGb3JDb250
ZXh0Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RW5hYmxlZEZvckNvbnRleHQqIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpT
Qzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmKTsK
K2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0RW5hYmxlZEZv
ckNvbnRleHQ+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RFbmFi
bGVkRm9yQ29udGV4dD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RW5hYmxlZEZv
ckNvbnRleHQqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcAppbmRleCAzNWQxNmVlMGY3MzQ4NzFiMzkzN2U5ZjNlNGVmNmQ5NTI4OWJjOGI4
Li5iODkxNGY5ODY3ODNkM2Y5ODQ5OWRkYWQ1YWE0ZTQ1Y2E5NTU1YjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTVGVzdERPTUpJ
VC5oIgogI2luY2x1ZGUgIkpTVGVzdERvbWFpblNlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNUZXN0
RW5hYmxlZEJ5U2V0dGluZy5oIgorI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTVGVzdEV2
ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCkBAIC0xNzIsNiArMTcz
LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2Vj
dXJpdHlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGEKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250
ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKQEAgLTcwMiw2
ICs3MDUsOCBAQCB2b2lkIEpTVGVzdEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RG
ZWF0dXJlRW5hYmxlZCgpKQogICAgICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCku
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVB1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVy
OjpjcmVhdGUodm0sIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUs
IHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpLCBhdHRyaWJ1
dGVzRm9yU3RydWN0dXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvcikpKTsKICNlbmRpZgorICAgIGlmICgoanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
U2VjdXJlQ29udGV4dCgpICYmIFRlc3RFbmFibGVkRm9yQ29udGV4dDo6ZW5hYmxlZEZvckNvbnRl
eHQoKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSkpCisgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMo
KS5UZXN0RW5hYmxlZEZvckNvbnRleHRQdWJsaWNOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6
Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1
Y3Rvciwgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nv
cih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRp
bk5hbWVzKCkucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVByaXZhdGVOYW1lKCksIEN1c3RvbUdl
dHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRl
QXR0cmlidXRlLCBudWxscHRyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
KTsKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29y
KHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGlu
TmFtZXMoKS5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVQcml2YXRlTmFtZSgp
LCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlLCBudWxscHRyKSwgYXR0cmlidXRlc0ZvclN0
cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKQEAgLTExMTYsNiArMTEyMSwzMCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jbwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RW5hYmxlZEJ5
U2V0dGluZyIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIHJldHVybiBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQi
KSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZv
ckNvbnRleHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIpOworfQorCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEVuYWJsZWRGb3JDb250ZXh0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZTcwOTQ0NTNlZDU3MjIy
YjM0NDFiYTZlOThhNDkwYmU5N2QxYjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5pZGwKQEAgLTAs
MCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBFbmFibGVkRm9yQ29udGV4dCwKKyAgICBT
ZWN1cmVDb250ZXh0LAorXSBpbnRlcmZhY2UgVGVzdEVuYWJsZWRGb3JDb250ZXh0IHsKKyAgICBb
RW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZywgRW5hYmxlZEZvckNvbnRleHRdIGF0dHJpYnV0
ZSBUZXN0U3ViT2JqQ29uc3RydWN0b3IgVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0OworfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0Yzg2
ZWIzYjMyMTQxODZlNzE3MDYyYWIzMDUxNzM2OWNiNWMwMDBmLi5kYjRiOGMzZTI1NTE5NjcyN2Uw
ZTUyYTBkNTY3NzAzMjlmMTVkNTBlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDUtMDkgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtBcHBsZSBQYXldIFBheW1lbnQgQVBJcyBz
aG91bGQgYmUgY29tcGxldGVseSBkaXNhYmxlZCBpbiB3ZWIgdmlld3MgaW50byB3aGljaCBjbGll
bnRzIGhhdmUgaW5qZWN0ZWQgdXNlciBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3NTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUw
NjMxNTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIGEgbmV3IEFQSSB0ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9BcHBsZVBheS5tbToKKyAgICAgICAgKC1bVGVzdEFwcGxlUGF5U2NyaXB0TWVz
c2FnZUhhbmRsZXIgaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0YXRpb246Y2FuTWFrZVBheW1l
bnRzRXhwZWN0YXRpb246XSk6CisgICAgICAgICgtW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VI
YW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoLVtUZXN0QXBwbGVQYXlT
Y3JpcHRNZXNzYWdlSGFuZGxlciBpbml0V2l0aEV4cGVjdGF0aW9uOl0pOiBEZWxldGVkLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJp
bGl0eS5odG1sOgorCiAyMDE5LTA1LTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxl
LmNvbT4KIAogICAgICAgICBDaGFuZ2UgbXkgc3RhdHVzIHRvIGJlIGEgV2ViS2l0IHJldmlld2Vy
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBs
ZVBheS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGVQYXku
bW0KaW5kZXggYTJiNTgwMWY5MzliZDcwNjEyYzNiODlmZDBkYmM1NWM4ZDU3MTQ2Zi4uZDYzNDFj
YTc0M2NmMGZjMzFhMzUzZjEyY2RlNTg3MmVkNjcwZThiNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxlUGF5Lm1tCkBAIC00MSwyOSArNDEsMzMg
QEAgc3RhdGljIGJvb2wgaXNEb25lOwogQGludGVyZmFjZSBUZXN0QXBwbGVQYXlTY3JpcHRNZXNz
YWdlSGFuZGxlciA6IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgogCiAtIChpbnN0
YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEV4
cGVjdGF0aW9uOihCT09MKWV4cGVjdGF0aW9uOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQVBJ
c0F2YWlsYWJsZUV4cGVjdGF0aW9uOihCT09MKWFwaXNBdmFpbGFibGVFeHBlY3RhdGlvbiBjYW5N
YWtlUGF5bWVudHNFeHBlY3RhdGlvbjooQk9PTCljYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjsK
IAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRs
ZXIgewotICAgIEJPT0wgX2V4cGVjdGF0aW9uOworICAgIEJPT0wgX2FwaXNBdmFpbGFibGVFeHBl
Y3RhdGlvbjsKKyAgICBCT09MIF9jYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjsKIH0KIAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRXhwZWN0YXRpb246KEJPT0wpZXhwZWN0YXRpb24KKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjooQk9PTClhcGlzQXZh
aWxhYmxlRXhwZWN0YXRpb24gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246KEJPT0wpY2FuTWFr
ZVBheW1lbnRzRXhwZWN0YXRpb24KIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIF9leHBlY3RhdGlvbiA9IGV4cGVjdGF0aW9uOwor
ICAgIF9hcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24gPSBhcGlzQXZhaWxhYmxlRXhwZWN0YXRpb247
CisgICAgX2Nhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uID0gY2FuTWFrZVBheW1lbnRzRXhwZWN0
YXRpb247CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9s
bGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRS
ZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQogewotICAgIEVY
UEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAInN1cHBv
cnRzVmVyc2lvbiJdIGJvb2xWYWx1ZV0pOwotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtb
bWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXltZW50cyJdIGJvb2xWYWx1ZV0p
OwotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktl
eTpAImNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkIl0gYm9vbFZhbHVlXSk7Ci0gICAgRVhQ
RUNUX0VRKF9leHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFr
ZVBheW1lbnQiXSBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEoX2FwaXNBdmFpbGFibGVFeHBl
Y3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiYXBwbGVQYXlTZXNzaW9uQXZh
aWxhYmxlIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9hcGlzQXZhaWxhYmxlRXhwZWN0
YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAInBheW1lbnRSZXF1ZXN0QXZhaWxh
YmxlIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtlUGF5bWVudHNFeHBlY3Rh
dGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAic3VwcG9ydHNWZXJzaW9uIl0gYm9v
bFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbiwgW1tt
ZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFrZVBheW1lbnRzIl0gYm9vbFZhbHVlXSk7
CisgICAgRVhQRUNUX0VRKF9jYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJv
ZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQiXSBib29sVmFs
dWVdKTsKKyAgICBFWFBFQ1RfRVEoX2Nhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uLCBbW21lc3Nh
Z2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtlUGF5bWVudCJdIGJvb2xWYWx1ZV0pOwogICAg
IGlzRG9uZSA9IHRydWU7CiB9CiAKQEAgLTc1LDcgKzc5LDcgQEAgVEVTVChBcHBsZVBheSwgQXBw
bGVQYXlBdmFpbGFibGVCeURlZmF1bHQpCiB7CiAgICAgW1Rlc3RQcm90b2NvbCByZWdpc3Rlcldp
dGhTY2hlbWU6QCJodHRwcyJdOwogCi0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3Rh
dGlvbjpZRVNdKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBs
ZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBl
Y3RhdGlvbjpZRVMgY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246WUVTXSk7CiAKICAgICBXS1dl
YlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vz
c1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKICAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENv
bnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFt
ZTpAInRlc3RBcHBsZVBheSJdOwpAQCAtODgsMTEgKzkyLDExIEBAIFRFU1QoQXBwbGVQYXksIEFw
cGxlUGF5QXZhaWxhYmxlQnlEZWZhdWx0KQogICAgIFtUZXN0UHJvdG9jb2wgdW5yZWdpc3Rlcl07
CiB9CiAKLVRFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHREaXNhYmxlc0FwcGxlUGF5KQorVEVTVChB
cHBsZVBheSwgVXNlclNjcmlwdEF0RG9jdW1lbnRTdGFydERpc2FibGVzQXBwbGVQYXkpCiB7CiAg
ICAgW1Rlc3RQcm90b2NvbCByZWdpc3RlcldpdGhTY2hlbWU6QCJodHRwcyJdOwogCi0gICAgYXV0
byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFu
ZGxlciBhbGxvY10gaW5pdFdpdGhFeHBlY3RhdGlvbjpOT10pOworICAgIGF1dG8gbWVzc2FnZUhh
bmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2Nd
IGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9uOk5PIGNhbk1ha2VQYXltZW50c0V4cGVj
dGF0aW9uOk5PXSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlw
dCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6QCJ3aW5kb3cud2tVc2VyU2NyaXB0SW5qZWN0ZWQgPSB0
cnVlIiBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3Rh
cnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsKIAogICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0
aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFs
cyJdOwpAQCAtMTA5LDExICsxMTMsMzIgQEAgVEVTVChBcHBsZVBheSwgVXNlclNjcmlwdERpc2Fi
bGVzQXBwbGVQYXkpCiAgICAgW1Rlc3RQcm90b2NvbCB1bnJlZ2lzdGVyXTsKIH0KIAorVEVTVChB
cHBsZVBheSwgVXNlclNjcmlwdEF0RG9jdW1lbnRFbmREaXNhYmxlc0FwcGxlUGF5KQoreworICAg
IFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKKyAgICAKKyAgICBh
dXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjpOTyBjYW5NYWtl
UGF5bWVudHNFeHBlY3RhdGlvbjpOT10pOworICAgIGF1dG8gdXNlclNjcmlwdCA9IGFkb3B0TlMo
W1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOkAid2luZG93LndrVXNlclNjcmlw
dEluamVjdGVkID0gdHJ1ZSIgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1l
QXREb2N1bWVudEVuZCBmb3JNYWluRnJhbWVPbmx5OllFU10pOworICAgIAorICAgIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBf
dGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1
Z0luV2l0aEludGVybmFscyJdOworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJv
bGxlciBhZGRVc2VyU2NyaXB0OnVzZXJTY3JpcHQuZ2V0KCldOworICAgIFtjb25maWd1cmF0aW9u
LnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFu
ZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07CisgICAgCisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVy
byBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cHM6Ly9idW5kbGUtaHRtbC1maWxlL2FwcGxlLXBheS1hdmFpbGFiaWxpdHkiXV1dOworICAgIAor
ICAgIFV0aWw6OnJ1bigmaXNEb25lKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoWUVTLCBbW3dlYlZp
ZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndpbmRvdy53a1VzZXJTY3JpcHRJbmpl
Y3RlZCJdIGJvb2xWYWx1ZV0pOworICAgIAorICAgIFtUZXN0UHJvdG9jb2wgdW5yZWdpc3Rlcl07
Cit9CisKIFRFU1QoQXBwbGVQYXksIFVzZXJBZ2VudFNjcmlwdEV2YWx1YXRpb25EaXNhYmxlc0Fw
cGxlUGF5KQogewogICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMi
XTsKIAotICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2Ny
aXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0YXRpb246Tk9dKTsKKyAgICBh
dXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjpZRVMgY2FuTWFr
ZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dKTsKIAogICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0
aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFs
cyJdOwogICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2FwcGxl
LXBheS1hdmFpbGFiaWxpdHkuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sCmluZGV4IGYzMDJjNmFkOWY5NjkzOGFk
NjQ0ZmMwN2UxMWUzZmIyNWZmZWEzM2EuLjFmYzRlOWI3OWI2ZTE3NTU4OGE5YzEyZDRiMDljNTdh
NzI0M2RmNGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sCkBAIC0yOSw2ICsy
OSwxMyBAQAogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4g
ewogICAgICAgICBpbnRlcm5hbHMubW9ja1BheW1lbnRDb29yZGluYXRvci5zdXBwb3J0c1VucmVz
dHJpY3RlZEFwcGxlUGF5ID0gZmFsc2U7CiAKKyAgICAgICAgY29uc3QgYXBwbGVQYXlTZXNzaW9u
QXZhaWxhYmxlID0gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uOworICAgICAgICBjb25zdCBwYXlt
ZW50UmVxdWVzdEF2YWlsYWJsZSA9ICEhd2luZG93LlBheW1lbnRSZXF1ZXN0OworICAgICAgICBp
ZiAoIWFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSB8fCAhcGF5bWVudFJlcXVlc3RBdmFpbGFibGUp
IHsKKyAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RBcHBsZVBh
eS5wb3N0TWVzc2FnZSh7IGFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSwgcGF5bWVudFJlcXVlc3RB
dmFpbGFibGUgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBj
b25zdCBzdXBwb3J0c1ZlcnNpb24gPSBBcHBsZVBheVNlc3Npb24uc3VwcG9ydHNWZXJzaW9uKDEp
OwogICAgICAgICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBBcHBsZVBheVNlc3Npb24uY2FuTWFr
ZVBheW1lbnRzKCk7CiAgICAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJk
ID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKCcn
KTsKQEAgLTQzLDYgKzUwLDggQEAKICAgICAgICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2Fp
dCBwYXltZW50UmVxdWVzdC5jYW5NYWtlUGF5bWVudCgpOwogCiAgICAgICAgIHdpbmRvdy53ZWJr
aXQubWVzc2FnZUhhbmRsZXJzLnRlc3RBcHBsZVBheS5wb3N0TWVzc2FnZSh7CisgICAgICAgICAg
ICBhcHBsZVBheVNlc3Npb25BdmFpbGFibGUsCisgICAgICAgICAgICBwYXltZW50UmVxdWVzdEF2
YWlsYWJsZSwKICAgICAgICAgICAgIHN1cHBvcnRzVmVyc2lvbiwKICAgICAgICAgICAgIGNhbk1h
a2VQYXltZW50cywKICAgICAgICAgICAgIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369616</attachid>
            <date>2019-05-10 16:21:13 -0700</date>
            <delta_ts>2019-05-10 16:33:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197751-20190510162112.patch</filename>
            <type>text/plain</type>
            <size>51332</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJkOWNlYTMxMmY3NTQx
YWVhZGQwYzRiMTk1NmE5MDY5YjY2NWRmMC4uZTE5MDAxNjg4ODFjMzhhZmJiMWQ0NTNmZjg2N2Vm
NmNjZTMzM2Y1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTA1LTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUgUGF5XSBQYXltZW50
IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZpZXdzIGludG8gd2hp
Y2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiByMjQzMzI0LCB3aGVuIGEgZG9jdW1lbnQgaGFzIGhhZCB1c2VyIGFnZW50IHNj
cmlwdHMgaW5qZWN0ZWQgaW50byBpdCwgcGF5bWVudCBBUElzIHdlcmUKKyAgICAgICAgZGlzYWJs
ZWQgYXQgcnVudGltZSBieSBoYXZpbmcgYWxsIGVudHJ5IHBvaW50cyByZXR1cm4gZmFsc3kgdmFs
dWVzIG9yIHRocm93IGV4Y2VwdGlvbnMKKyAgICAgICAgKGUuZy4sIEFwcGxlUGF5U2Vzc2lvbi5j
YW5NYWtlUGF5bWVudHMoKSByZXR1cm5zIGZhbHNlKS4KKworICAgICAgICBJbiB0aGUgY2FzZSBv
ZiB1c2VyIHNjcmlwdHMgaW4gcGFydGljdWxhciAoZS5nLiwgV0tVc2VyU2NyaXB0KSwgc2luY2Ug
d2Uga25vdyB3aGV0aGVyIHRoZXNlCisgICAgICAgIGV4aXN0IGF0IHRoZSB0aW1lIHdlIGNyZWF0
ZSBhIGRvY3VtZW50J3MgRE9NV2luZG93LCB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gcjI0MzMyNCBi
eQorICAgICAgICBjb21wbGV0ZWx5IGRpc2FibGluZyB0aGUgcGF5bWVudCBBUElzIGluIHRoZSBw
cmVzZW5jZSBvZiB1c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB0aGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHRoZSAnRW5hYmxlZEJ5Q29udGV4dCcgZXh0ZW5kZWQgYXR0cmli
dXRlIGZvcgorICAgICAgICBpbnRlcmZhY2VzLCB3aGljaCBpbnN0cnVjdHMgdGhlIGJpbmRpbmdz
IGdlbmVyYXRvciB0byBhZGQgYSBjb25qdW5jdCB0byB0aGUgcGF5bWVudCBBUEkKKyAgICAgICAg
Y29uc3RydWN0b3JzIHRoYXQgYXNrcyB0aGUgaW50ZXJmYWNlJ3MgaW1wbGVtZW50YXRpb24gY2xh
c3Mgd2hldGhlciBpdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IKKyAgICAgICAgYSBnaXZlbiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LiBUaGUgUGF5bWVudFJlcXVlc3QgYW5kIEFwcGxlUGF5U2Vzc2lv
biBpbnRlcmZhY2VzIGFkb3B0IHRoaXMKKyAgICAgICAgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSB0
byBpbXBsZW1lbnQgdGhlIG5ldyB1c2VyIHNjcmlwdCBjaGVjay4KKworICAgICAgICBBZGRlZCBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Np
b24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6c2hvdWxkRW5hYmxlQXBw
bGVQYXlBUElzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFNlc3Npb246OmVuYWJsZWRGb3JDb250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmg6CisgICAgICAgICog
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXltZW50SGFuZGxlcjo6ZW5hYmxlZEZvckNvbnRleHQpOgorICAgICAgICAqIE1vZHVs
ZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjplbmFibGVkRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50
cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvcGF5bWVudHJlcXVl
c3QvUGF5bWVudFJlcXVlc3QuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoTmVlZHNSdW50aW1lQ2hlY2spOgorICAgICAgICAoR2Vu
ZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
cHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckF0dHJpYnV0
ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9y
Q29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZvckNvbnRleHQuaWRs
OiBBZGRlZC4KKwogMjAxOS0wNS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWZpbmUgQXVkaW9TZXNzaW9uIHJvdXRlIHNoYXJpbmcgcG9saWN5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vz
c2lvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lv
bi5pZGwKaW5kZXggNjZhODlmODliMzljOTRlNDkzODBkZjVhYmU2OTNhMDA4MmZkZDAwNS4uMDg1
MGJkNWI2MDUwMmU2YmY4NWMwZWU2YmNjNzA1ZjY5MDU5MzkwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlkbApAQCAtMzAsNiAr
MzAsNyBAQAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAgICAgQ29uc3RydWN0
b3JNYXlUaHJvd0V4Y2VwdGlvbiwKICAgICBFbmFibGVkQnlTZXR0aW5nPUFwcGxlUGF5LAorICAg
IEVuYWJsZWRGb3JDb250ZXh0LAogXSBpbnRlcmZhY2UgQXBwbGVQYXlTZXNzaW9uIDogRXZlbnRU
YXJnZXQgewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVRVU19TVUNDRVNTID0gMDsKICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFUVVNfRkFJTFVSRSA9IDE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5k
ZXggNTI0ZjQzNjU5OGMyMjg0NWZhNTNjNzE2NjQ5ZTc1NDY4YzM2Y2YwYS4uZDU1OTk0OGQwYTZm
YWE2M2UyMDViYTA5ZmNmMTkyYjFiMGJiMDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMzEsOSArMzEs
MTEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkxpbmtJY29uQ29sbGVjdG9y
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YXltZW50QXV0aG9yaXphdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIlBheW1lbnRTZXNzaW9uLmgiCisjaW5jbHVkZSAiVXNlckNv
bnRlbnRQcm92aWRlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KIApAQCAtMjUxLDYgKzI1MywyMiBAQCBPcHRpb25hbDxTdHJpbmc+
IFBheW1lbnRDb29yZGluYXRvcjo6dmFsaWRhdGVkUGF5bWVudE5ldHdvcmsoRG9jdW1lbnQmIGRv
Y3VtZW50LAogICAgIHJldHVybiBtX2NsaWVudC52YWxpZGF0ZWRQYXltZW50TmV0d29yayhwYXlt
ZW50TmV0d29yayk7CiB9CiAKK2Jvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpzaG91bGRFbmFibGVB
cHBsZVBheUFQSXMoRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIGlmIChtX2NsaWVu
dC5zdXBwb3J0c1VucmVzdHJpY3RlZEFwcGxlUGF5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRCgic2hvdWxkRW5hYmxlQXBwbGVQYXlBUElzKCkgLT4gdHJ1ZSAodW5yZXN0cmlj
dGVkIGNsaWVudCkiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBz
aG91bGRFbmFibGVBUElzID0gdHJ1ZTsKKyAgICBkb2N1bWVudC5wYWdlKCktPnVzZXJDb250ZW50
UHJvdmlkZXIoKS5mb3JFYWNoVXNlclNjcmlwdChbJl0oRE9NV3JhcHBlcldvcmxkJiwgY29uc3Qg
VXNlclNjcmlwdCYpIHsKKyAgICAgICAgc2hvdWxkRW5hYmxlQVBJcyA9IGZhbHNlOworICAgIH0p
OworCisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgic2hvdWxkRW5hYmxlQXBwbGVQYXlBUElz
KCkgLT4gJWQiLCBzaG91bGRFbmFibGVBUElzKTsKKyAgICByZXR1cm4gc2hvdWxkRW5hYmxlQVBJ
czsKK30KKwogYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OnNob3VsZEFsbG93QXBwbGVQYXkoRG9j
dW1lbnQmIGRvY3VtZW50KSBjb25zdAogewogICAgIGlmIChtX2NsaWVudC5zdXBwb3J0c1VucmVz
dHJpY3RlZEFwcGxlUGF5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5oCmluZGV4IDNiMzIxYTIxODU1MGQwOTRkY2ZkMTFj
Y2I2OTRlYWE0NTVjOTUwZjkuLjI2MGEzZTI4MTE2MjZlN2U0OGRjYjAwYzIyZTA3NjNjOWIyYTZl
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENv
b3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxT
dHJpbmc+IHZhbGlkYXRlZFBheW1lbnROZXR3b3JrKERvY3VtZW50JiwgdW5zaWduZWQgdmVyc2lv
biwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKKyAgICBib29sIHNob3VsZEVuYWJsZUFwcGxlUGF5
QVBJcyhEb2N1bWVudCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkQWxs
b3dBcHBsZVBheShEb2N1bWVudCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hv
dWxkQWxsb3dVc2VyQWdlbnRTY3JpcHRzKERvY3VtZW50JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKaW5kZXggODdh
NDRmNGIzNWJiMmZiNDI5M2UzMDRmMjdmMDZiNmU2ZWJhMTk0OS4uNjVkOWY4NjliMDhjODE5NDY1
NjljNzk3Nzc4NzdmOGNhYTQzNWFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Miw2ICs3MywxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYXltZW50U2Vzc2lvbjo6Y2FuQ3Jl
YXRlU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYm9v
bCBQYXltZW50U2Vzc2lvbjo6ZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihj
b250ZXh0KTsKKyAgICBpZiAoYXV0byBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQorICAgICAgICBy
ZXR1cm4gcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuc2hvdWxkRW5hYmxlQXBwbGVQYXlBUElz
KGRvY3VtZW50KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExFX1BBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uaAppbmRleCA4ZjdhNGI2NTBmMGI5MmY4
MTVmOWI1ZDVjY2UxNzlhN2Q1MjkxMDQzLi4zMjIyZjU5ZTA5MDYxMzNlYzRjNDg3NzNlMDE3ODU0
M2ZmNzFhNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1Bh
eW1lbnRTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXlt
ZW50U2Vzc2lvbi5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIFBheW1lbnRNZXRob2Q7CiBjbGFz
cyBQYXltZW50U2Vzc2lvbiA6IHB1YmxpYyB2aXJ0dWFsIFBheW1lbnRTZXNzaW9uQmFzZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGNhbkNyZWF0ZVNlc3Npb24oRG9j
dW1lbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBlbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRp
b25Db250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlTWVyY2hhbnQoVVJMJiYpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxl
ci5jcHAKaW5kZXggMDQ4OGVhZWI2NmZiNTBjOWI0ODUwMzBlYWYzZDRkMTAyOWFlYTAxOC4uYTc2
ZDRiNGI5YmRiYTc5YzRlMjYxYWQ1YjE2MTM5Y2U3ZjJiZDYyNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjEsNiArNjEsMTYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGF5bWVudEhhbmRsZXI6OmNhbkNyZWF0
ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIHJldHVybiB7IH07CiB9CiAKK2Jvb2wg
UGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCit7CisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKyAgICByZXR1cm4gUGF5bWVudFNl
c3Npb246OmVuYWJsZWRGb3JDb250ZXh0KGNvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGJvb2wgUGF5bWVu
dEhhbmRsZXI6Omhhc0FjdGl2ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVO
QUJMRShBUFBMRV9QQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKaW5kZXggMGI0ZGYwM2JiNjdiNDdhM2RiMWU1YTc4
NjI0ZDI5NGE3NDA3MGFmYS4uYjQ4YmE3MzNiYjBhMGQ0N2M2N2M2Yzk0ODE1OTY4ODcyYTE5NzBm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3Qv
UGF5bWVudEhhbmRsZXIuaApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBQYXltZW50SGFuZGxlciA6
IHB1YmxpYyB2aXJ0dWFsIFBheW1lbnRTZXNzaW9uQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZlB0cjxQYXltZW50SGFuZGxlcj4gY3JlYXRlKERvY3VtZW50JiwgUGF5bWVudFJlcXVlc3Qm
LCBjb25zdCBQYXltZW50UmVxdWVzdDo6TWV0aG9kSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBF
eGNlcHRpb25Pcjx2b2lkPiBjYW5DcmVhdGVTZXNzaW9uKERvY3VtZW50Jik7CisgICAgc3RhdGlj
IGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAgIHN0
YXRpYyBib29sIGhhc0FjdGl2ZVNlc3Npb24oRG9jdW1lbnQmKTsKIAogICAgIHZpcnR1YWwgRXhj
ZXB0aW9uT3I8dm9pZD4gY29udmVydERhdGEoSlNDOjpKU1ZhbHVlJiYpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVz
dC5jcHAKaW5kZXggNjFmZjViZTIxY2FhZTdlZGU5OTg2NmFmYzAyOWZjZGRkMDgyY2I5OC4uZDJl
ZjdhNjFlZDUxMGIwNmEzMmMwNTJmYzcwOTAzNjU1YjM5ZTAwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJK
U1BheW1lbnREZXRhaWxzVXBkYXRlLmgiCiAjaW5jbHVkZSAiSlNQYXltZW50UmVzcG9uc2UuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGF5bWVudEFkZHJlc3MuaCIKKyNpbmNsdWRl
ICJQYXltZW50Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJQYXltZW50Q3VycmVuY3lBbW91bnQu
aCIKICNpbmNsdWRlICJQYXltZW50RGV0YWlsc0luaXQuaCIKICNpbmNsdWRlICJQYXltZW50SGFu
ZGxlci5oIgpAQCAtMzUxLDYgKzM1MywxMSBAQCBFeGNlcHRpb25PcjxSZWY8UGF5bWVudFJlcXVl
c3Q+PiBQYXltZW50UmVxdWVzdDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdAogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFBheW1lbnRSZXF1ZXN0KGRvY3VtZW50LCBXVEZNb3ZlKG9w
dGlvbnMpLCBXVEZNb3ZlKGRldGFpbHMpLCBXVEZNb3ZlKHN0ZDo6Z2V0PDE+KHNoaXBwaW5nT3B0
aW9uQW5kTW9kaWZpZXJEYXRhKSksIFdURk1vdmUoc2VyaWFsaXplZE1ldGhvZERhdGEpLCBXVEZN
b3ZlKHN0ZDo6Z2V0PDA+KHNoaXBwaW5nT3B0aW9uQW5kTW9kaWZpZXJEYXRhKSkpKTsKIH0KIAor
Ym9vbCBQYXltZW50UmVxdWVzdDo6ZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gUGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JD
b250ZXh0KGNvbnRleHQpOworfQorCiBQYXltZW50UmVxdWVzdDo6UGF5bWVudFJlcXVlc3QoRG9j
dW1lbnQmIGRvY3VtZW50LCBQYXltZW50T3B0aW9ucyYmIG9wdGlvbnMsIFBheW1lbnREZXRhaWxz
SW5pdCYmIGRldGFpbHMsIFZlY3RvcjxTdHJpbmc+JiYgc2VyaWFsaXplZE1vZGlmaWVyRGF0YSwg
VmVjdG9yPE1ldGhvZD4mJiBzZXJpYWxpemVkTWV0aG9kRGF0YSwgU3RyaW5nJiYgc2VsZWN0ZWRT
aGlwcGluZ09wdGlvbikKICAgICA6IEFjdGl2ZURPTU9iamVjdCB7IGRvY3VtZW50IH0KICAgICAs
IG1fb3B0aW9ucyB7IFdURk1vdmUob3B0aW9ucykgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCmluZGV4IGNjMGJiY2I1
ZjRjODRjOWZiZDdkOGYzODRiOTY1YmJmYWI1MjdjZGYuLmY3YzM0MjY3OTQ0NTFiNWJlZmRhMDdi
Yjk1ZDM1NzY0NDFhZGVkOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIFNob3dQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETEludGVyZmFj
ZTxQYXltZW50UmVzcG9uc2U+PjsKIAogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8UGF5bWVu
dFJlcXVlc3Q+PiBjcmVhdGUoRG9jdW1lbnQmLCBWZWN0b3I8UGF5bWVudE1ldGhvZERhdGE+JiYs
IFBheW1lbnREZXRhaWxzSW5pdCYmLCBQYXltZW50T3B0aW9ucyYmKTsKKyAgICBzdGF0aWMgYm9v
bCBlbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgflBheW1l
bnRSZXF1ZXN0KCk7CiAKICAgICB2b2lkIHNob3coRG9jdW1lbnQmLCBSZWZQdHI8RE9NUHJvbWlz
ZT4mJiBkZXRhaWxzUHJvbWlzZSwgU2hvd1Byb21pc2UmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCmluZGV4
IGI5YzEyNjRjY2E0ODcxNzRmZmY0ZDU1ZDNjNzhkMzIyNTI2Yjk5ZjAuLjkxOGMxMDgzZjRiYzZh
ZDdjMTk5MjY0NTRmNDA3MTlhNzQ2YWI2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCkBAIC0zMCw2ICsz
MCw3IEBACiAgICAgQ29uc3RydWN0b3JDYWxsV2l0aD1Eb2N1bWVudCwKICAgICBDb25zdHJ1Y3Rv
ck1heVRocm93RXhjZXB0aW9uLAogICAgIEVuYWJsZWRCeVNldHRpbmc9UGF5bWVudFJlcXVlc3Qs
CisgICAgRW5hYmxlZEZvckNvbnRleHQsCiAgICAgU2VjdXJlQ29udGV4dCwKIF0gaW50ZXJmYWNl
IFBheW1lbnRSZXF1ZXN0IDogRXZlbnRUYXJnZXQgewogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0g
UHJvbWlzZTxQYXltZW50UmVzcG9uc2U+IHNob3cob3B0aW9uYWwgUHJvbWlzZTxQYXltZW50RGV0
YWlsc1VwZGF0ZT4gZGV0YWlsc1Byb21pc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA1MDVjNGYyZWYxNDFiMzU2ODJh
MTc0NDc1ZGVjMjI2YWY5ZDcxZGNjLi5mMzA5YTRiN2M3ZWRhYmYwZTYxMDlhMzgzMDBkMTM4ZWMz
ZDBkMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtMTcwNSw2ICsxNzA1LDcgQEAgc3ViIE5lZWRzUnVudGltZUNoZWNr
CiAgICAgfQogCiAgICAgcmV0dXJuICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFi
bGVkQXRSdW50aW1lfQorICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
RW5hYmxlZEZvckNvbnRleHR9CiAgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntFbmFibGVkRm9yV29ybGR9CiAgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntFbmFibGVkQnlTZXR0aW5nfQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RGlzYWJsZWRCeVF1aXJrfQpAQCAtMzc4OCw2ICszNzg5LDE1IEBAIHN1YiBH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZwogICAgICAgICB9CiAgICAgfQog
CisgICAgaWYgKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkRm9yQ29udGV4
dH0pIHsKKyAgICAgICAgYXNzZXJ0KCJNdXN0IG5vdCBzcGVjaWZ5IHZhbHVlIGZvciBFbmFibGVk
Rm9yQ29udGV4dC4iKSB1bmxlc3MgJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJs
ZWRGb3JDb250ZXh0fSBlcSAiVkFMVUVfSVNfTUlTU0lORyI7CisgICAgICAgIGFzc2VydCgiRW5h
YmxlZEZvckNvbnRleHQgbXVzdCBiZSBhbiBpbnRlcmZhY2Ugb3IgY29uc3RydWN0b3IgYXR0cmli
dXRlLiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJGNvbnRleHQt
PnR5cGUpOworCisgICAgICAgIG15ICRjb250ZXh0UmVmID0gIipqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigiIC4gJGdsb2JhbE9iamVjdFB0ciAuICIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkiOworICAgICAgICBteSAkbmFtZSA9ICRjb250ZXh0LT5uYW1lOworICAgICAgICBwdXNoKEBj
b25qdW5jdHMsICAiJHtuYW1lfTo6ZW5hYmxlZEZvckNvbnRleHQoIiAuICRjb250ZXh0UmVmIC4g
IikiKTsKKyAgICB9CisKICAgICBteSAkcmVzdWx0ID0gam9pbigiICYmICIsIEBjb25qdW5jdHMp
OwogICAgICRyZXN1bHQgPSAiKCRyZXN1bHQpIiBpZiBAY29uanVuY3RzID4gMTsKICAgICByZXR1
cm4gJHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy5qc29uIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLmpzb24KaW5kZXggZWZlNTY5Nzk0ODU5NGVjYTVkYzkxZjFkZDJkMTEyOWI2OGI1
YWQxNS4uNDY5ZmQyZGY5ZWU2ZjI3NjlhZTg5YjQwNTgwZjVjYWJhN2I4Y2UzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24KQEAg
LTE5Miw2ICsxOTIsOSBAQAogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJm
YWNlIiwgImRpY3Rpb25hcnkiLCAiZW51bSIsICJhdHRyaWJ1dGUiLCAib3BlcmF0aW9uIiwgImNv
bnN0YW50Il0sCiAgICAgICAgICAgICAidmFsdWVzIjogWyIqIl0KICAgICAgICAgfSwKKyAgICAg
ICAgIkVuYWJsZWRGb3JDb250ZXh0IjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6
IFsiYXR0cmlidXRlIiwgImludGVyZmFjZSJdCisgICAgICAgIH0sCiAgICAgICAgICJFbmFibGVk
Rm9yV29ybGQiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJhdHRyaWJ1dGUi
LCAib3BlcmF0aW9uIl0sCiAgICAgICAgICAgICAidmFsdWVzIjogWyIqIl0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKaW5kZXggMWFj
OGZlZDZhODZiYzQ0MTNiZTIxYWQ4OTI4NmFmNjVmYmUwMDViOC4uOTc3MjEzMDNmOGE5YWUyMjlk
ZjYzYzQ0ZTU4ZmNkOTM0YzJjN2MzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKQEAgLTI4Myw3ICsyODMsNyBAQCBzdWIgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckF0dHJpYnV0ZXMKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1l
IChzb3J0IGtleXMgJXskZXh0ZW5kZWRBdHRyaWJ1dGVzfSkgewogICAgICAgbmV4dCB1bmxlc3Mg
KCRhdHRyaWJ1dGVOYW1lIGVxICJDb25kaXRpb25hbCIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVu
YWJsZWRBdFJ1bnRpbWUiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJFbmFibGVkRm9yV29ybGQiCiAg
ICAgICAgIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJFbmFibGVkQnlTZXR0aW5nIiB8fCAkYXR0cmli
dXRlTmFtZSBlcSAiU2VjdXJlQ29udGV4dCIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIlByaXZhdGVJ
ZGVudGlmaWVyIgotICAgICAgICB8fCAkYXR0cmlidXRlTmFtZSBlcSAiUHVibGljSWRlbnRpZmll
ciIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkRpc2FibGVkQnlRdWlyayIgfHwgJGF0dHJpYnV0ZU5h
bWUgZXEgIkVuYWJsZWRCeVF1aXJrIik7CisgICAgICAgIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJQ
dWJsaWNJZGVudGlmaWVyIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRGlzYWJsZWRCeVF1aXJrIiB8
fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEJ5UXVpcmsiIHx8ICRhdHRyaWJ1dGVOYW1lIGVx
ICJFbmFibGVkRm9yQ29udGV4dCIpOwogICAgICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlID0gJGF0
dHJpYnV0ZU5hbWU7CiAgICAgICAkZXh0ZW5kZWRBdHRyaWJ1dGUgLj0gIj0iIC4gJGV4dGVuZGVk
QXR0cmlidXRlcy0+eyRhdHRyaWJ1dGVOYW1lfSB1bmxlc3MgJGV4dGVuZGVkQXR0cmlidXRlcy0+
eyRhdHRyaWJ1dGVOYW1lfSBlcSAiVkFMVUVfSVNfTUlTU0lORyI7CiAgICAgICBwdXNoKEBleHRl
bmRlZEF0dHJpYnV0ZXNMaXN0LCAkZXh0ZW5kZWRBdHRyaWJ1dGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI3ZmI3ZDI1NmY1OTc1YzEyYjJkNDIw
ZGVkMzZlNjRjZDcyMGEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKQEAgLTAsMCAr
MSwyNjcgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RTdWJPYmouaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwU25hcHNob3RCdWlsZGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVj
dDsKKyAgICBzdGF0aWMgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFS
RV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENv
bnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RFbmFibGVkRm9yQ29udGV4dCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQor
Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHQiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwor
CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0OjppbmZvKCksIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJv
dG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0OjpzX2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHQiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0KSB9OworCitKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6SlNUZXN0RW5h
YmxlZEZvckNvbnRleHQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkKKyAgICA6IEpT
RE9NV3JhcHBlcjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBpZiAoKGRvd25jYXN0PERv
Y3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkgJiYg
VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0OjplbmFibGVkRm9yQ29udGV4dCgqanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKSkKKyAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLlRlc3RTdWJPYmpF
bmFibGVkRm9yQ29udGV4dFB1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3IsIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKK30KKworSlNPYmpl
Y3QqIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+
KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp+SlNUZXN0
RW5hYmxlZEZvckNvbnRleHQoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQqIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OmNhc3Qo
RXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oc3RhdGUudm0oKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFi
bGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsK
KyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9y
Q29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+OjpnZXQ8anNUZXN0RW5h
YmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9i
akVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OnNldDxzZXRKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Iik7
Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmhlYXBTbmFwc2hvdChKU0NlbGwq
IGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KGNlbGwpOworICAgIGJ1aWxk
ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
YnVpbGRlci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6aGVhcFNuYXBz
aG90KGNlbGwsIGJ1aWxkZXIpOworfQorCitib29sIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Cit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RFbmFi
bGVkRm9yQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oaGFu
ZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERP
TVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNU
ZXN0RW5hYmxlZEZvckNvbnRleHQtPndyYXBwZWQoKSwganNUZXN0RW5hYmxlZEZvckNvbnRleHQp
OworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
ICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdEVuYWJsZWRGb3JDb250ZXh0QFdlYkNvcmVA
QDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dl
YkNvcmUyMVRlc3RFbmFibGVkRm9yQ29udGV4dEVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpCit7
CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxl
UG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gV1RGX1BSRVBB
UkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OKF9faWRlbnRpZmllcigiPz9fN1Rlc3RFbmFi
bGVkRm9yQ29udGV4dEBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9IFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTigm
X1pUVk43V2ViQ29yZTIxVGVzdEVuYWJsZWRGb3JDb250ZXh0RVsyXSk7CisjZW5kaWYKKworICAg
IC8vIElmIHRoaXMgZmFpbHMgVGVzdEVuYWJsZWRGb3JDb250ZXh0IGRvZXMgbm90IGhhdmUgYSB2
dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tz
VlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6dmFsdWUs
ICJUZXN0RW5hYmxlZEZvckNvbnRleHQgaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJ
ZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVl
IGJ1Zywgb3IKKyAgICAvLyBUZXN0RW5hYmxlZEZvckNvbnRleHQgaGFzIHN1YmNsYXNzZXMuIElm
IFRlc3RFbmFibGVkRm9yQ29udGV4dCBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAg
ICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdEVuYWJsZWRGb3JDb250ZXh0
IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRo
ZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVm
aW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0
ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RF
bmFibGVkRm9yQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0RW5hYmxlZEZvckNvbnRleHQmIGltcGwpCit7CisgICAgcmV0dXJu
IHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RFbmFibGVkRm9yQ29u
dGV4dCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAm
d3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2Mzg3ZDQyMzYxMzIyNDdmMmQ3
YzQ5OWZmNGEwZjk1NmVjMDZhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaApAQCAtMCww
ICsxLDg4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRl
c3RFbmFibGVkRm9yQ29udGV4dD4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdy
YXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PjsKKyAgICBzdGF0aWMgSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpCisg
ICAgeworICAgICAgICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4oZ2xvYmFsT2JqZWN0
LT52bSgpLmhlYXApKSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dChzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0RW5hYmxlZEZvckNvbnRleHQqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Qzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBoZWFwU25hcHNo
b3QoSlNDZWxsKiwgSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyJik7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsK
KworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldv
cmxkJiwgVGVzdEVuYWJsZWRGb3JDb250ZXh0KikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25l
ci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdEVuYWJsZWRGb3JDb250
ZXh0KiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30K
KworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RFbmFibGVkRm9yQ29udGV4dCYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEVu
YWJsZWRGb3JDb250ZXh0KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RFbmFi
bGVkRm9yQ29udGV4dD4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkg
OiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUZXN0RW5hYmxlZEZvckNvbnRleHQ+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gVGVzdEVuYWJsZWRGb3JDb250ZXh0KjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggMzVkMTZlZTBmNzM0ODcxYjM5Mzdl
OWYzZTRlZjZkOTUyODliYzhiOC4uYjg5MTRmOTg2NzgzZDNmOTg0OTlkZGFkNWFhNGU0NWNhOTU1
NWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJKU1Rlc3RET01KSVQuaCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1cml0eS5o
IgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKKyNpbmNsdWRlICJKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlv
bi5oIgpAQCAtMTcyLDYgKzE3Myw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CkBAIC03MDIsNiArNzA1LDggQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkKICAgICAgICAgcHV0RGlyZWN0Q3Vz
dG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPmJ1aWx0aW5OYW1lcygpLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVQdWJsaWNOYW1lKCks
IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlLCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKSk7CiAjZW5kaWYKKyAgICBp
ZiAoKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmVuYWJsZWRGb3JDb250ZXh0KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpKQorICAgICAgICBwdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuVGVzdEVuYWJsZWRGb3JDb250ZXh0UHVibGljTmFtZSgpLCBD
dXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3IsIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKSk7CiAgICAgcHV0
RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVQcml2
YXRlTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSwgbnVsbHB0ciksIGF0dHJpYnV0ZXNGb3JTdHJ1
Y3R1cmUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KSk7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBwdXRE
aXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0
cmlidXRlUHJpdmF0ZU5hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGpzVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSwgbnVsbHB0
ciksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSk7CkBAIC0xMTE2LDYgKzEx
MjEsMzAgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY28KICAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxl
ZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiVGVzdEVuYWJsZWRCeVNldHRpbmciKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6
OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1
Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0
YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVz
dEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsK
K30KKwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZvckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5pZGwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmU3MDk0NDUzZWQ1NzIyMmIzNDQxYmE2ZTk4YTQ5MGJlOTdkMWI5MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZv
ckNvbnRleHQuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgRW5hYmxl
ZEZvckNvbnRleHQsCisgICAgU2VjdXJlQ29udGV4dCwKK10gaW50ZXJmYWNlIFRlc3RFbmFibGVk
Rm9yQ29udGV4dCB7CisgICAgW0VuYWJsZWRCeVNldHRpbmc9VGVzdFNldHRpbmcsIEVuYWJsZWRG
b3JDb250ZXh0XSBhdHRyaWJ1dGUgVGVzdFN1Yk9iakNvbnN0cnVjdG9yIFRlc3RTdWJPYmpFbmFi
bGVkRm9yQ29udGV4dDsKK307CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMGU4NDJmMWI2ZmNlNWE2YzdlOWU5YjAwYWJhNGNjNmU2MzNjZjIyYy4u
Y2YyMTU0YjYzMTA3ZDNhM2ZkYzNlZmZhYzc0NWEzYTA2NzVjOTEwNSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5
LTA1LTA5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUg
UGF5XSBQYXltZW50IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZp
ZXdzIGludG8gd2hpY2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbToKKyAgICAgICAgKC1bVGVz
dEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0
YXRpb246Y2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246XSk6CisgICAgICAgICgtW1Rlc3RBcHBs
ZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAoLVtUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBpbml0V2l0aEV4cGVjdGF0aW9u
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
YXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sOgorCiAyMDE5LTA1LTA5ICBFcmljIENhcmxzb24g
IDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmluZSBBdWRpb1Nlc3Npb24g
cm91dGUgc2hhcmluZyBwb2xpY3kKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvQXBwbGVQYXkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0FwcGxlUGF5Lm1tCmluZGV4IGEyYjU4MDFmOTM5YmQ3MDYxMmMzYjg5ZmQwZGJj
NTVjOGQ1NzE0NmYuLjgyYTY0MGVlMzcxNWFjYmQ1YWIzMjI2ODcxYWJhYjVkNzU3NzZjZDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGVQYXku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5t
bQpAQCAtNDEsMjkgKzQxLDMzIEBAIHN0YXRpYyBib29sIGlzRG9uZTsKIEBpbnRlcmZhY2UgVGVz
dEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdCA8V0tTY3JpcHRNZXNzYWdl
SGFuZGxlcj4KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhFeHBlY3RhdGlvbjooQk9PTClleHBlY3RhdGlvbjsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjooQk9PTClhcGlzQXZhaWxh
YmxlRXhwZWN0YXRpb24gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246KEJPT0wpY2FuTWFrZVBh
eW1lbnRzRXhwZWN0YXRpb247CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9c2V0QVBJ
c0F2YWlsYWJsZUV4cGVjdGF0aW9uOikgQk9PTCBhcGlzQXZhaWxhYmxlRXhwZWN0YXRpb247CitA
cHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjsKIAog
QGVuZAogCi1AaW1wbGVtZW50YXRpb24gVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIg
ewotICAgIEJPT0wgX2V4cGVjdGF0aW9uOwotfQorQGltcGxlbWVudGF0aW9uIFRlc3RBcHBsZVBh
eVNjcmlwdE1lc3NhZ2VIYW5kbGVyCiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEV4cGVjdGF0
aW9uOihCT09MKWV4cGVjdGF0aW9uCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBUElzQXZhaWxh
YmxlRXhwZWN0YXRpb246KEJPT0wpYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uIGNhbk1ha2VQYXlt
ZW50c0V4cGVjdGF0aW9uOihCT09MKWNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uCiB7CiAgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBf
ZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbjsKKyAgICBfYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9u
ID0gYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uOworICAgIF9jYW5NYWtlUGF5bWVudHNFeHBlY3Rh
dGlvbiA9IGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOwogICAgIHJldHVybiBzZWxmOwogfQog
CiAtICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIg
Kil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0
TWVzc2FnZSAqKW1lc3NhZ2UKIHsKLSAgICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9uLCBbW21lc3Nh
Z2UuYm9keSBvYmplY3RGb3JLZXk6QCJzdXBwb3J0c1ZlcnNpb24iXSBib29sVmFsdWVdKTsKLSAg
ICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJj
YW5NYWtlUGF5bWVudHMiXSBib29sVmFsdWVdKTsKLSAgICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9u
LCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZl
Q2FyZCJdIGJvb2xWYWx1ZV0pOwotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2Fn
ZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXltZW50Il0gYm9vbFZhbHVlXSk7CisgICAg
RVhQRUNUX0VRKF9hcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVj
dEZvcktleTpAImFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSJdIGJvb2xWYWx1ZV0pOworICAgIEVY
UEVDVF9FUShfYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RG
b3JLZXk6QCJwYXltZW50UmVxdWVzdEF2YWlsYWJsZSJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVD
VF9FUShfY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZv
cktleTpAInN1cHBvcnRzVmVyc2lvbiJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9FUShfY2Fu
TWFrZVBheW1lbnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNh
bk1ha2VQYXltZW50cyJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9FUShfY2FuTWFrZVBheW1l
bnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXlt
ZW50c1dpdGhBY3RpdmVDYXJkIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtl
UGF5bWVudHNFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFr
ZVBheW1lbnQiXSBib29sVmFsdWVdKTsKICAgICBpc0RvbmUgPSB0cnVlOwogfQogCkBAIC03NSw3
ICs3OSw3IEBAIFRFU1QoQXBwbGVQYXksIEFwcGxlUGF5QXZhaWxhYmxlQnlEZWZhdWx0KQogewog
ICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKIAotICAgIGF1
dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0YXRpb246WUVTXSk7CisgICAgYXV0byBtZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxv
Y10gaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0YXRpb246WUVTIGNhbk1ha2VQYXltZW50c0V4
cGVjdGF0aW9uOllFU10pOwogCiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVz
dFBsdWdJbkNsYXNzTmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIl07CiAgICAg
W2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0QXBwbGVQYXkiXTsKQEAgLTg4LDEx
ICs5MiwxMSBAQCBURVNUKEFwcGxlUGF5LCBBcHBsZVBheUF2YWlsYWJsZUJ5RGVmYXVsdCkKICAg
ICBbVGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOwogfQogCi1URVNUKEFwcGxlUGF5LCBVc2VyU2Ny
aXB0RGlzYWJsZXNBcHBsZVBheSkKK1RFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHRBdERvY3VtZW50
U3RhcnREaXNhYmxlc0FwcGxlUGF5KQogewogICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRo
U2NoZW1lOkAiaHR0cHMiXTsKIAotICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtb
VGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0YXRp
b246Tk9dKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBh
eVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3Rh
dGlvbjpOTyBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjpOT10pOwogICAgIGF1dG8gdXNlclNj
cmlwdCA9IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOkAid2lu
ZG93LndrVXNlclNjcmlwdEluamVjdGVkID0gdHJ1ZSIgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3Jp
cHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0IGZvck1haW5GcmFtZU9ubHk6WUVTXSk7CiAK
ICAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAi
V2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKQEAgLTEwOSwxMSArMTEzLDMyIEBAIFRF
U1QoQXBwbGVQYXksIFVzZXJTY3JpcHREaXNhYmxlc0FwcGxlUGF5KQogICAgIFtUZXN0UHJvdG9j
b2wgdW5yZWdpc3Rlcl07CiB9CiAKK1RFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHRBdERvY3VtZW50
RW5kRGlzYWJsZXNBcHBsZVBheSkKK3sKKyAgICBbVGVzdFByb3RvY29sIHJlZ2lzdGVyV2l0aFNj
aGVtZTpAImh0dHBzIl07CisgICAgCisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhBUElzQXZh
aWxhYmxlRXhwZWN0YXRpb246Tk8gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dKTsKKyAg
ICBhdXRvIHVzZXJTY3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0
aFNvdXJjZTpAIndpbmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCA9IHRydWUiIGluamVjdGlvblRp
bWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRFbmQgZm9yTWFpbkZyYW1lT25s
eTpZRVNdKTsKKyAgICAKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9u
ID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1
Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKKyAgICBbY29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDp1c2VyU2NyaXB0
LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RBcHBsZVBh
eSJdOworICAgIAorICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
XSk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vYnVuZGxlLWh0bWwtZmlsZS9hcHBsZS1w
YXktYXZhaWxhYmlsaXR5Il1dXTsKKyAgICAKKyAgICBVdGlsOjpydW4oJmlzRG9uZSk7CisgICAg
CisgICAgRVhQRUNUX0VRKFlFUywgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ3aW5kb3cud2tVc2VyU2NyaXB0SW5qZWN0ZWQiXSBib29sVmFsdWVdKTsKKyAgICAKKyAg
ICBbVGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOworfQorCiBURVNUKEFwcGxlUGF5LCBVc2VyQWdl
bnRTY3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheSkKIHsKICAgICBbVGVzdFByb3RvY29s
IHJlZ2lzdGVyV2l0aFNjaGVtZTpAImh0dHBzIl07CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVy
ID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
V2l0aEV4cGVjdGF0aW9uOk5PXSk7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhBUElzQXZh
aWxhYmxlRXhwZWN0YXRpb246WUVTIGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOk5PXSk7CiAK
ICAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAi
V2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKICAgICBbY29uZmlndXJhdGlvbi51c2Vy
Q29udGVudENvbnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIu
Z2V0KCkgbmFtZTpAInRlc3RBcHBsZVBheSJdOwpAQCAtMTMwLDYgKzE1NSwyOCBAQCBURVNUKEFw
cGxlUGF5LCBVc2VyQWdlbnRTY3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheSkKICAgICBb
VGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOwogfQogCitURVNUKEFwcGxlUGF5LCBVc2VyQWdlbnRT
Y3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheUluRXhpc3RpbmdPYmplY3RzKQoreworICAg
IFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKKworICAgIGF1dG8g
bWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRs
ZXIgYWxsb2NdIGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9uOllFUyBjYW5NYWtlUGF5
bWVudHNFeHBlY3RhdGlvbjpZRVNdKTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNv
bmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9u
V2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJd
OworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07CisK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJodHRwczovL2J1bmRsZS1odG1sLWZpbGUvYXBwbGUtcGF5LWF2YWlsYWJp
bGl0eSJdXV07CisKKyAgICBVdGlsOjpydW4oJmlzRG9uZSk7CisKKyAgICBbbWVzc2FnZUhhbmRs
ZXIgc2V0Q2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dOworICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAnI3Rlc3QnIiBjb21wbGV0
aW9uSGFuZGxlcjpuaWxdOworCisgICAgVXRpbDo6cnVuKCZpc0RvbmUpOworCisgICAgW1Rlc3RQ
cm90b2NvbCB1bnJlZ2lzdGVyXTsKK30KKwogVEVTVChBcHBsZVBheSwgQWN0aXZlU2Vzc2lvbkJs
b2Nrc1VzZXJBZ2VudFNjcmlwdHMpCiB7CiAgICAgW1Rlc3RQcm90b2NvbCByZWdpc3RlcldpdGhT
Y2hlbWU6QCJodHRwcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9hcHBsZS1wYXktYXZhaWxhYmlsaXR5Lmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFpbGFiaWxpdHkuaHRtbAppbmRleCBm
MzAyYzZhZDlmOTY5MzhhZDY0NGZjMDdlMTFlM2ZiMjVmZmVhMzNhLi42YThiYzVhNDVlYjIzOGMx
ZWFlODM4MTc4ZmUyMWNiNTQ1MGM0ZGFhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFpbGFiaWxpdHkuaHRtbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFpbGFiaWxpdHku
aHRtbApAQCAtMjYsMjcgKzI2LDQxIEBACiAgICAgICAgIH07CiAgICAgfTsKIAotICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4geworICAgIGNvbnN0IGV2ZW50
TGlzdGVuZXIgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgIGludGVybmFscy5tb2NrUGF5bWVudENv
b3JkaW5hdG9yLnN1cHBvcnRzVW5yZXN0cmljdGVkQXBwbGVQYXkgPSBmYWxzZTsKIAorICAgICAg
ICBjb25zdCBhcHBsZVBheVNlc3Npb25BdmFpbGFibGUgPSAhIXdpbmRvdy5BcHBsZVBheVNlc3Np
b247CisgICAgICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0QXZhaWxhYmxlID0gISF3aW5kb3cuUGF5
bWVudFJlcXVlc3Q7CisgICAgICAgIGlmICghYXBwbGVQYXlTZXNzaW9uQXZhaWxhYmxlIHx8ICFw
YXltZW50UmVxdWVzdEF2YWlsYWJsZSkgeworICAgICAgICAgICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMudGVzdEFwcGxlUGF5LnBvc3RNZXNzYWdlKHsgYXBwbGVQYXlTZXNzaW9uQXZh
aWxhYmxlLCBwYXltZW50UmVxdWVzdEF2YWlsYWJsZSB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IHN1cHBvcnRzVmVyc2lvbiA9IEFwcGxlUGF5U2Vz
c2lvbi5zdXBwb3J0c1ZlcnNpb24oMSk7CiAgICAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9
IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTsKICAgICAgICAgY29uc3QgY2FuTWFr
ZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQgPSBhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBh
eW1lbnRzV2l0aEFjdGl2ZUNhcmQoJycpOwogCi0gICAgICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0
ID0gbmV3IFBheW1lbnRSZXF1ZXN0KFthcHBsZVBheU1ldGhvZCgpXSwgewotICAgICAgICAgICAg
dG90YWw6IHsKLSAgICAgICAgICAgICAgICBsYWJlbDogJ3RvdGFsJywKLSAgICAgICAgICAgICAg
ICBhbW91bnQ6IHsgY3VycmVuY3k6ICdVU0QnLCB2YWx1ZTogJzAuMDAnIH0sCi0gICAgICAgICAg
ICB9LAotICAgICAgICB9KTsKKyAgICAgICAgaWYgKCF3aW5kb3cud2tQYXltZW50UmVxdWVzdCkg
eworICAgICAgICAgICAgd2tQYXltZW50UmVxdWVzdCA9IG5ldyBQYXltZW50UmVxdWVzdChbYXBw
bGVQYXlNZXRob2QoKV0sIHsKKyAgICAgICAgICAgICAgICB0b3RhbDogeworICAgICAgICAgICAg
ICAgICAgICBsYWJlbDogJ3RvdGFsJywKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50OiB7IGN1
cnJlbmN5OiAnVVNEJywgdmFsdWU6ICcwLjAwJyB9LAorICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0g
YXdhaXQgcGF5bWVudFJlcXVlc3QuY2FuTWFrZVBheW1lbnQoKTsKKyAgICAgICAgY29uc3QgY2Fu
TWFrZVBheW1lbnQgPSBhd2FpdCB3a1BheW1lbnRSZXF1ZXN0LmNhbk1ha2VQYXltZW50KCk7CiAK
ICAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEFwcGxlUGF5LnBvc3RN
ZXNzYWdlKHsKKyAgICAgICAgICAgIGFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSwKKyAgICAgICAg
ICAgIHBheW1lbnRSZXF1ZXN0QXZhaWxhYmxlLAogICAgICAgICAgICAgc3VwcG9ydHNWZXJzaW9u
LAogICAgICAgICAgICAgY2FuTWFrZVBheW1lbnRzLAogICAgICAgICAgICAgY2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmQsCiAgICAgICAgICAgICBjYW5NYWtlUGF5bWVudCwKICAgICAgICAg
fSk7Ci0gICAgfSk7CisgICAgfTsKKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZXZlbnRMaXN0ZW5lcik7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFu
Z2UnLCBldmVudExpc3RlbmVyKTsKIDwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369620</attachid>
            <date>2019-05-10 16:33:45 -0700</date>
            <delta_ts>2019-05-14 13:57:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197751-20190510163344.patch</filename>
            <type>text/plain</type>
            <size>51353</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJkOWNlYTMxMmY3NTQx
YWVhZGQwYzRiMTk1NmE5MDY5YjY2NWRmMC4uZTE5MDAxNjg4ODFjMzhhZmJiMWQ0NTNmZjg2N2Vm
NmNjZTMzM2Y1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTA1LTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUgUGF5XSBQYXltZW50
IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZpZXdzIGludG8gd2hp
Y2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiByMjQzMzI0LCB3aGVuIGEgZG9jdW1lbnQgaGFzIGhhZCB1c2VyIGFnZW50IHNj
cmlwdHMgaW5qZWN0ZWQgaW50byBpdCwgcGF5bWVudCBBUElzIHdlcmUKKyAgICAgICAgZGlzYWJs
ZWQgYXQgcnVudGltZSBieSBoYXZpbmcgYWxsIGVudHJ5IHBvaW50cyByZXR1cm4gZmFsc3kgdmFs
dWVzIG9yIHRocm93IGV4Y2VwdGlvbnMKKyAgICAgICAgKGUuZy4sIEFwcGxlUGF5U2Vzc2lvbi5j
YW5NYWtlUGF5bWVudHMoKSByZXR1cm5zIGZhbHNlKS4KKworICAgICAgICBJbiB0aGUgY2FzZSBv
ZiB1c2VyIHNjcmlwdHMgaW4gcGFydGljdWxhciAoZS5nLiwgV0tVc2VyU2NyaXB0KSwgc2luY2Ug
d2Uga25vdyB3aGV0aGVyIHRoZXNlCisgICAgICAgIGV4aXN0IGF0IHRoZSB0aW1lIHdlIGNyZWF0
ZSBhIGRvY3VtZW50J3MgRE9NV2luZG93LCB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gcjI0MzMyNCBi
eQorICAgICAgICBjb21wbGV0ZWx5IGRpc2FibGluZyB0aGUgcGF5bWVudCBBUElzIGluIHRoZSBw
cmVzZW5jZSBvZiB1c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB0aGlz
IGNoYW5nZSBpbnRyb2R1Y2VzIHRoZSAnRW5hYmxlZEJ5Q29udGV4dCcgZXh0ZW5kZWQgYXR0cmli
dXRlIGZvcgorICAgICAgICBpbnRlcmZhY2VzLCB3aGljaCBpbnN0cnVjdHMgdGhlIGJpbmRpbmdz
IGdlbmVyYXRvciB0byBhZGQgYSBjb25qdW5jdCB0byB0aGUgcGF5bWVudCBBUEkKKyAgICAgICAg
Y29uc3RydWN0b3JzIHRoYXQgYXNrcyB0aGUgaW50ZXJmYWNlJ3MgaW1wbGVtZW50YXRpb24gY2xh
c3Mgd2hldGhlciBpdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IKKyAgICAgICAgYSBnaXZlbiBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LiBUaGUgUGF5bWVudFJlcXVlc3QgYW5kIEFwcGxlUGF5U2Vzc2lv
biBpbnRlcmZhY2VzIGFkb3B0IHRoaXMKKyAgICAgICAgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSB0
byBpbXBsZW1lbnQgdGhlIG5ldyB1c2VyIHNjcmlwdCBjaGVjay4KKworICAgICAgICBBZGRlZCBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Np
b24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6c2hvdWxkRW5hYmxlQXBw
bGVQYXlBUElzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5oOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFNlc3Npb246OmVuYWJsZWRGb3JDb250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmg6CisgICAgICAgICog
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXltZW50SGFuZGxlcjo6ZW5hYmxlZEZvckNvbnRleHQpOgorICAgICAgICAqIE1vZHVs
ZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBheW1l
bnRSZXF1ZXN0OjplbmFibGVkRm9yQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50
cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvcGF5bWVudHJlcXVl
c3QvUGF5bWVudFJlcXVlc3QuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoTmVlZHNSdW50aW1lQ2hlY2spOgorICAgICAgICAoR2Vu
ZXJhdGVSdW50aW1lRW5hYmxlQ29uZGl0aW9uYWxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29uOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
cHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckF0dHJpYnV0
ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9y
Q29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZvckNvbnRleHQuaWRs
OiBBZGRlZC4KKwogMjAxOS0wNS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWZpbmUgQXVkaW9TZXNzaW9uIHJvdXRlIHNoYXJpbmcgcG9saWN5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vz
c2lvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lv
bi5pZGwKaW5kZXggNjZhODlmODliMzljOTRlNDkzODBkZjVhYmU2OTNhMDA4MmZkZDAwNS4uMDg1
MGJkNWI2MDUwMmU2YmY4NWMwZWU2YmNjNzA1ZjY5MDU5MzkwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlkbApAQCAtMzAsNiAr
MzAsNyBAQAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAgICAgQ29uc3RydWN0
b3JNYXlUaHJvd0V4Y2VwdGlvbiwKICAgICBFbmFibGVkQnlTZXR0aW5nPUFwcGxlUGF5LAorICAg
IEVuYWJsZWRGb3JDb250ZXh0LAogXSBpbnRlcmZhY2UgQXBwbGVQYXlTZXNzaW9uIDogRXZlbnRU
YXJnZXQgewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVRVU19TVUNDRVNTID0gMDsKICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVEFUVVNfRkFJTFVSRSA9IDE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5k
ZXggNTI0ZjQzNjU5OGMyMjg0NWZhNTNjNzE2NjQ5ZTc1NDY4YzM2Y2YwYS4uZDU1OTk0OGQwYTZm
YWE2M2UyMDViYTA5ZmNmMTkyYjFiMGJiMDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMzEsOSArMzEs
MTEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkxpbmtJY29uQ29sbGVjdG9y
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YXltZW50QXV0aG9yaXphdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIlBheW1lbnRTZXNzaW9uLmgiCisjaW5jbHVkZSAiVXNlckNv
bnRlbnRQcm92aWRlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KIApAQCAtMjUxLDYgKzI1MywyMiBAQCBPcHRpb25hbDxTdHJpbmc+
IFBheW1lbnRDb29yZGluYXRvcjo6dmFsaWRhdGVkUGF5bWVudE5ldHdvcmsoRG9jdW1lbnQmIGRv
Y3VtZW50LAogICAgIHJldHVybiBtX2NsaWVudC52YWxpZGF0ZWRQYXltZW50TmV0d29yayhwYXlt
ZW50TmV0d29yayk7CiB9CiAKK2Jvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpzaG91bGRFbmFibGVB
cHBsZVBheUFQSXMoRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAoreworICAgIGlmIChtX2NsaWVu
dC5zdXBwb3J0c1VucmVzdHJpY3RlZEFwcGxlUGF5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRCgic2hvdWxkRW5hYmxlQXBwbGVQYXlBUElzKCkgLT4gdHJ1ZSAodW5yZXN0cmlj
dGVkIGNsaWVudCkiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBz
aG91bGRFbmFibGVBUElzID0gdHJ1ZTsKKyAgICBkb2N1bWVudC5wYWdlKCktPnVzZXJDb250ZW50
UHJvdmlkZXIoKS5mb3JFYWNoVXNlclNjcmlwdChbJl0oRE9NV3JhcHBlcldvcmxkJiwgY29uc3Qg
VXNlclNjcmlwdCYpIHsKKyAgICAgICAgc2hvdWxkRW5hYmxlQVBJcyA9IGZhbHNlOworICAgIH0p
OworCisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgic2hvdWxkRW5hYmxlQXBwbGVQYXlBUElz
KCkgLT4gJWQiLCBzaG91bGRFbmFibGVBUElzKTsKKyAgICByZXR1cm4gc2hvdWxkRW5hYmxlQVBJ
czsKK30KKwogYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OnNob3VsZEFsbG93QXBwbGVQYXkoRG9j
dW1lbnQmIGRvY3VtZW50KSBjb25zdAogewogICAgIGlmIChtX2NsaWVudC5zdXBwb3J0c1VucmVz
dHJpY3RlZEFwcGxlUGF5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5oCmluZGV4IDNiMzIxYTIxODU1MGQwOTRkY2ZkMTFj
Y2I2OTRlYWE0NTVjOTUwZjkuLjI2MGEzZTI4MTE2MjZlN2U0OGRjYjAwYzIyZTA3NjNjOWIyYTZl
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENv
b3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxT
dHJpbmc+IHZhbGlkYXRlZFBheW1lbnROZXR3b3JrKERvY3VtZW50JiwgdW5zaWduZWQgdmVyc2lv
biwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKKyAgICBib29sIHNob3VsZEVuYWJsZUFwcGxlUGF5
QVBJcyhEb2N1bWVudCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkQWxs
b3dBcHBsZVBheShEb2N1bWVudCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hv
dWxkQWxsb3dVc2VyQWdlbnRTY3JpcHRzKERvY3VtZW50JikgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKaW5kZXggODdh
NDRmNGIzNWJiMmZiNDI5M2UzMDRmMjdmMDZiNmU2ZWJhMTk0OS4uNjVkOWY4NjliMDhjODE5NDY1
NjljNzk3Nzc4NzdmOGNhYTQzNWFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Miw2ICs3MywxNSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYXltZW50U2Vzc2lvbjo6Y2FuQ3Jl
YXRlU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYm9v
bCBQYXltZW50U2Vzc2lvbjo6ZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihj
b250ZXh0KTsKKyAgICBpZiAoYXV0byBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQorICAgICAgICBy
ZXR1cm4gcGFnZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuc2hvdWxkRW5hYmxlQXBwbGVQYXlBUElz
KGRvY3VtZW50KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFQUExFX1BBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uaAppbmRleCA4ZjdhNGI2NTBmMGI5MmY4
MTVmOWI1ZDVjY2UxNzlhN2Q1MjkxMDQzLi4zMjIyZjU5ZTA5MDYxMzNlYzRjNDg3NzNlMDE3ODU0
M2ZmNzFhNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1Bh
eW1lbnRTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXlt
ZW50U2Vzc2lvbi5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIFBheW1lbnRNZXRob2Q7CiBjbGFz
cyBQYXltZW50U2Vzc2lvbiA6IHB1YmxpYyB2aXJ0dWFsIFBheW1lbnRTZXNzaW9uQmFzZSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGNhbkNyZWF0ZVNlc3Npb24oRG9j
dW1lbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBlbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRp
b25Db250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlTWVyY2hhbnQoVVJMJiYpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxl
ci5jcHAKaW5kZXggMDQ4OGVhZWI2NmZiNTBjOWI0ODUwMzBlYWYzZDRkMTAyOWFlYTAxOC4uYTc2
ZDRiNGI5YmRiYTc5YzRlMjYxYWQ1YjE2MTM5Y2U3ZjJiZDYyNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjEsNiArNjEsMTYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUGF5bWVudEhhbmRsZXI6OmNhbkNyZWF0
ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIHJldHVybiB7IH07CiB9CiAKK2Jvb2wg
UGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCit7CisjaWYgRU5BQkxFKEFQUExFX1BBWSkKKyAgICByZXR1cm4gUGF5bWVudFNl
c3Npb246OmVuYWJsZWRGb3JDb250ZXh0KGNvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGJvb2wgUGF5bWVu
dEhhbmRsZXI6Omhhc0FjdGl2ZVNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVO
QUJMRShBUFBMRV9QQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKaW5kZXggMGI0ZGYwM2JiNjdiNDdhM2RiMWU1YTc4
NjI0ZDI5NGE3NDA3MGFmYS4uYjQ4YmE3MzNiYjBhMGQ0N2M2N2M2Yzk0ODE1OTY4ODcyYTE5NzBm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3Qv
UGF5bWVudEhhbmRsZXIuaApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBQYXltZW50SGFuZGxlciA6
IHB1YmxpYyB2aXJ0dWFsIFBheW1lbnRTZXNzaW9uQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZlB0cjxQYXltZW50SGFuZGxlcj4gY3JlYXRlKERvY3VtZW50JiwgUGF5bWVudFJlcXVlc3Qm
LCBjb25zdCBQYXltZW50UmVxdWVzdDo6TWV0aG9kSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBF
eGNlcHRpb25Pcjx2b2lkPiBjYW5DcmVhdGVTZXNzaW9uKERvY3VtZW50Jik7CisgICAgc3RhdGlj
IGJvb2wgZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAgIHN0
YXRpYyBib29sIGhhc0FjdGl2ZVNlc3Npb24oRG9jdW1lbnQmKTsKIAogICAgIHZpcnR1YWwgRXhj
ZXB0aW9uT3I8dm9pZD4gY29udmVydERhdGEoSlNDOjpKU1ZhbHVlJiYpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVz
dC5jcHAKaW5kZXggNjFmZjViZTIxY2FhZTdlZGU5OTg2NmFmYzAyOWZjZGRkMDgyY2I5OC4uZDJl
ZjdhNjFlZDUxMGIwNmEzMmMwNTJmYzcwOTAzNjU1YjM5ZTAwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJK
U1BheW1lbnREZXRhaWxzVXBkYXRlLmgiCiAjaW5jbHVkZSAiSlNQYXltZW50UmVzcG9uc2UuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGF5bWVudEFkZHJlc3MuaCIKKyNpbmNsdWRl
ICJQYXltZW50Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJQYXltZW50Q3VycmVuY3lBbW91bnQu
aCIKICNpbmNsdWRlICJQYXltZW50RGV0YWlsc0luaXQuaCIKICNpbmNsdWRlICJQYXltZW50SGFu
ZGxlci5oIgpAQCAtMzUxLDYgKzM1MywxMSBAQCBFeGNlcHRpb25PcjxSZWY8UGF5bWVudFJlcXVl
c3Q+PiBQYXltZW50UmVxdWVzdDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdAogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFBheW1lbnRSZXF1ZXN0KGRvY3VtZW50LCBXVEZNb3ZlKG9w
dGlvbnMpLCBXVEZNb3ZlKGRldGFpbHMpLCBXVEZNb3ZlKHN0ZDo6Z2V0PDE+KHNoaXBwaW5nT3B0
aW9uQW5kTW9kaWZpZXJEYXRhKSksIFdURk1vdmUoc2VyaWFsaXplZE1ldGhvZERhdGEpLCBXVEZN
b3ZlKHN0ZDo6Z2V0PDA+KHNoaXBwaW5nT3B0aW9uQW5kTW9kaWZpZXJEYXRhKSkpKTsKIH0KIAor
Ym9vbCBQYXltZW50UmVxdWVzdDo6ZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gUGF5bWVudEhhbmRsZXI6OmVuYWJsZWRGb3JD
b250ZXh0KGNvbnRleHQpOworfQorCiBQYXltZW50UmVxdWVzdDo6UGF5bWVudFJlcXVlc3QoRG9j
dW1lbnQmIGRvY3VtZW50LCBQYXltZW50T3B0aW9ucyYmIG9wdGlvbnMsIFBheW1lbnREZXRhaWxz
SW5pdCYmIGRldGFpbHMsIFZlY3RvcjxTdHJpbmc+JiYgc2VyaWFsaXplZE1vZGlmaWVyRGF0YSwg
VmVjdG9yPE1ldGhvZD4mJiBzZXJpYWxpemVkTWV0aG9kRGF0YSwgU3RyaW5nJiYgc2VsZWN0ZWRT
aGlwcGluZ09wdGlvbikKICAgICA6IEFjdGl2ZURPTU9iamVjdCB7IGRvY3VtZW50IH0KICAgICAs
IG1fb3B0aW9ucyB7IFdURk1vdmUob3B0aW9ucykgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCmluZGV4IGNjMGJiY2I1
ZjRjODRjOWZiZDdkOGYzODRiOTY1YmJmYWI1MjdjZGYuLmY3YzM0MjY3OTQ0NTFiNWJlZmRhMDdi
Yjk1ZDM1NzY0NDFhZGVkOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGlj
OgogICAgIHVzaW5nIFNob3dQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETEludGVyZmFj
ZTxQYXltZW50UmVzcG9uc2U+PjsKIAogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8UGF5bWVu
dFJlcXVlc3Q+PiBjcmVhdGUoRG9jdW1lbnQmLCBWZWN0b3I8UGF5bWVudE1ldGhvZERhdGE+JiYs
IFBheW1lbnREZXRhaWxzSW5pdCYmLCBQYXltZW50T3B0aW9ucyYmKTsKKyAgICBzdGF0aWMgYm9v
bCBlbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgflBheW1l
bnRSZXF1ZXN0KCk7CiAKICAgICB2b2lkIHNob3coRG9jdW1lbnQmLCBSZWZQdHI8RE9NUHJvbWlz
ZT4mJiBkZXRhaWxzUHJvbWlzZSwgU2hvd1Byb21pc2UmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCmluZGV4
IGI5YzEyNjRjY2E0ODcxNzRmZmY0ZDU1ZDNjNzhkMzIyNTI2Yjk5ZjAuLjkxOGMxMDgzZjRiYzZh
ZDdjMTk5MjY0NTRmNDA3MTlhNzQ2YWI2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsCkBAIC0zMCw2ICsz
MCw3IEBACiAgICAgQ29uc3RydWN0b3JDYWxsV2l0aD1Eb2N1bWVudCwKICAgICBDb25zdHJ1Y3Rv
ck1heVRocm93RXhjZXB0aW9uLAogICAgIEVuYWJsZWRCeVNldHRpbmc9UGF5bWVudFJlcXVlc3Qs
CisgICAgRW5hYmxlZEZvckNvbnRleHQsCiAgICAgU2VjdXJlQ29udGV4dCwKIF0gaW50ZXJmYWNl
IFBheW1lbnRSZXF1ZXN0IDogRXZlbnRUYXJnZXQgewogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0g
UHJvbWlzZTxQYXltZW50UmVzcG9uc2U+IHNob3cob3B0aW9uYWwgUHJvbWlzZTxQYXltZW50RGV0
YWlsc1VwZGF0ZT4gZGV0YWlsc1Byb21pc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA1MDVjNGYyZWYxNDFiMzU2ODJh
MTc0NDc1ZGVjMjI2YWY5ZDcxZGNjLi5mMzA5YTRiN2M3ZWRhYmYwZTYxMDlhMzgzMDBkMTM4ZWMz
ZDBkMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtMTcwNSw2ICsxNzA1LDcgQEAgc3ViIE5lZWRzUnVudGltZUNoZWNr
CiAgICAgfQogCiAgICAgcmV0dXJuICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFi
bGVkQXRSdW50aW1lfQorICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
RW5hYmxlZEZvckNvbnRleHR9CiAgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntFbmFibGVkRm9yV29ybGR9CiAgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntFbmFibGVkQnlTZXR0aW5nfQogICAgICAgICB8fCAkY29udGV4dC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RGlzYWJsZWRCeVF1aXJrfQpAQCAtMzc4OCw2ICszNzg5LDE1IEBAIHN1YiBH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZwogICAgICAgICB9CiAgICAgfQog
CisgICAgaWYgKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFbmFibGVkRm9yQ29udGV4
dH0pIHsKKyAgICAgICAgYXNzZXJ0KCJNdXN0IG5vdCBzcGVjaWZ5IHZhbHVlIGZvciBFbmFibGVk
Rm9yQ29udGV4dC4iKSB1bmxlc3MgJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJs
ZWRGb3JDb250ZXh0fSBlcSAiVkFMVUVfSVNfTUlTU0lORyI7CisgICAgICAgIGFzc2VydCgiRW5h
YmxlZEZvckNvbnRleHQgbXVzdCBiZSBhbiBpbnRlcmZhY2Ugb3IgY29uc3RydWN0b3IgYXR0cmli
dXRlLiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclR5cGUoJGNvbnRleHQt
PnR5cGUpOworCisgICAgICAgIG15ICRjb250ZXh0UmVmID0gIipqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigiIC4gJGdsb2JhbE9iamVjdFB0ciAuICIpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkiOworICAgICAgICBteSAkbmFtZSA9ICRjb250ZXh0LT5uYW1lOworICAgICAgICBwdXNoKEBj
b25qdW5jdHMsICAiJHtuYW1lfTo6ZW5hYmxlZEZvckNvbnRleHQoIiAuICRjb250ZXh0UmVmIC4g
IikiKTsKKyAgICB9CisKICAgICBteSAkcmVzdWx0ID0gam9pbigiICYmICIsIEBjb25qdW5jdHMp
OwogICAgICRyZXN1bHQgPSAiKCRyZXN1bHQpIiBpZiBAY29uanVuY3RzID4gMTsKICAgICByZXR1
cm4gJHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMQXR0cmlidXRlcy5qc29uIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLmpzb24KaW5kZXggZWZlNTY5Nzk0ODU5NGVjYTVkYzkxZjFkZDJkMTEyOWI2OGI1
YWQxNS4uNDY5ZmQyZGY5ZWU2ZjI3NjlhZTg5YjQwNTgwZjVjYWJhN2I4Y2UzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24KQEAg
LTE5Miw2ICsxOTIsOSBAQAogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJm
YWNlIiwgImRpY3Rpb25hcnkiLCAiZW51bSIsICJhdHRyaWJ1dGUiLCAib3BlcmF0aW9uIiwgImNv
bnN0YW50Il0sCiAgICAgICAgICAgICAidmFsdWVzIjogWyIqIl0KICAgICAgICAgfSwKKyAgICAg
ICAgIkVuYWJsZWRGb3JDb250ZXh0IjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6
IFsiYXR0cmlidXRlIiwgImludGVyZmFjZSJdCisgICAgICAgIH0sCiAgICAgICAgICJFbmFibGVk
Rm9yV29ybGQiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJhdHRyaWJ1dGUi
LCAib3BlcmF0aW9uIl0sCiAgICAgICAgICAgICAidmFsdWVzIjogWyIqIl0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKaW5kZXggMWFj
OGZlZDZhODZiYzQ0MTNiZTIxYWQ4OTI4NmFmNjVmYmUwMDViOC4uOTc3MjEzMDNmOGE5YWUyMjlk
ZjYzYzQ0ZTU4ZmNkOTM0YzJjN2MzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwKQEAgLTI4Myw3ICsyODMsNyBAQCBzdWIgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckF0dHJpYnV0ZXMKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGVOYW1l
IChzb3J0IGtleXMgJXskZXh0ZW5kZWRBdHRyaWJ1dGVzfSkgewogICAgICAgbmV4dCB1bmxlc3Mg
KCRhdHRyaWJ1dGVOYW1lIGVxICJDb25kaXRpb25hbCIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVu
YWJsZWRBdFJ1bnRpbWUiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJFbmFibGVkRm9yV29ybGQiCiAg
ICAgICAgIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJFbmFibGVkQnlTZXR0aW5nIiB8fCAkYXR0cmli
dXRlTmFtZSBlcSAiU2VjdXJlQ29udGV4dCIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIlByaXZhdGVJ
ZGVudGlmaWVyIgotICAgICAgICB8fCAkYXR0cmlidXRlTmFtZSBlcSAiUHVibGljSWRlbnRpZmll
ciIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkRpc2FibGVkQnlRdWlyayIgfHwgJGF0dHJpYnV0ZU5h
bWUgZXEgIkVuYWJsZWRCeVF1aXJrIik7CisgICAgICAgIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJQ
dWJsaWNJZGVudGlmaWVyIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRGlzYWJsZWRCeVF1aXJrIiB8
fCAkYXR0cmlidXRlTmFtZSBlcSAiRW5hYmxlZEJ5UXVpcmsiIHx8ICRhdHRyaWJ1dGVOYW1lIGVx
ICJFbmFibGVkRm9yQ29udGV4dCIpOwogICAgICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlID0gJGF0
dHJpYnV0ZU5hbWU7CiAgICAgICAkZXh0ZW5kZWRBdHRyaWJ1dGUgLj0gIj0iIC4gJGV4dGVuZGVk
QXR0cmlidXRlcy0+eyRhdHRyaWJ1dGVOYW1lfSB1bmxlc3MgJGV4dGVuZGVkQXR0cmlidXRlcy0+
eyRhdHRyaWJ1dGVOYW1lfSBlcSAiVkFMVUVfSVNfTUlTU0lORyI7CiAgICAgICBwdXNoKEBleHRl
bmRlZEF0dHJpYnV0ZXNMaXN0LCAkZXh0ZW5kZWRBdHRyaWJ1dGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI3ZmI3ZDI1NmY1OTc1YzEyYjJkNDIw
ZGVkMzZlNjRjZDcyMGEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKQEAgLTAsMCAr
MSwyNjcgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RTdWJPYmouaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwU25hcHNob3RCdWlsZGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVj
dDsKKyAgICBzdGF0aWMgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJv
dG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFS
RV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENv
bnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dDo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoIlRl
c3RFbmFibGVkRm9yQ29udGV4dCJfcykpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQor
Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHQiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwor
CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0OjppbmZvKCksIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJv
dG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0OjpzX2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHQiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0KSB9OworCitKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6SlNUZXN0RW5h
YmxlZEZvckNvbnRleHQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkKKyAgICA6IEpT
RE9NV3JhcHBlcjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBpZiAoKGRvd25jYXN0PERv
Y3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkgJiYg
VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0OjplbmFibGVkRm9yQ29udGV4dCgqanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKSkKKyAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLlRlc3RTdWJPYmpF
bmFibGVkRm9yQ29udGV4dFB1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3IsIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKK30KKworSlNPYmpl
Y3QqIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+
KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp+SlNUZXN0
RW5hYmxlZEZvckNvbnRleHQoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQqIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OmNhc3Qo
RXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oc3RhdGUudm0oKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFi
bGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsK
KyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9y
Q29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+OjpnZXQ8anNUZXN0RW5h
YmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9i
akVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZS52bSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OnNldDxzZXRKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Iik7
Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmhlYXBTbmFwc2hvdChKU0NlbGwq
IGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KGNlbGwpOworICAgIGJ1aWxk
ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
YnVpbGRlci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6aGVhcFNuYXBz
aG90KGNlbGwsIGJ1aWxkZXIpOworfQorCitib29sIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Cit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RFbmFi
bGVkRm9yQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oaGFu
ZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERP
TVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNU
ZXN0RW5hYmxlZEZvckNvbnRleHQtPndyYXBwZWQoKSwganNUZXN0RW5hYmxlZEZvckNvbnRleHQp
OworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
ICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdEVuYWJsZWRGb3JDb250ZXh0QFdlYkNvcmVA
QDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dl
YkNvcmUyMVRlc3RFbmFibGVkRm9yQ29udGV4dEVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpCit7
CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxl
UG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gV1RGX1BSRVBB
UkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OKF9faWRlbnRpZmllcigiPz9fN1Rlc3RFbmFi
bGVkRm9yQ29udGV4dEBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9IFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTigm
X1pUVk43V2ViQ29yZTIxVGVzdEVuYWJsZWRGb3JDb250ZXh0RVsyXSk7CisjZW5kaWYKKworICAg
IC8vIElmIHRoaXMgZmFpbHMgVGVzdEVuYWJsZWRGb3JDb250ZXh0IGRvZXMgbm90IGhhdmUgYSB2
dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tz
VlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6dmFsdWUs
ICJUZXN0RW5hYmxlZEZvckNvbnRleHQgaXMgbm90IHBvbHltb3JwaGljIik7CisKKyAgICAvLyBJ
ZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVl
IGJ1Zywgb3IKKyAgICAvLyBUZXN0RW5hYmxlZEZvckNvbnRleHQgaGFzIHN1YmNsYXNzZXMuIElm
IFRlc3RFbmFibGVkRm9yQ29udGV4dCBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAg
ICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdEVuYWJsZWRGb3JDb250ZXh0
IHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRo
ZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVm
aW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0
ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RF
bmFibGVkRm9yQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0RW5hYmxlZEZvckNvbnRleHQmIGltcGwpCit7CisgICAgcmV0dXJu
IHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RFbmFibGVkRm9yQ29u
dGV4dCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAm
d3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2Mzg3ZDQyMzYxMzIyNDdmMmQ3
YzQ5OWZmNGEwZjk1NmVjMDZhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaApAQCAtMCww
ICsxLDg4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRl
c3RFbmFibGVkRm9yQ29udGV4dD4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdy
YXBwZXI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PjsKKyAgICBzdGF0aWMgSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpCisg
ICAgeworICAgICAgICBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4oZ2xvYmFsT2JqZWN0
LT52bSgpLmhlYXApKSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dChzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0RW5hYmxlZEZvckNvbnRleHQqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Qzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCBoZWFwU25hcHNo
b3QoSlNDZWxsKiwgSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyJik7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsK
KworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldv
cmxkJiwgVGVzdEVuYWJsZWRGb3JDb250ZXh0KikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25l
ci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdEVuYWJsZWRGb3JDb250
ZXh0KiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30K
KworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RFbmFibGVkRm9yQ29udGV4dCYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEVu
YWJsZWRGb3JDb250ZXh0KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RFbmFi
bGVkRm9yQ29udGV4dD4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkg
OiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUZXN0RW5hYmxlZEZvckNvbnRleHQ+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gVGVzdEVuYWJsZWRGb3JDb250ZXh0KjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggMzVkMTZlZTBmNzM0ODcxYjM5Mzdl
OWYzZTRlZjZkOTUyODliYzhiOC4uYjg5MTRmOTg2NzgzZDNmOTg0OTlkZGFkNWFhNGU0NWNhOTU1
NWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJKU1Rlc3RET01KSVQuaCIKICNpbmNsdWRlICJKU1Rlc3REb21haW5TZWN1cml0eS5o
IgogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKKyNpbmNsdWRlICJKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlv
bi5oIgpAQCAtMTcyLDYgKzE3Myw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhCiBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CkBAIC03MDIsNiArNzA1LDggQEAgdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkKICAgICAgICAgcHV0RGlyZWN0Q3Vz
dG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSktPmJ1aWx0aW5OYW1lcygpLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVQdWJsaWNOYW1lKCks
IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlLCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpKSk7CiAjZW5kaWYKKyAgICBp
ZiAoKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OmVuYWJsZWRGb3JDb250ZXh0KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpKQorICAgICAgICBwdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuVGVzdEVuYWJsZWRGb3JDb250ZXh0UHVibGljTmFtZSgpLCBD
dXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3IsIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKSk7CiAgICAgcHV0
RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVQcml2
YXRlTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSwgbnVsbHB0ciksIGF0dHJpYnV0ZXNGb3JTdHJ1
Y3R1cmUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KSk7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICBwdXRE
aXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0
cmlidXRlUHJpdmF0ZU5hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGpzVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSwgbnVsbHB0
ciksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSk7CkBAIC0xMTE2LDYgKzEx
MjEsMzAgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY28KICAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxl
ZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiVGVzdEVuYWJsZWRCeVNldHRpbmciKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6
OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1
Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHN0
YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZtKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVz
dEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsK
K30KKwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZvckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5pZGwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmU3MDk0NDUzZWQ1NzIyMmIzNDQxYmE2ZTk4YTQ5MGJlOTdkMWI5MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RW5hYmxlZEZv
ckNvbnRleHQuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgRW5hYmxl
ZEZvckNvbnRleHQsCisgICAgU2VjdXJlQ29udGV4dCwKK10gaW50ZXJmYWNlIFRlc3RFbmFibGVk
Rm9yQ29udGV4dCB7CisgICAgW0VuYWJsZWRCeVNldHRpbmc9VGVzdFNldHRpbmcsIEVuYWJsZWRG
b3JDb250ZXh0XSBhdHRyaWJ1dGUgVGVzdFN1Yk9iakNvbnN0cnVjdG9yIFRlc3RTdWJPYmpFbmFi
bGVkRm9yQ29udGV4dDsKK307CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMGU4NDJmMWI2ZmNlNWE2YzdlOWU5YjAwYWJhNGNjNmU2MzNjZjIyYy4u
Y2YyMTU0YjYzMTA3ZDNhM2ZkYzNlZmZhYzc0NWEzYTA2NzVjOTEwNSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5
LTA1LTA5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUg
UGF5XSBQYXltZW50IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZp
ZXdzIGludG8gd2hpY2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbToKKyAgICAgICAgKC1bVGVz
dEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0
YXRpb246Y2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246XSk6CisgICAgICAgICgtW1Rlc3RBcHBs
ZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAoLVtUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBpbml0V2l0aEV4cGVjdGF0aW9u
Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
YXBwbGUtcGF5LWF2YWlsYWJpbGl0eS5odG1sOgorCiAyMDE5LTA1LTA5ICBFcmljIENhcmxzb24g
IDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmluZSBBdWRpb1Nlc3Npb24g
cm91dGUgc2hhcmluZyBwb2xpY3kKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvQXBwbGVQYXkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0FwcGxlUGF5Lm1tCmluZGV4IGEyYjU4MDFmOTM5YmQ3MDYxMmMzYjg5ZmQwZGJj
NTVjOGQ1NzE0NmYuLjA2MWIzMzFhMTU2NzZiMzM3OWYzNjk2MTg1NDcwM2VlZTY5MTNhMGMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGVQYXku
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5t
bQpAQCAtNDEsMjkgKzQxLDMzIEBAIHN0YXRpYyBib29sIGlzRG9uZTsKIEBpbnRlcmZhY2UgVGVz
dEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdCA8V0tTY3JpcHRNZXNzYWdl
SGFuZGxlcj4KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhFeHBlY3RhdGlvbjooQk9PTClleHBlY3RhdGlvbjsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjooQk9PTClhcGlzQXZhaWxh
YmxlRXhwZWN0YXRpb24gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246KEJPT0wpY2FuTWFrZVBh
eW1lbnRzRXhwZWN0YXRpb247CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9c2V0QVBJ
c0F2YWlsYWJsZUV4cGVjdGF0aW9uOikgQk9PTCBhcGlzQXZhaWxhYmxlRXhwZWN0YXRpb247CitA
cHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjsKIAog
QGVuZAogCi1AaW1wbGVtZW50YXRpb24gVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIg
ewotICAgIEJPT0wgX2V4cGVjdGF0aW9uOwotfQorQGltcGxlbWVudGF0aW9uIFRlc3RBcHBsZVBh
eVNjcmlwdE1lc3NhZ2VIYW5kbGVyCiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEV4cGVjdGF0
aW9uOihCT09MKWV4cGVjdGF0aW9uCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBUElzQXZhaWxh
YmxlRXhwZWN0YXRpb246KEJPT0wpYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uIGNhbk1ha2VQYXlt
ZW50c0V4cGVjdGF0aW9uOihCT09MKWNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uCiB7CiAgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBf
ZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbjsKKyAgICBfYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9u
ID0gYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uOworICAgIF9jYW5NYWtlUGF5bWVudHNFeHBlY3Rh
dGlvbiA9IGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOwogICAgIHJldHVybiBzZWxmOwogfQog
CiAtICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIg
Kil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0
TWVzc2FnZSAqKW1lc3NhZ2UKIHsKLSAgICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9uLCBbW21lc3Nh
Z2UuYm9keSBvYmplY3RGb3JLZXk6QCJzdXBwb3J0c1ZlcnNpb24iXSBib29sVmFsdWVdKTsKLSAg
ICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJj
YW5NYWtlUGF5bWVudHMiXSBib29sVmFsdWVdKTsKLSAgICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9u
LCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZl
Q2FyZCJdIGJvb2xWYWx1ZV0pOwotICAgIEVYUEVDVF9FUShfZXhwZWN0YXRpb24sIFtbbWVzc2Fn
ZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXltZW50Il0gYm9vbFZhbHVlXSk7CisgICAg
RVhQRUNUX0VRKF9hcGlzQXZhaWxhYmxlRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVj
dEZvcktleTpAImFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSJdIGJvb2xWYWx1ZV0pOworICAgIEVY
UEVDVF9FUShfYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RG
b3JLZXk6QCJwYXltZW50UmVxdWVzdEF2YWlsYWJsZSJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVD
VF9FUShfY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZv
cktleTpAInN1cHBvcnRzVmVyc2lvbiJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9FUShfY2Fu
TWFrZVBheW1lbnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNh
bk1ha2VQYXltZW50cyJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9FUShfY2FuTWFrZVBheW1l
bnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNhbk1ha2VQYXlt
ZW50c1dpdGhBY3RpdmVDYXJkIl0gYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKF9jYW5NYWtl
UGF5bWVudHNFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFr
ZVBheW1lbnQiXSBib29sVmFsdWVdKTsKICAgICBpc0RvbmUgPSB0cnVlOwogfQogCkBAIC03NSw3
ICs3OSw3IEBAIFRFU1QoQXBwbGVQYXksIEFwcGxlUGF5QXZhaWxhYmxlQnlEZWZhdWx0KQogewog
ICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKIAotICAgIGF1
dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0YXRpb246WUVTXSk7CisgICAgYXV0byBtZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxv
Y10gaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0YXRpb246WUVTIGNhbk1ha2VQYXltZW50c0V4
cGVjdGF0aW9uOllFU10pOwogCiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVz
dFBsdWdJbkNsYXNzTmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIl07CiAgICAg
W2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0QXBwbGVQYXkiXTsKQEAgLTg4LDEx
ICs5MiwxMSBAQCBURVNUKEFwcGxlUGF5LCBBcHBsZVBheUF2YWlsYWJsZUJ5RGVmYXVsdCkKICAg
ICBbVGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOwogfQogCi1URVNUKEFwcGxlUGF5LCBVc2VyU2Ny
aXB0RGlzYWJsZXNBcHBsZVBheSkKK1RFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHRBdERvY3VtZW50
U3RhcnREaXNhYmxlc0FwcGxlUGF5KQogewogICAgIFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRo
U2NoZW1lOkAiaHR0cHMiXTsKIAotICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtb
VGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0YXRp
b246Tk9dKTsKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBh
eVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3Rh
dGlvbjpOTyBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjpOT10pOwogICAgIGF1dG8gdXNlclNj
cmlwdCA9IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOkAid2lu
ZG93LndrVXNlclNjcmlwdEluamVjdGVkID0gdHJ1ZSIgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3Jp
cHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0IGZvck1haW5GcmFtZU9ubHk6WUVTXSk7CiAK
ICAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAi
V2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKQEAgLTEwOSwxMSArMTEzLDMyIEBAIFRF
U1QoQXBwbGVQYXksIFVzZXJTY3JpcHREaXNhYmxlc0FwcGxlUGF5KQogICAgIFtUZXN0UHJvdG9j
b2wgdW5yZWdpc3Rlcl07CiB9CiAKK1RFU1QoQXBwbGVQYXksIFVzZXJTY3JpcHRBdERvY3VtZW50
RW5kRGlzYWJsZXNBcHBsZVBheSkKK3sKKyAgICBbVGVzdFByb3RvY29sIHJlZ2lzdGVyV2l0aFNj
aGVtZTpAImh0dHBzIl07CisgICAgCisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhBUElzQXZh
aWxhYmxlRXhwZWN0YXRpb246Tk8gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dKTsKKyAg
ICBhdXRvIHVzZXJTY3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0
aFNvdXJjZTpAIndpbmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCA9IHRydWUiIGluamVjdGlvblRp
bWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRFbmQgZm9yTWFpbkZyYW1lT25s
eTpZRVNdKTsKKyAgICAKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9u
ID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1
Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKKyAgICBbY29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlclNjcmlwdDp1c2VyU2NyaXB0
LmdldCgpXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkU2Ny
aXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RBcHBsZVBh
eSJdOworICAgIAorICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
XSk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vYnVuZGxlLWh0bWwtZmlsZS9hcHBsZS1w
YXktYXZhaWxhYmlsaXR5Il1dXTsKKyAgICAKKyAgICBVdGlsOjpydW4oJmlzRG9uZSk7CisgICAg
CisgICAgRVhQRUNUX0VRKFlFUywgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ3aW5kb3cud2tVc2VyU2NyaXB0SW5qZWN0ZWQiXSBib29sVmFsdWVdKTsKKyAgICAKKyAg
ICBbVGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOworfQorCiBURVNUKEFwcGxlUGF5LCBVc2VyQWdl
bnRTY3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheSkKIHsKICAgICBbVGVzdFByb3RvY29s
IHJlZ2lzdGVyV2l0aFNjaGVtZTpAImh0dHBzIl07CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVy
ID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
V2l0aEV4cGVjdGF0aW9uOk5PXSk7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhBUElzQXZh
aWxhYmxlRXhwZWN0YXRpb246WUVTIGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOk5PXSk7CiAK
ICAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAi
V2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiXTsKICAgICBbY29uZmlndXJhdGlvbi51c2Vy
Q29udGVudENvbnRyb2xsZXIgYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIu
Z2V0KCkgbmFtZTpAInRlc3RBcHBsZVBheSJdOwpAQCAtMTMwLDYgKzE1NSwyOSBAQCBURVNUKEFw
cGxlUGF5LCBVc2VyQWdlbnRTY3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheSkKICAgICBb
VGVzdFByb3RvY29sIHVucmVnaXN0ZXJdOwogfQogCitURVNUKEFwcGxlUGF5LCBVc2VyQWdlbnRT
Y3JpcHRFdmFsdWF0aW9uRGlzYWJsZXNBcHBsZVBheUluRXhpc3RpbmdPYmplY3RzKQoreworICAg
IFtUZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKKworICAgIGF1dG8g
bWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRs
ZXIgYWxsb2NdIGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9uOllFUyBjYW5NYWtlUGF5
bWVudHNFeHBlY3RhdGlvbjpZRVNdKTsKKworICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNv
bmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9u
V2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJd
OworICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07CisK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0pOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJodHRwczovL2J1bmRsZS1odG1sLWZpbGUvYXBwbGUtcGF5LWF2YWlsYWJp
bGl0eSJdXV07CisKKyAgICBVdGlsOjpydW4oJmlzRG9uZSk7CisKKyAgICBpc0RvbmUgPSBmYWxz
ZTsKKyAgICBbbWVzc2FnZUhhbmRsZXIgc2V0Q2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9d
OworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImRvY3VtZW50LmxvY2F0aW9uLmhh
c2ggPSAnI3Rlc3QnIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworCisgICAgVXRpbDo6cnVuKCZp
c0RvbmUpOworCisgICAgW1Rlc3RQcm90b2NvbCB1bnJlZ2lzdGVyXTsKK30KKwogVEVTVChBcHBs
ZVBheSwgQWN0aXZlU2Vzc2lvbkJsb2Nrc1VzZXJBZ2VudFNjcmlwdHMpCiB7CiAgICAgW1Rlc3RQ
cm90b2NvbCByZWdpc3RlcldpdGhTY2hlbWU6QCJodHRwcyJdOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9hcHBsZS1wYXktYXZhaWxhYmlsaXR5Lmh0
bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFp
bGFiaWxpdHkuaHRtbAppbmRleCBmMzAyYzZhZDlmOTY5MzhhZDY0NGZjMDdlMTFlM2ZiMjVmZmVh
MzNhLi42YThiYzVhNDVlYjIzOGMxZWFlODM4MTc4ZmUyMWNiNTQ1MGM0ZGFhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2FwcGxlLXBheS1hdmFpbGFi
aWxpdHkuaHRtbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2Fw
cGxlLXBheS1hdmFpbGFiaWxpdHkuaHRtbApAQCAtMjYsMjcgKzI2LDQxIEBACiAgICAgICAgIH07
CiAgICAgfTsKIAotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkg
PT4geworICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgIGlu
dGVybmFscy5tb2NrUGF5bWVudENvb3JkaW5hdG9yLnN1cHBvcnRzVW5yZXN0cmljdGVkQXBwbGVQ
YXkgPSBmYWxzZTsKIAorICAgICAgICBjb25zdCBhcHBsZVBheVNlc3Npb25BdmFpbGFibGUgPSAh
IXdpbmRvdy5BcHBsZVBheVNlc3Npb247CisgICAgICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0QXZh
aWxhYmxlID0gISF3aW5kb3cuUGF5bWVudFJlcXVlc3Q7CisgICAgICAgIGlmICghYXBwbGVQYXlT
ZXNzaW9uQXZhaWxhYmxlIHx8ICFwYXltZW50UmVxdWVzdEF2YWlsYWJsZSkgeworICAgICAgICAg
ICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEFwcGxlUGF5LnBvc3RNZXNzYWdl
KHsgYXBwbGVQYXlTZXNzaW9uQXZhaWxhYmxlLCBwYXltZW50UmVxdWVzdEF2YWlsYWJsZSB9KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IHN1cHBvcnRz
VmVyc2lvbiA9IEFwcGxlUGF5U2Vzc2lvbi5zdXBwb3J0c1ZlcnNpb24oMSk7CiAgICAgICAgIGNv
bnN0IGNhbk1ha2VQYXltZW50cyA9IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTsK
ICAgICAgICAgY29uc3QgY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQgPSBhd2FpdCBBcHBs
ZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoJycpOwogCi0gICAgICAg
IGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gbmV3IFBheW1lbnRSZXF1ZXN0KFthcHBsZVBheU1ldGhv
ZCgpXSwgewotICAgICAgICAgICAgdG90YWw6IHsKLSAgICAgICAgICAgICAgICBsYWJlbDogJ3Rv
dGFsJywKLSAgICAgICAgICAgICAgICBhbW91bnQ6IHsgY3VycmVuY3k6ICdVU0QnLCB2YWx1ZTog
JzAuMDAnIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICB9KTsKKyAgICAgICAgaWYgKCF3aW5k
b3cud2tQYXltZW50UmVxdWVzdCkgeworICAgICAgICAgICAgd2tQYXltZW50UmVxdWVzdCA9IG5l
dyBQYXltZW50UmVxdWVzdChbYXBwbGVQYXlNZXRob2QoKV0sIHsKKyAgICAgICAgICAgICAgICB0
b3RhbDogeworICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3RvdGFsJywKKyAgICAgICAgICAg
ICAgICAgICAgYW1vdW50OiB7IGN1cnJlbmN5OiAnVVNEJywgdmFsdWU6ICcwLjAwJyB9LAorICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogCi0gICAgICAgIGNv
bnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcGF5bWVudFJlcXVlc3QuY2FuTWFrZVBheW1lbnQo
KTsKKyAgICAgICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCB3a1BheW1lbnRSZXF1ZXN0
LmNhbk1ha2VQYXltZW50KCk7CiAKICAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxl
cnMudGVzdEFwcGxlUGF5LnBvc3RNZXNzYWdlKHsKKyAgICAgICAgICAgIGFwcGxlUGF5U2Vzc2lv
bkF2YWlsYWJsZSwKKyAgICAgICAgICAgIHBheW1lbnRSZXF1ZXN0QXZhaWxhYmxlLAogICAgICAg
ICAgICAgc3VwcG9ydHNWZXJzaW9uLAogICAgICAgICAgICAgY2FuTWFrZVBheW1lbnRzLAogICAg
ICAgICAgICAgY2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQsCiAgICAgICAgICAgICBjYW5N
YWtlUGF5bWVudCwKICAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgfTsKKworICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZXZlbnRMaXN0ZW5lcik7CisgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBldmVudExpc3RlbmVyKTsKIDwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369889</attachid>
            <date>2019-05-14 13:57:53 -0700</date>
            <delta_ts>2019-05-14 15:50:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197751-20190514135752.patch</filename>
            <type>text/plain</type>
            <size>51357</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJkOWNlYTMxMmY3NTQx
YWVhZGQwYzRiMTk1NmE5MDY5YjY2NWRmMC4uZTFjYjZkMGE4OWQ4NTM1MTU5YWE4MjU1NTIzZDMw
ZGVjMDY4YmNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTA1LTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbQXBwbGUgUGF5XSBQYXltZW50
IEFQSXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgaW4gd2ViIHZpZXdzIGludG8gd2hp
Y2ggY2xpZW50cyBoYXZlIGluamVjdGVkIHVzZXIgc2NyaXB0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3NzUxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDYzMTU2Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgor
CisgICAgICAgIEluIHIyNDMzMjQsIHdoZW4gYSBkb2N1bWVudCBoYXMgaGFkIHVzZXIgYWdlbnQg
c2NyaXB0cyBpbmplY3RlZCBpbnRvIGl0LCBwYXltZW50IEFQSXMgd2VyZQorICAgICAgICBkaXNh
YmxlZCBhdCBydW50aW1lIGJ5IGhhdmluZyBhbGwgZW50cnkgcG9pbnRzIHJldHVybiBmYWxzeSB2
YWx1ZXMgb3IgdGhyb3cgZXhjZXB0aW9ucworICAgICAgICAoZS5nLiwgQXBwbGVQYXlTZXNzaW9u
LmNhbk1ha2VQYXltZW50cygpIHJldHVybnMgZmFsc2UpLgorCisgICAgICAgIEluIHRoZSBjYXNl
IG9mIHVzZXIgc2NyaXB0cyBpbiBwYXJ0aWN1bGFyIChlLmcuLCBXS1VzZXJTY3JpcHQpLCBzaW5j
ZSB3ZSBrbm93IHdoZXRoZXIgdGhlc2UKKyAgICAgICAgZXhpc3QgYXQgdGhlIHRpbWUgd2UgY3Jl
YXRlIGEgZG9jdW1lbnQncyBET01XaW5kb3csIHdlIGNhbiBkbyBiZXR0ZXIgdGhhbiByMjQzMzI0
IGJ5CisgICAgICAgIGNvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSBwYXltZW50IEFQSXMgaW4gdGhl
IHByZXNlbmNlIG9mIHVzZXIgc2NyaXB0cy4KKworICAgICAgICBUbyBhY2hpZXZlIHRoaXMsIHRo
aXMgY2hhbmdlIGludHJvZHVjZXMgdGhlICdFbmFibGVkQnlDb250ZXh0JyBleHRlbmRlZCBhdHRy
aWJ1dGUgZm9yCisgICAgICAgIGludGVyZmFjZXMsIHdoaWNoIGluc3RydWN0cyB0aGUgYmluZGlu
Z3MgZ2VuZXJhdG9yIHRvIGFkZCBhIGNvbmp1bmN0IHRvIHRoZSBwYXltZW50IEFQSQorICAgICAg
ICBjb25zdHJ1Y3RvcnMgdGhhdCBhc2tzIHRoZSBpbnRlcmZhY2UncyBpbXBsZW1lbnRhdGlvbiBj
bGFzcyB3aGV0aGVyIGl0IHNob3VsZCBiZSBlbmFibGVkIGZvcgorICAgICAgICBhIGdpdmVuIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuIFRoZSBQYXltZW50UmVxdWVzdCBhbmQgQXBwbGVQYXlTZXNz
aW9uIGludGVyZmFjZXMgYWRvcHQgdGhpcworICAgICAgICBuZXcgZXh0ZW5kZWQgYXR0cmlidXRl
IHRvIGltcGxlbWVudCB0aGUgbmV3IHVzZXIgc2NyaXB0IGNoZWNrLgorCisgICAgICAgIEFkZGVk
IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vz
c2lvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudENvb3JkaW5hdG9yOjpzaG91bGRFbmFibGVB
cHBsZVBheUFQSXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENv
b3JkaW5hdG9yLmg6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50U2Vzc2lvbjo6ZW5hYmxlZEZvckNvbnRleHQp
OgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudFNlc3Npb24uaDoKKyAgICAgICAg
KiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBheW1lbnRIYW5kbGVyOjplbmFibGVkRm9yQ29udGV4dCk6CisgICAgICAgICogTW9k
dWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oOgorICAgICAgICAqIE1vZHVsZXMv
cGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF5
bWVudFJlcXVlc3Q6OmVuYWJsZWRGb3JDb250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVx
dWVzdC9QYXltZW50UmVxdWVzdC5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG06CisgICAgICAgIChOZWVkc1J1bnRpbWVDaGVjayk6CisgICAgICAgIChH
ZW5lcmF0ZVJ1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9wcmVwcm9jZXNzLWlkbHMucGw6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQXR0cmli
dXRlcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRG
b3JDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0R2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5p
ZGw6IEFkZGVkLgorCiAyMDE5LTA1LTA5ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlZmluZSBBdWRpb1Nlc3Npb24gcm91dGUgc2hhcmluZyBwb2xp
Y3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlT
ZXNzaW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNz
aW9uLmlkbAppbmRleCA2NmE4OWY4OWIzOWM5NGU0OTM4MGRmNWFiZTY5M2EwMDgyZmRkMDA1Li4w
ODUwYmQ1YjYwNTAyZTZiZjg1YzBlZTZiY2M3MDVmNjkwNTkzOTA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaWRsCkBAIC0zMCw2
ICszMCw3IEBACiAgICAgQ29uc3RydWN0b3JDYWxsV2l0aD1Eb2N1bWVudCwKICAgICBDb25zdHJ1
Y3Rvck1heVRocm93RXhjZXB0aW9uLAogICAgIEVuYWJsZWRCeVNldHRpbmc9QXBwbGVQYXksCisg
ICAgRW5hYmxlZEZvckNvbnRleHQsCiBdIGludGVyZmFjZSBBcHBsZVBheVNlc3Npb24gOiBFdmVu
dFRhcmdldCB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1RBVFVTX1NVQ0NFU1MgPSAwOwog
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNUQVRVU19GQUlMVVJFID0gMTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcApp
bmRleCA1MjRmNDM2NTk4YzIyODQ1ZmE1M2M3MTY2NDllNzU0NjhjMzZjZjBhLi5kNTU5OTQ4ZDBh
NmZhYTYzZTIwNWJhMDlmY2YxOTJiMWIwYmIwMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC0zMSw5ICsz
MSwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiTGlua0ljb25Db2xsZWN0
b3IuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiUGF5bWVudENvb3JkaW5h
dG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGF5bWVudFNlc3Npb24uaCIKKyNpbmNsdWRlICJVc2Vy
Q29udGVudFByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1VSTC5oPgogCkBAIC0yNTEsNiArMjUzLDIyIEBAIE9wdGlvbmFsPFN0cmlu
Zz4gUGF5bWVudENvb3JkaW5hdG9yOjp2YWxpZGF0ZWRQYXltZW50TmV0d29yayhEb2N1bWVudCYg
ZG9jdW1lbnQsCiAgICAgcmV0dXJuIG1fY2xpZW50LnZhbGlkYXRlZFBheW1lbnROZXR3b3JrKHBh
eW1lbnROZXR3b3JrKTsKIH0KIAorYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OnNob3VsZEVuYWJs
ZUFwcGxlUGF5QVBJcyhEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xp
ZW50LnN1cHBvcnRzVW5yZXN0cmljdGVkQXBwbGVQYXkoKSkgeworICAgICAgICBSRUxFQVNFX0xP
R19JRl9BTExPV0VEKCJzaG91bGRFbmFibGVBcHBsZVBheUFQSXMoKSAtPiB0cnVlICh1bnJlc3Ry
aWN0ZWQgY2xpZW50KSIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IHNob3VsZEVuYWJsZUFQSXMgPSB0cnVlOworICAgIGRvY3VtZW50LnBhZ2UoKS0+dXNlckNvbnRl
bnRQcm92aWRlcigpLmZvckVhY2hVc2VyU2NyaXB0KFsmXShET01XcmFwcGVyV29ybGQmLCBjb25z
dCBVc2VyU2NyaXB0JikgeworICAgICAgICBzaG91bGRFbmFibGVBUElzID0gZmFsc2U7CisgICAg
fSk7CisKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJzaG91bGRFbmFibGVBcHBsZVBheUFQ
SXMoKSAtPiAlZCIsIHNob3VsZEVuYWJsZUFQSXMpOworICAgIHJldHVybiBzaG91bGRFbmFibGVB
UElzOworfQorCiBib29sIFBheW1lbnRDb29yZGluYXRvcjo6c2hvdWxkQWxsb3dBcHBsZVBheShE
b2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2xpZW50LnN1cHBvcnRzVW5y
ZXN0cmljdGVkQXBwbGVQYXkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmgKaW5kZXggM2IzMjFhMjE4NTUwZDA5NGRjZmQx
MWNjYjY5NGVhYTQ1NWM5NTBmOS4uMjYwYTNlMjgxMTYyNmU3ZTQ4ZGNiMDBjMjJlMDc2M2M5YjJh
NmU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1l
bnRDb29yZGluYXRvci5oCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFs
PFN0cmluZz4gdmFsaWRhdGVkUGF5bWVudE5ldHdvcmsoRG9jdW1lbnQmLCB1bnNpZ25lZCB2ZXJz
aW9uLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKIAorICAgIGJvb2wgc2hvdWxkRW5hYmxlQXBwbGVQ
YXlBUElzKERvY3VtZW50JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzaG91bGRB
bGxvd0FwcGxlUGF5KERvY3VtZW50JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBz
aG91bGRBbGxvd1VzZXJBZ2VudFNjcmlwdHMoRG9jdW1lbnQmKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNwcAppbmRleCA4
N2E0NGY0YjM1YmIyZmI0MjkzZTMwNGYyN2YwNmI2ZTZlYmExOTQ5Li42NWQ5Zjg2OWIwOGM4MTk0
NjU2OWM3OTc3Nzg3N2Y4Y2FhNDM1YWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L1BheW1lbnRTZXNzaW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTcyLDYgKzczLDE1IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFBheW1lbnRTZXNzaW9uOjpjYW5D
cmVhdGVTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICByZXR1cm4geyB9OwogfQogCiti
b29sIFBheW1lbnRTZXNzaW9uOjplbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KQoreworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KGNvbnRleHQpOworICAgIGlmIChhdXRvIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCisgICAgICAg
IHJldHVybiBwYWdlLT5wYXltZW50Q29vcmRpbmF0b3IoKS5zaG91bGRFbmFibGVBcHBsZVBheUFQ
SXMoZG9jdW1lbnQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50U2Vzc2lvbi5oCmluZGV4IDhmN2E0YjY1MGYwYjky
ZjgxNWY5YjVkNWNjZTE3OWE3ZDUyOTEwNDMuLjMyMjJmNTllMDkwNjEzM2VjNGM0ODc3M2UwMTc4
NTQzZmY3MWE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
UGF5bWVudFNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1Bh
eW1lbnRTZXNzaW9uLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgUGF5bWVudE1ldGhvZDsKIGNs
YXNzIFBheW1lbnRTZXNzaW9uIDogcHVibGljIHZpcnR1YWwgUGF5bWVudFNlc3Npb25CYXNlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gY2FuQ3JlYXRlU2Vzc2lvbihE
b2N1bWVudCYpOworICAgIHN0YXRpYyBib29sIGVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmKTsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgdmVyc2lvbigpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVNZXJjaGFudChVUkwmJikgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5k
bGVyLmNwcAppbmRleCAwNDg4ZWFlYjY2ZmI1MGM5YjQ4NTAzMGVhZjNkNGQxMDI5YWVhMDE4Li5h
NzZkNGI0YjliZGJhNzljNGUyNjFhZDViMTYxMzljZTdmMmJkNjI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02MSw2ICs2MSwxNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBQYXltZW50SGFuZGxlcjo6Y2FuQ3Jl
YXRlU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYm9v
bCBQYXltZW50SGFuZGxlcjo6ZW5hYmxlZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKK3sKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorICAgIHJldHVybiBQYXltZW50
U2Vzc2lvbjo6ZW5hYmxlZEZvckNvbnRleHQoY29udGV4dCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogYm9vbCBQYXlt
ZW50SGFuZGxlcjo6aGFzQWN0aXZlU2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAjaWYg
RU5BQkxFKEFQUExFX1BBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaAppbmRleCAwYjRkZjAzYmI2N2I0N2EzZGIxZTVh
Nzg2MjRkMjk0YTc0MDcwYWZhLi5iNDhiYTczM2JiMGEwZDQ3YzY3YzZjOTQ4MTU5Njg4NzJhMTk3
MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1Bh
eW1lbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVz
dC9QYXltZW50SGFuZGxlci5oCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFBheW1lbnRIYW5kbGVy
IDogcHVibGljIHZpcnR1YWwgUGF5bWVudFNlc3Npb25CYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmUHRyPFBheW1lbnRIYW5kbGVyPiBjcmVhdGUoRG9jdW1lbnQmLCBQYXltZW50UmVxdWVz
dCYsIGNvbnN0IFBheW1lbnRSZXF1ZXN0OjpNZXRob2RJZGVudGlmaWVyJik7CiAgICAgc3RhdGlj
IEV4Y2VwdGlvbk9yPHZvaWQ+IGNhbkNyZWF0ZVNlc3Npb24oRG9jdW1lbnQmKTsKKyAgICBzdGF0
aWMgYm9vbCBlbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAg
c3RhdGljIGJvb2wgaGFzQWN0aXZlU2Vzc2lvbihEb2N1bWVudCYpOwogCiAgICAgdmlydHVhbCBF
eGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0RGF0YShKU0M6OkpTVmFsdWUmJikgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1
ZXN0LmNwcAppbmRleCA2MWZmNWJlMjFjYWFlN2VkZTk5ODY2YWZjMDI5ZmNkZGQwODJjYjk4Li5k
MmVmN2E2MWVkNTEwYjA2YTMyYzA1MmZjNzA5MDM2NTViMzllMDBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNw
cApAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTUGF5bWVudERldGFpbHNVcGRhdGUuaCIKICNpbmNsdWRlICJKU1BheW1lbnRSZXNwb25zZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXltZW50QWRkcmVzcy5oIgorI2luY2x1
ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBheW1lbnRDdXJyZW5jeUFtb3Vu
dC5oIgogI2luY2x1ZGUgIlBheW1lbnREZXRhaWxzSW5pdC5oIgogI2luY2x1ZGUgIlBheW1lbnRI
YW5kbGVyLmgiCkBAIC0zNTEsNiArMzUzLDExIEBAIEV4Y2VwdGlvbk9yPFJlZjxQYXltZW50UmVx
dWVzdD4+IFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGF5bWVudFJlcXVlc3QoZG9jdW1lbnQsIFdURk1vdmUo
b3B0aW9ucyksIFdURk1vdmUoZGV0YWlscyksIFdURk1vdmUoc3RkOjpnZXQ8MT4oc2hpcHBpbmdP
cHRpb25BbmRNb2RpZmllckRhdGEpKSwgV1RGTW92ZShzZXJpYWxpemVkTWV0aG9kRGF0YSksIFdU
Rk1vdmUoc3RkOjpnZXQ8MD4oc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEpKSkpOwogfQog
Citib29sIFBheW1lbnRSZXF1ZXN0OjplbmFibGVkRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBQYXltZW50SGFuZGxlcjo6ZW5hYmxlZEZv
ckNvbnRleHQoY29udGV4dCk7Cit9CisKIFBheW1lbnRSZXF1ZXN0OjpQYXltZW50UmVxdWVzdChE
b2N1bWVudCYgZG9jdW1lbnQsIFBheW1lbnRPcHRpb25zJiYgb3B0aW9ucywgUGF5bWVudERldGFp
bHNJbml0JiYgZGV0YWlscywgVmVjdG9yPFN0cmluZz4mJiBzZXJpYWxpemVkTW9kaWZpZXJEYXRh
LCBWZWN0b3I8TWV0aG9kPiYmIHNlcmlhbGl6ZWRNZXRob2REYXRhLCBTdHJpbmcmJiBzZWxlY3Rl
ZFNoaXBwaW5nT3B0aW9uKQogICAgIDogQWN0aXZlRE9NT2JqZWN0IHsgZG9jdW1lbnQgfQogICAg
ICwgbV9vcHRpb25zIHsgV1RGTW92ZShvcHRpb25zKSB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgKaW5kZXggY2MwYmJj
YjVmNGM4NGM5ZmJkN2Q4ZjM4NGI5NjViYmZhYjUyN2NkZi4uZjdjMzQyNjc5NDQ1MWI1YmVmZGEw
N2JiOTVkMzU3NjQ0MWFkZWQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgU2hvd1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJm
YWNlPFBheW1lbnRSZXNwb25zZT4+OwogCiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxQYXlt
ZW50UmVxdWVzdD4+IGNyZWF0ZShEb2N1bWVudCYsIFZlY3RvcjxQYXltZW50TWV0aG9kRGF0YT4m
JiwgUGF5bWVudERldGFpbHNJbml0JiYsIFBheW1lbnRPcHRpb25zJiYpOworICAgIHN0YXRpYyBi
b29sIGVuYWJsZWRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICB+UGF5
bWVudFJlcXVlc3QoKTsKIAogICAgIHZvaWQgc2hvdyhEb2N1bWVudCYsIFJlZlB0cjxET01Qcm9t
aXNlPiYmIGRldGFpbHNQcm9taXNlLCBTaG93UHJvbWlzZSYmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5pZGwKaW5k
ZXggYjljMTI2NGNjYTQ4NzE3NGZmZjRkNTVkM2M3OGQzMjI1MjZiOTlmMC4uOTE4YzEwODNmNGJj
NmFkN2MxOTkyNjQ1NGY0MDcxOWE3NDZhYjZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5pZGwKQEAgLTMwLDYg
KzMwLDcgQEAKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENvbnN0cnVj
dG9yTWF5VGhyb3dFeGNlcHRpb24sCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1QYXltZW50UmVxdWVz
dCwKKyAgICBFbmFibGVkRm9yQ29udGV4dCwKICAgICBTZWN1cmVDb250ZXh0LAogXSBpbnRlcmZh
Y2UgUGF5bWVudFJlcXVlc3QgOiBFdmVudFRhcmdldCB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50
XSBQcm9taXNlPFBheW1lbnRSZXNwb25zZT4gc2hvdyhvcHRpb25hbCBQcm9taXNlPFBheW1lbnRE
ZXRhaWxzVXBkYXRlPiBkZXRhaWxzUHJvbWlzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDUwNWM0ZjJlZjE0MWIzNTY4
MmExNzQ0NzVkZWMyMjZhZjlkNzFkY2MuLmYzMDlhNGI3YzdlZGFiZjBlNjEwOWEzODMwMGQxMzhl
YzNkMGQwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCkBAIC0xNzA1LDYgKzE3MDUsNyBAQCBzdWIgTmVlZHNSdW50aW1lQ2hl
Y2sKICAgICB9CiAKICAgICByZXR1cm4gJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Vu
YWJsZWRBdFJ1bnRpbWV9CisgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntFbmFibGVkRm9yQ29udGV4dH0KICAgICAgICAgfHwgJGNvbnRleHQtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0VuYWJsZWRGb3JXb3JsZH0KICAgICAgICAgfHwgJGNvbnRleHQtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0VuYWJsZWRCeVNldHRpbmd9CiAgICAgICAgIHx8ICRjb250ZXh0LT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntEaXNhYmxlZEJ5UXVpcmt9CkBAIC0zNzg4LDYgKzM3ODksMTUgQEAgc3Vi
IEdlbmVyYXRlUnVudGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nCiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBpZiAoJGNvbnRleHQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0VuYWJsZWRGb3JDb250
ZXh0fSkgeworICAgICAgICBhc3NlcnQoIk11c3Qgbm90IHNwZWNpZnkgdmFsdWUgZm9yIEVuYWJs
ZWRGb3JDb250ZXh0LiIpIHVubGVzcyAkY29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW5h
YmxlZEZvckNvbnRleHR9IGVxICJWQUxVRV9JU19NSVNTSU5HIjsKKyAgICAgICAgYXNzZXJ0KCJF
bmFibGVkRm9yQ29udGV4dCBtdXN0IGJlIGFuIGludGVyZmFjZSBvciBjb25zdHJ1Y3RvciBhdHRy
aWJ1dGUuIikgdW5sZXNzICRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVHlwZSgkY29udGV4
dC0+dHlwZSk7CisKKyAgICAgICAgbXkgJGNvbnRleHRSZWYgPSAiKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCIgLiAkZ2xvYmFsT2JqZWN0UHRyIC4gIiktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSI7CisgICAgICAgIG15ICRuYW1lID0gJGNvbnRleHQtPm5hbWU7CisgICAgICAgIHB1c2go
QGNvbmp1bmN0cywgICIke25hbWV9OjplbmFibGVkRm9yQ29udGV4dCgiIC4gJGNvbnRleHRSZWYg
LiAiKSIpOworICAgIH0KKwogICAgIG15ICRyZXN1bHQgPSBqb2luKCIgJiYgIiwgQGNvbmp1bmN0
cyk7CiAgICAgJHJlc3VsdCA9ICIoJHJlc3VsdCkiIGlmIEBjb25qdW5jdHMgPiAxOwogICAgIHJl
dHVybiAkcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TEF0dHJpYnV0ZXMuanNvbgppbmRleCBlZmU1Njk3OTQ4NTk0ZWNhNWRjOTFmMWRkMmQxMTI5YjY4
YjVhZDE1Li40NjlmZDJkZjllZTZmMjc2OWFlODliNDA1ODBmNWNhYmE3YjhjZTM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgpA
QCAtMTkyLDYgKzE5Miw5IEBACiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRl
cmZhY2UiLCAiZGljdGlvbmFyeSIsICJlbnVtIiwgImF0dHJpYnV0ZSIsICJvcGVyYXRpb24iLCAi
Y29uc3RhbnQiXSwKICAgICAgICAgICAgICJ2YWx1ZXMiOiBbIioiXQogICAgICAgICB9LAorICAg
ICAgICAiRW5hYmxlZEZvckNvbnRleHQiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2Vk
IjogWyJhdHRyaWJ1dGUiLCAiaW50ZXJmYWNlIl0KKyAgICAgICAgfSwKICAgICAgICAgIkVuYWJs
ZWRGb3JXb3JsZCI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImF0dHJpYnV0
ZSIsICJvcGVyYXRpb24iXSwKICAgICAgICAgICAgICJ2YWx1ZXMiOiBbIioiXQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAppbmRleCAx
YWM4ZmVkNmE4NmJjNDQxM2JlMjFhZDg5Mjg2YWY2NWZiZTAwNWI4Li45NzcyMTMwM2Y4YTlhZTIy
OWRmNjNjNDRlNThmY2Q5MzRjMmM3YzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbApAQCAtMjgzLDcgKzI4Myw3IEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yQXR0cmlidXRlcwogICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZU5h
bWUgKHNvcnQga2V5cyAleyRleHRlbmRlZEF0dHJpYnV0ZXN9KSB7CiAgICAgICBuZXh0IHVubGVz
cyAoJGF0dHJpYnV0ZU5hbWUgZXEgIkNvbmRpdGlvbmFsIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAi
RW5hYmxlZEF0UnVudGltZSIgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVuYWJsZWRGb3JXb3JsZCIK
ICAgICAgICAgfHwgJGF0dHJpYnV0ZU5hbWUgZXEgIkVuYWJsZWRCeVNldHRpbmciIHx8ICRhdHRy
aWJ1dGVOYW1lIGVxICJTZWN1cmVDb250ZXh0IiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiUHJpdmF0
ZUlkZW50aWZpZXIiCi0gICAgICAgIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJQdWJsaWNJZGVudGlm
aWVyIiB8fCAkYXR0cmlidXRlTmFtZSBlcSAiRGlzYWJsZWRCeVF1aXJrIiB8fCAkYXR0cmlidXRl
TmFtZSBlcSAiRW5hYmxlZEJ5UXVpcmsiKTsKKyAgICAgICAgfHwgJGF0dHJpYnV0ZU5hbWUgZXEg
IlB1YmxpY0lkZW50aWZpZXIiIHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJEaXNhYmxlZEJ5UXVpcmsi
IHx8ICRhdHRyaWJ1dGVOYW1lIGVxICJFbmFibGVkQnlRdWlyayIgfHwgJGF0dHJpYnV0ZU5hbWUg
ZXEgIkVuYWJsZWRGb3JDb250ZXh0Iik7CiAgICAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGUgPSAk
YXR0cmlidXRlTmFtZTsKICAgICAgICRleHRlbmRlZEF0dHJpYnV0ZSAuPSAiPSIgLiAkZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57JGF0dHJpYnV0ZU5hbWV9IHVubGVzcyAkZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57JGF0dHJpYnV0ZU5hbWV9IGVxICJWQUxVRV9JU19NSVNTSU5HIjsKICAgICAgIHB1c2goQGV4
dGVuZGVkQXR0cmlidXRlc0xpc3QsICRleHRlbmRlZEF0dHJpYnV0ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEVuYWJsZWRGb3JDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjdmYjdkMjU2ZjU5NzVjMTJiMmQ0
MjBkZWQzNmU2NGNkNzIwYTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcApAQCAtMCww
ICsxLDI2NyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
Ky8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1
Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xh
c3MgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0OworICAgIHN0YXRpYyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQ
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RW5h
YmxlZEZvckNvbnRleHRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNM
QVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25G
aW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dD47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZt
KTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3Rl
bXBsYXRlPD4gdm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0Ojpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZygi
VGVzdEVuYWJsZWRGb3JDb250ZXh0Il9zKSksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9
CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHRDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICov
CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFBy
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0UHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwg
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmluZm8oKSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRQ
cm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ6OnNfaW5mbyA9IHsgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQpIH07CisKK0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3RFbmFibGVkRm9yQ29udGV4dD4mJiBpbXBsKQorICAgIDog
SlNET01XcmFwcGVyPFRlc3RFbmFibGVkRm9yQ29udGV4dD4oc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworICAgIGlmICgoZG93bmNhc3Q8
RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSAm
JiBUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQ6OmVuYWJsZWRGb3JDb250ZXh0KCpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkpKQorICAgICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuVGVzdFN1Yk9i
akVuYWJsZWRGb3JDb250ZXh0UHVibGljTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0
ZSh2bSwganNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3Rvciwgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZv
ckNvbnRleHRDb25zdHJ1Y3RvciksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkpOworfQorCitKU09i
amVjdCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0UHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQ6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dD4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0
RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6On5KU1Rl
c3RFbmFibGVkRm9yQ29udGV4dCgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dCogSURMQXR0cmlidXRlPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6Y2Fz
dChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQqPihzdGF0ZS52bSgpLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3Rv
dHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZ
KCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0
KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
eworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRG
b3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD46OmdldDxqc1Rlc3RF
bmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3Vi
T2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RFbmFibGVkRm9yQ29udGV4dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLnZt
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN1Yk9iakVuYWJsZWRGb3JD
b250ZXh0IiksIHN0cmxlbigiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZv
ckNvbnRleHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6c2V0PHNldEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQi
KTsKK30KKwordm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6aGVhcFNuYXBzaG90KEpTQ2Vs
bCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oY2VsbCk7CisgICAgYnVp
bGRlci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgp
KTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICBidWlsZGVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjpoZWFwU25h
cHNob3QoY2VsbCwgYnVpbGRlcik7Cit9CisKK2Jvb2wgSlNUZXN0RW5hYmxlZEZvckNvbnRleHRP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNv
bikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdEVu
YWJsZWRGb3JDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8
RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZq
c1Rlc3RFbmFibGVkRm9yQ29udGV4dC0+d3JhcHBlZCgpLCBqc1Rlc3RFbmFibGVkRm9yQ29udGV4
dCk7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lO
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZv
aWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0RW5hYmxlZEZvckNvbnRleHRAV2ViQ29y
ZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43
V2ViQ29yZTIxVGVzdEVuYWJsZWRGb3JDb250ZXh0RVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkK
K3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFi
bGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lm
IFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBXVEZfUFJF
UEFSRV9WVEJMX1BPSU5URVJfRk9SX0lOU1BFQ1RJT04oX19pZGVudGlmaWVyKCI/P183VGVzdEVu
YWJsZWRGb3JDb250ZXh0QFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0
ZWRWVGFibGVQb2ludGVyID0gV1RGX1BSRVBBUkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9O
KCZfWlRWTjdXZWJDb3JlMjFUZXN0RW5hYmxlZEZvckNvbnRleHRFWzJdKTsKKyNlbmRpZgorCisg
ICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0RW5hYmxlZEZvckNvbnRleHQgZG9lcyBub3QgaGF2ZSBh
IHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFj
a3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0RW5hYmxlZEZvckNvbnRleHQ+Ojp2YWx1
ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8v
IElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZy
ZWUgYnVnLCBvcgorICAgIC8vIFRlc3RFbmFibGVkRm9yQ29udGV4dCBoYXMgc3ViY2xhc3Nlcy4g
SWYgVGVzdEVuYWJsZWRGb3JDb250ZXh0IGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAor
ICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0RW5hYmxlZEZvckNvbnRl
eHQgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcg
dGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBk
ZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBl
Y3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVz
dEVuYWJsZWRGb3JDb250ZXh0PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RFbmFibGVkRm9yQ29udGV4dCYgaW1wbCkKK3sKKyAgICByZXR1
cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdEVuYWJsZWRGb3JD
b250ZXh0KiBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
ICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYzODdkNDIzNjEzMjI0N2Yy
ZDdjNDk5ZmY0YTBmOTU2ZWMwNmFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5oCkBAIC0w
LDAgKzEsODggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0RW5hYmxlZEZvckNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8
VGVzdEVuYWJsZWRGb3JDb250ZXh0PiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9N
V3JhcHBlcjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+OworICAgIHN0YXRpYyBKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkK
KyAgICB7CisgICAgICAgIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KHN0cnVjdHVyZSwgKmdsb2Jh
bE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RFbmFibGVkRm9yQ29udGV4dCogdG9X
cmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZN
JiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIGhlYXBTbmFw
c2hvdChKU0NlbGwqLCBKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3RFbmFibGVkRm9yQ29udGV4dD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0T3duZXIgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9
OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQmLCBUZXN0RW5hYmxlZEZvckNvbnRleHQqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dE93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93
bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0RW5hYmxlZEZvckNv
bnRleHQqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0Owor
fQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEVuYWJsZWRGb3JDb250ZXh0Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
RW5hYmxlZEZvckNvbnRleHQqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEVu
YWJsZWRGb3JDb250ZXh0PiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgp
KSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFRlc3RFbmFibGVkRm9yQ29udGV4dD4geworICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBUZXN0RW5hYmxlZEZvckNvbnRleHQqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCAzNWQxNmVlMGY3MzQ4NzFiMzkz
N2U5ZjNlNGVmNmQ5NTI4OWJjOGI4Li5iODkxNGY5ODY3ODNkM2Y5ODQ5OWRkYWQ1YWE0ZTQ1Y2E5
NTU1YjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkpTVGVzdERPTUpJVC5oIgogI2luY2x1ZGUgIkpTVGVzdERvbWFpblNlY3VyaXR5
LmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIgorI2luY2x1ZGUgIkpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0LmgiCiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTVGVzdEV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0
aW9uLmgiCkBAIC0xNzIsNiArMTczLDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGEKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRp
bmdDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKQEAgLTcwMiw2ICs3MDUsOCBAQCB2b2lkIEpTVGVzdEdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpKQogICAgICAgICBwdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVB1YmxpY05hbWUo
KSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUsIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikpKTsKICNlbmRpZgorICAg
IGlmICgoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpICYmIFRlc3RFbmFibGVkRm9yQ29u
dGV4dDo6ZW5hYmxlZEZvckNvbnRleHQoKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkpCisgICAgICAgIHB1dERpcmVj
dEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpLT5idWlsdGluTmFtZXMoKS5UZXN0RW5hYmxlZEZvckNvbnRleHRQdWJsaWNOYW1lKCks
IEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5h
YmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rvciwgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpKTsKICAgICBw
dXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVBy
aXZhdGVOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlLCBudWxscHRyKSwgYXR0cmlidXRlc0ZvclN0
cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogICAgIHB1
dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGVQcml2YXRlTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNU
ZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlLCBudWxs
cHRyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKQEAgLTExMTYsNiAr
MTEyMSwzMCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jbwogICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFi
bGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0RW5hYmxlZEJ5U2V0dGluZyIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIHJldHVybiBKU1Rlc3RFbmFibGVkRm9yQ29udGV4
dDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJs
ZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
c3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUudm0oKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJU
ZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIp
OworfQorCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVkRm9yQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEVuYWJsZWRGb3JDb250ZXh0LmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZTcwOTQ0NTNlZDU3MjIyYjM0NDFiYTZlOThhNDkwYmU5N2QxYjkyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5pZGwKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBFbmFi
bGVkRm9yQ29udGV4dCwKKyAgICBTZWN1cmVDb250ZXh0LAorXSBpbnRlcmZhY2UgVGVzdEVuYWJs
ZWRGb3JDb250ZXh0IHsKKyAgICBbRW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZywgRW5hYmxl
ZEZvckNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0U3ViT2JqQ29uc3RydWN0b3IgVGVzdFN1Yk9iakVu
YWJsZWRGb3JDb250ZXh0OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAwZTg0MmYxYjZmY2U1YTZjN2U5ZTliMDBhYmE0Y2M2ZTYzM2NmMjJj
Li41ZWYyZWZmMmY5NmVlNWI3MmUxY2U4ZTBmMjM3NzZjZTkxYzk0NDUxIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTktMDUtMDkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtBcHBs
ZSBQYXldIFBheW1lbnQgQVBJcyBzaG91bGQgYmUgY29tcGxldGVseSBkaXNhYmxlZCBpbiB3ZWIg
dmlld3MgaW50byB3aGljaCBjbGllbnRzIGhhdmUgaW5qZWN0ZWQgdXNlciBzY3JpcHRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3NTEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzUwNjMxNTYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXgg
Q2hyaXN0ZW5zZW4uCisKKyAgICAgICAgQWRkZWQgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGVQYXkubW06CisgICAgICAgICgt
W1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4
cGVjdGF0aW9uOmNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOl0pOgorICAgICAgICAoLVtUZXN0
QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVj
ZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKC1bVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgaW5pdFdpdGhFeHBlY3Rh
dGlvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL2FwcGxlLXBheS1hdmFpbGFiaWxpdHkuaHRtbDoKKwogMjAxOS0wNS0wOSAgRXJpYyBDYXJs
c29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZpbmUgQXVkaW9TZXNz
aW9uIHJvdXRlIHNoYXJpbmcgcG9saWN5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0FwcGxlUGF5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9BcHBsZVBheS5tbQppbmRleCBhMmI1ODAxZjkzOWJkNzA2MTJjM2I4OWZk
MGRiYzU1YzhkNTcxNDZmLi4wNjFiMzMxYTE1Njc2YjMzNzlmMzY5NjE4NTQ3MDNlZWU2OTEzYTBj
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FwcGxl
UGF5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXBwbGVQ
YXkubW0KQEAgLTQxLDI5ICs0MSwzMyBAQCBzdGF0aWMgYm9vbCBpc0RvbmU7CiBAaW50ZXJmYWNl
IFRlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdLU2NyaXB0TWVz
c2FnZUhhbmRsZXI+CiAKIC0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRXhwZWN0YXRpb246KEJPT0wpZXhwZWN0YXRpb247CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhwZWN0YXRpb246KEJPT0wpYXBpc0F2
YWlsYWJsZUV4cGVjdGF0aW9uIGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOihCT09MKWNhbk1h
a2VQYXltZW50c0V4cGVjdGF0aW9uOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPXNl
dEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjopIEJPT0wgYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9u
OworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb247
CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFRlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5k
bGVyIHsKLSAgICBCT09MIF9leHBlY3RhdGlvbjsKLX0KK0BpbXBsZW1lbnRhdGlvbiBUZXN0QXBw
bGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlcgogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhFeHBl
Y3RhdGlvbjooQk9PTClleHBlY3RhdGlvbgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQVBJc0F2
YWlsYWJsZUV4cGVjdGF0aW9uOihCT09MKWFwaXNBdmFpbGFibGVFeHBlY3RhdGlvbiBjYW5NYWtl
UGF5bWVudHNFeHBlY3RhdGlvbjooQk9PTCljYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbgogewog
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgX2V4cGVjdGF0aW9uID0gZXhwZWN0YXRpb247CisgICAgX2FwaXNBdmFpbGFibGVFeHBlY3Rh
dGlvbiA9IGFwaXNBdmFpbGFibGVFeHBlY3RhdGlvbjsKKyAgICBfY2FuTWFrZVBheW1lbnRzRXhw
ZWN0YXRpb24gPSBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjsKICAgICByZXR1cm4gc2VsZjsK
IH0KIAogLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9s
bGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1Nj
cmlwdE1lc3NhZ2UgKiltZXNzYWdlCiB7Ci0gICAgRVhQRUNUX0VRKF9leHBlY3RhdGlvbiwgW1tt
ZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAic3VwcG9ydHNWZXJzaW9uIl0gYm9vbFZhbHVlXSk7
Ci0gICAgRVhQRUNUX0VRKF9leHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5
OkAiY2FuTWFrZVBheW1lbnRzIl0gYm9vbFZhbHVlXSk7Ci0gICAgRVhQRUNUX0VRKF9leHBlY3Rh
dGlvbiwgW1ttZXNzYWdlLmJvZHkgb2JqZWN0Rm9yS2V5OkAiY2FuTWFrZVBheW1lbnRzV2l0aEFj
dGl2ZUNhcmQiXSBib29sVmFsdWVdKTsKLSAgICBFWFBFQ1RfRVEoX2V4cGVjdGF0aW9uLCBbW21l
c3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtlUGF5bWVudCJdIGJvb2xWYWx1ZV0pOwor
ICAgIEVYUEVDVF9FUShfYXBpc0F2YWlsYWJsZUV4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBv
YmplY3RGb3JLZXk6QCJhcHBsZVBheVNlc3Npb25BdmFpbGFibGUiXSBib29sVmFsdWVdKTsKKyAg
ICBFWFBFQ1RfRVEoX2FwaXNBdmFpbGFibGVFeHBlY3RhdGlvbiwgW1ttZXNzYWdlLmJvZHkgb2Jq
ZWN0Rm9yS2V5OkAicGF5bWVudFJlcXVlc3RBdmFpbGFibGUiXSBib29sVmFsdWVdKTsKKyAgICBF
WFBFQ1RfRVEoX2Nhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmpl
Y3RGb3JLZXk6QCJzdXBwb3J0c1ZlcnNpb24iXSBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEo
X2Nhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6
QCJjYW5NYWtlUGF5bWVudHMiXSBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEoX2Nhbk1ha2VQ
YXltZW50c0V4cGVjdGF0aW9uLCBbW21lc3NhZ2UuYm9keSBvYmplY3RGb3JLZXk6QCJjYW5NYWtl
UGF5bWVudHNXaXRoQWN0aXZlQ2FyZCJdIGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9FUShfY2Fu
TWFrZVBheW1lbnRzRXhwZWN0YXRpb24sIFtbbWVzc2FnZS5ib2R5IG9iamVjdEZvcktleTpAImNh
bk1ha2VQYXltZW50Il0gYm9vbFZhbHVlXSk7CiAgICAgaXNEb25lID0gdHJ1ZTsKIH0KIApAQCAt
NzUsNyArNzksNyBAQCBURVNUKEFwcGxlUGF5LCBBcHBsZVBheUF2YWlsYWJsZUJ5RGVmYXVsdCkK
IHsKICAgICBbVGVzdFByb3RvY29sIHJlZ2lzdGVyV2l0aFNjaGVtZTpAImh0dHBzIl07CiAKLSAg
ICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3Nh
Z2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGF0aW9uOllFU10pOworICAgIGF1dG8gbWVz
c2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIg
YWxsb2NdIGluaXRXaXRoQVBJc0F2YWlsYWJsZUV4cGVjdGF0aW9uOllFUyBjYW5NYWtlUGF5bWVu
dHNFeHBlY3RhdGlvbjpZRVNdKTsKIAogICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZp
Z3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0
aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFscyJdOwog
ICAgIFtjb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBhZGRTY3JpcHRNZXNzYWdl
SGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEFwcGxlUGF5Il07CkBAIC04
OCwxMSArOTIsMTEgQEAgVEVTVChBcHBsZVBheSwgQXBwbGVQYXlBdmFpbGFibGVCeURlZmF1bHQp
CiAgICAgW1Rlc3RQcm90b2NvbCB1bnJlZ2lzdGVyXTsKIH0KIAotVEVTVChBcHBsZVBheSwgVXNl
clNjcmlwdERpc2FibGVzQXBwbGVQYXkpCitURVNUKEFwcGxlUGF5LCBVc2VyU2NyaXB0QXREb2N1
bWVudFN0YXJ0RGlzYWJsZXNBcHBsZVBheSkKIHsKICAgICBbVGVzdFByb3RvY29sIHJlZ2lzdGVy
V2l0aFNjaGVtZTpAImh0dHBzIl07CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHRO
UyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVj
dGF0aW9uOk5PXSk7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBw
bGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdFdpdGhBUElzQXZhaWxhYmxlRXhw
ZWN0YXRpb246Tk8gY2FuTWFrZVBheW1lbnRzRXhwZWN0YXRpb246Tk9dKTsKICAgICBhdXRvIHVz
ZXJTY3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0aFNvdXJjZTpA
IndpbmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCA9IHRydWUiIGluamVjdGlvblRpbWU6V0tVc2Vy
U2NyaXB0SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRTdGFydCBmb3JNYWluRnJhbWVPbmx5OllFU10p
OwogCiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFt
ZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIl07CkBAIC0xMDksMTEgKzExMywzMiBA
QCBURVNUKEFwcGxlUGF5LCBVc2VyU2NyaXB0RGlzYWJsZXNBcHBsZVBheSkKICAgICBbVGVzdFBy
b3RvY29sIHVucmVnaXN0ZXJdOwogfQogCitURVNUKEFwcGxlUGF5LCBVc2VyU2NyaXB0QXREb2N1
bWVudEVuZERpc2FibGVzQXBwbGVQYXkpCit7CisgICAgW1Rlc3RQcm90b2NvbCByZWdpc3Rlcldp
dGhTY2hlbWU6QCJodHRwcyJdOworICAgIAorICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoQVBJ
c0F2YWlsYWJsZUV4cGVjdGF0aW9uOk5PIGNhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9uOk5PXSk7
CisgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10gaW5p
dFdpdGhTb3VyY2U6QCJ3aW5kb3cud2tVc2VyU2NyaXB0SW5qZWN0ZWQgPSB0cnVlIiBpbmplY3Rp
b25UaW1lOldLVXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50RW5kIGZvck1haW5GcmFt
ZU9ubHk6WUVTXSk7CisgICAgCisgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVz
dFBsdWdJbkNsYXNzTmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIl07CisgICAg
W2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFVzZXJTY3JpcHQ6dXNlclNj
cmlwdC5nZXQoKV07CisgICAgW2NvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0QXBw
bGVQYXkiXTsKKyAgICAKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbl0pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL2J1bmRsZS1odG1sLWZpbGUvYXBw
bGUtcGF5LWF2YWlsYWJpbGl0eSJdXV07CisgICAgCisgICAgVXRpbDo6cnVuKCZpc0RvbmUpOwor
ICAgIAorICAgIEVYUEVDVF9FUShZRVMsIFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAid2luZG93LndrVXNlclNjcmlwdEluamVjdGVkIl0gYm9vbFZhbHVlXSk7CisgICAg
CisgICAgW1Rlc3RQcm90b2NvbCB1bnJlZ2lzdGVyXTsKK30KKwogVEVTVChBcHBsZVBheSwgVXNl
ckFnZW50U2NyaXB0RXZhbHVhdGlvbkRpc2FibGVzQXBwbGVQYXkpCiB7CiAgICAgW1Rlc3RQcm90
b2NvbCByZWdpc3RlcldpdGhTY2hlbWU6QCJodHRwcyJdOwogCi0gICAgYXV0byBtZXNzYWdlSGFu
ZGxlciA9IGFkb3B0TlMoW1tUZXN0QXBwbGVQYXlTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10g
aW5pdFdpdGhFeHBlY3RhdGlvbjpOT10pOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdEFwcGxlUGF5U2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoQVBJ
c0F2YWlsYWJsZUV4cGVjdGF0aW9uOllFUyBjYW5NYWtlUGF5bWVudHNFeHBlY3RhdGlvbjpOT10p
OwogCiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNzTmFt
ZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIl07CiAgICAgW2NvbmZpZ3VyYXRpb24u
dXNlckNvbnRlbnRDb250cm9sbGVyIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5k
bGVyLmdldCgpIG5hbWU6QCJ0ZXN0QXBwbGVQYXkiXTsKQEAgLTEzMCw2ICsxNTUsMjkgQEAgVEVT
VChBcHBsZVBheSwgVXNlckFnZW50U2NyaXB0RXZhbHVhdGlvbkRpc2FibGVzQXBwbGVQYXkpCiAg
ICAgW1Rlc3RQcm90b2NvbCB1bnJlZ2lzdGVyXTsKIH0KIAorVEVTVChBcHBsZVBheSwgVXNlckFn
ZW50U2NyaXB0RXZhbHVhdGlvbkRpc2FibGVzQXBwbGVQYXlJbkV4aXN0aW5nT2JqZWN0cykKK3sK
KyAgICBbVGVzdFByb3RvY29sIHJlZ2lzdGVyV2l0aFNjaGVtZTpAImh0dHBzIl07CisKKyAgICBh
dXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RBcHBsZVBheVNjcmlwdE1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0V2l0aEFQSXNBdmFpbGFibGVFeHBlY3RhdGlvbjpZRVMgY2FuTWFr
ZVBheW1lbnRzRXhwZWN0YXRpb246WUVTXSk7CisKKyAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9u
ICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJh
dGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5h
bHMiXTsKKyAgICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkU2NyaXB0
TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RBcHBsZVBheSJd
OworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKKyAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9idW5kbGUtaHRtbC1maWxlL2FwcGxlLXBheS1hdmFp
bGFiaWxpdHkiXV1dOworCisgICAgVXRpbDo6cnVuKCZpc0RvbmUpOworCisgICAgaXNEb25lID0g
ZmFsc2U7CisgICAgW21lc3NhZ2VIYW5kbGVyIHNldENhbk1ha2VQYXltZW50c0V4cGVjdGF0aW9u
Ok5PXTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJkb2N1bWVudC5sb2NhdGlv
bi5oYXNoID0gJyN0ZXN0JyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKworICAgIFV0aWw6OnJ1
bigmaXNEb25lKTsKKworICAgIFtUZXN0UHJvdG9jb2wgdW5yZWdpc3Rlcl07Cit9CisKIFRFU1Qo
QXBwbGVQYXksIEFjdGl2ZVNlc3Npb25CbG9ja3NVc2VyQWdlbnRTY3JpcHRzKQogewogICAgIFtU
ZXN0UHJvdG9jb2wgcmVnaXN0ZXJXaXRoU2NoZW1lOkAiaHR0cHMiXTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvYXBwbGUtcGF5LWF2YWlsYWJpbGl0
eS5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9hcHBsZS1wYXkt
YXZhaWxhYmlsaXR5Lmh0bWwKaW5kZXggZjMwMmM2YWQ5Zjk2OTM4YWQ2NDRmYzA3ZTExZTNmYjI1
ZmZlYTMzYS4uNmE4YmM1YTQ1ZWIyMzhjMWVhZTgzODE3OGZlMjFjYjU0NTBjNGRhYSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9hcHBsZS1wYXktYXZh
aWxhYmlsaXR5Lmh0bWwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9hcHBsZS1wYXktYXZhaWxhYmlsaXR5Lmh0bWwKQEAgLTI2LDI3ICsyNiw0MSBAQAogICAgICAg
ICB9OwogICAgIH07CiAKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGFzeW5j
ICgpID0+IHsKKyAgICBjb25zdCBldmVudExpc3RlbmVyID0gYXN5bmMgKCkgPT4gewogICAgICAg
ICBpbnRlcm5hbHMubW9ja1BheW1lbnRDb29yZGluYXRvci5zdXBwb3J0c1VucmVzdHJpY3RlZEFw
cGxlUGF5ID0gZmFsc2U7CiAKKyAgICAgICAgY29uc3QgYXBwbGVQYXlTZXNzaW9uQXZhaWxhYmxl
ID0gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uOworICAgICAgICBjb25zdCBwYXltZW50UmVxdWVz
dEF2YWlsYWJsZSA9ICEhd2luZG93LlBheW1lbnRSZXF1ZXN0OworICAgICAgICBpZiAoIWFwcGxl
UGF5U2Vzc2lvbkF2YWlsYWJsZSB8fCAhcGF5bWVudFJlcXVlc3RBdmFpbGFibGUpIHsKKyAgICAg
ICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RBcHBsZVBheS5wb3N0TWVz
c2FnZSh7IGFwcGxlUGF5U2Vzc2lvbkF2YWlsYWJsZSwgcGF5bWVudFJlcXVlc3RBdmFpbGFibGUg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBzdXBw
b3J0c1ZlcnNpb24gPSBBcHBsZVBheVNlc3Npb24uc3VwcG9ydHNWZXJzaW9uKDEpOwogICAgICAg
ICBjb25zdCBjYW5NYWtlUGF5bWVudHMgPSBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRz
KCk7CiAgICAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkID0gYXdhaXQg
QXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKCcnKTsKIAotICAg
ICAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IG5ldyBQYXltZW50UmVxdWVzdChbYXBwbGVQYXlN
ZXRob2QoKV0sIHsKLSAgICAgICAgICAgIHRvdGFsOiB7Ci0gICAgICAgICAgICAgICAgbGFiZWw6
ICd0b3RhbCcsCi0gICAgICAgICAgICAgICAgYW1vdW50OiB7IGN1cnJlbmN5OiAnVVNEJywgdmFs
dWU6ICcwLjAwJyB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgfSk7CisgICAgICAgIGlmICgh
d2luZG93LndrUGF5bWVudFJlcXVlc3QpIHsKKyAgICAgICAgICAgIHdrUGF5bWVudFJlcXVlc3Qg
PSBuZXcgUGF5bWVudFJlcXVlc3QoW2FwcGxlUGF5TWV0aG9kKCldLCB7CisgICAgICAgICAgICAg
ICAgdG90YWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICd0b3RhbCcsCisgICAgICAg
ICAgICAgICAgICAgIGFtb3VudDogeyBjdXJyZW5jeTogJ1VTRCcsIHZhbHVlOiAnMC4wMCcgfSwK
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KIAotICAgICAg
ICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHBheW1lbnRSZXF1ZXN0LmNhbk1ha2VQYXlt
ZW50KCk7CisgICAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgd2tQYXltZW50UmVx
dWVzdC5jYW5NYWtlUGF5bWVudCgpOwogCiAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhh
bmRsZXJzLnRlc3RBcHBsZVBheS5wb3N0TWVzc2FnZSh7CisgICAgICAgICAgICBhcHBsZVBheVNl
c3Npb25BdmFpbGFibGUsCisgICAgICAgICAgICBwYXltZW50UmVxdWVzdEF2YWlsYWJsZSwKICAg
ICAgICAgICAgIHN1cHBvcnRzVmVyc2lvbiwKICAgICAgICAgICAgIGNhbk1ha2VQYXltZW50cywK
ICAgICAgICAgICAgIGNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkLAogICAgICAgICAgICAg
Y2FuTWFrZVBheW1lbnQsCiAgICAgICAgIH0pOwotICAgIH0pOworICAgIH07CisKKyAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGV2ZW50TGlzdGVuZXIpOworICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgZXZlbnRMaXN0ZW5lcik7CiA8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>