<?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>40835</bug_id>
          
          <creation_ts>2010-06-18 08:31:11 -0700</creation_ts>
          <short_desc>Adds support for throwing behavior of SerializedScriptValue to be specified in the IDL.</short_desc>
          <delta_ts>2013-10-02 12:27:38 -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>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marcus Bulach">bulach</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>gustavo</cc>
    
    <cc>jorlow</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239930</commentid>
    <comment_count>0</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-18 08:31:11 -0700</bug_when>
    <thetext>Adds support for throwing behavior of SerializedScriptValue to be specified in the IDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239937</commentid>
    <comment_count>1</comment_count>
      <attachid>59113</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-18 08:36:24 -0700</bug_when>
    <thetext>Created attachment 59113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239942</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-18 08:38:53 -0700</bug_when>
    <thetext>Attachment 59113 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:177:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:179:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:180:  _g_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:181:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:188:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:191:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:204:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:206:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239944</commentid>
    <comment_count>3</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-18 08:39:51 -0700</bug_when>
    <thetext>jorlow: I took over your patch (thanks!), fixed a couple of nits, and WebKitTools/Scripts/run-bindings-tests seems to be happy: &quot;All tests passed!&quot;.

would you mind taking another look? also, please, let me know if there&apos;s any other test I should run, or anybody else that should be cc:d on this bug.

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239956</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-18 08:56:54 -0700</bug_when>
    <thetext>Attachment 59113 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3267314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240050</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-18 11:19:10 -0700</bug_when>
    <thetext>Can you please write some layout tests to verify that we are doing the right thing now (and verify we weren&apos;t before)?

checking PopStateEvent.init throws and that IDBObjectStore.put doesn&apos;t (and a FIXME to verify that it does throw an onError) is probably enough

I took a glance and it looks good to me, but since I wrote a bunch of the original code, someone else should review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240053</commentid>
    <comment_count>6</comment_count>
      <attachid>59113</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-18 11:22:04 -0700</bug_when>
    <thetext>Comment on attachment 59113
Patch

Removing from review queue until there are layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240820</commentid>
    <comment_count>7</comment_count>
      <attachid>59274</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-21 12:50:41 -0700</bug_when>
    <thetext>Created attachment 59274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240821</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 12:54:35 -0700</bug_when>
    <thetext>Attachment 59274 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:181:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:207:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240822</commentid>
    <comment_count>9</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-21 12:56:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 59113 [details])
&gt; Removing from review queue until there are layout tests.

thanks Jeremy! added layout tests for both PopStateEvent and IDBObjectStore, another look please? feel free to add anyone else who should review this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240827</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-21 12:59:45 -0700</bug_when>
    <thetext>Attachment 59274 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3334542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240962</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 16:44:12 -0700</bug_when>
    <thetext>Attachment 59274 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3281563</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241197</commentid>
    <comment_count>12</comment_count>
      <attachid>59274</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 02:32:31 -0700</bug_when>
    <thetext>Comment on attachment 59274
Patch

ops, wait a bit, need to fix the JS generator.. will upload a new patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241224</commentid>
    <comment_count>13</comment_count>
      <attachid>59362</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 05:46:01 -0700</bug_when>
    <thetext>Created attachment 59362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241225</commentid>
    <comment_count>14</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 05:48:37 -0700</bug_when>
    <thetext>fixed the JS generator, and added a TestPODObj.idl to exercise the binding generator for interfaces with [PODType=] attribute.. another look please?

(In reply to comment #13)
&gt; Created an attachment (id=59362) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241227</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 05:50:10 -0700</bug_when>
    <thetext>Attachment 59362 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
our identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:116:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:122:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  webkit_dom_test_pod_obj_get_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:139:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:155:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:157:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:182:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:181:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:207:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 30 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241228</commentid>
    <comment_count>16</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-22 06:04:53 -0700</bug_when>
    <thetext>Attachment 59362 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3341605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241230</commentid>
    <comment_count>17</comment_count>
      <attachid>59362</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 06:07:15 -0700</bug_when>
    <thetext>Comment on attachment 59362
Patch

not there yet... :( let me fix the new issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241234</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 06:47:03 -0700</bug_when>
    <thetext>Attachment 59362 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3282546</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241394</commentid>
    <comment_count>19</comment_count>
      <attachid>59405</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 12:38:23 -0700</bug_when>
    <thetext>Created attachment 59405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241396</commentid>
    <comment_count>20</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-22 12:40:17 -0700</bug_when>
    <thetext>ok, I managed to compile Qt and run the tests locally, let&apos;s hope it makes the bots just as happy... if everything (except the style of autogenerated code) is green, would you mind another look please? thanks!

(In reply to comment #17)
&gt; (From update of attachment 59362 [details])
&gt; not there yet... :( let me fix the new issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241397</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 12:43:55 -0700</bug_when>
    <thetext>Attachment 59405 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
our identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:116:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:122:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  webkit_dom_test_pod_obj_get_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:139:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:155:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:157:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:182:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:181:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:207:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 30 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242516</commentid>
    <comment_count>22</comment_count>
      <attachid>59405</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-24 07:48:02 -0700</bug_when>
    <thetext>Comment on attachment 59405
Patch

WebCore/bindings/js/SerializedScriptValue.cpp:987
 +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));
RefPtr not PassRefPtr

WebCore/bindings/js/SerializedScriptValue.cpp:994
 +      return serializedValue;
.release() here.

WebCore/bindings/js/SerializedScriptValue.cpp:981
 +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = SerializedScriptValue::create(exec, value, &amp;ec);
Don&apos;t you need to set the dom exception here as well?
Also don&apos;t use PassRefPtr within a function.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1719
 +                                      push(@implContent, &quot;    podImp = &quot; . JSValueToNative($attribute-&gt;signature, &quot;value&quot;, 0) . &quot;;\n&quot;);
Use booleans.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1721
 +                                      push(@implContent, &quot;    podImp.set$implSetterFunctionName(&quot; . JSValueToNative($attribute-&gt;signature, &quot;value&quot;, 0) . &quot;);\n&quot;);
ditto (and elsewhere)

LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:1
 +  description(&quot;Test IndexedDB&apos;s openCursor.&quot;);
Update the description.

LayoutTests/storage/indexeddb/resources/shared.js:52
 +      testFailed(&quot;Success function called unexpectedly: (&quot; + event.code + &quot;) &quot; + event.message);
There will be no code/message.

LayoutTests/fast/loader/stateobjects/initpopstateevent-expected.txt:5
 +  PASS serialized script value threw an exception due to a cycle.
Put a message in the beginning saying it&apos;ll print &quot;COMPLETE&quot; when done and then add code to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243640</commentid>
    <comment_count>23</comment_count>
      <attachid>59888</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-28 03:24:31 -0700</bug_when>
    <thetext>Created attachment 59888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243641</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 03:26:46 -0700</bug_when>
    <thetext>Attachment 59888 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  webkit_dom_test_pod_obj_get_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:133:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:139:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:155:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:157:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:182:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:181:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:198:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:207:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:208:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 33 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243642</commentid>
    <comment_count>25</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-28 03:28:23 -0700</bug_when>
    <thetext>thanks jeremy! all comments addressed, plus one clarification below. another look please?

(In reply to comment #22)
&gt; (From update of attachment 59405 [details])
&gt; WebCore/bindings/js/SerializedScriptValue.cpp:987
&gt;  +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));
&gt; RefPtr not PassRefPtr

Done.

&gt; 
&gt; WebCore/bindings/js/SerializedScriptValue.cpp:994
&gt;  +      return serializedValue;
&gt; .release() here.

Done.

&gt; 
&gt; WebCore/bindings/js/SerializedScriptValue.cpp:981
&gt;  +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = SerializedScriptValue::create(exec, value, &amp;ec);
&gt; Don&apos;t you need to set the dom exception here as well?
Not really, this is just calling the factory below (which sets dom exception).

&gt; Also don&apos;t use PassRefPtr within a function.
Done.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1719
&gt;  +                                      push(@implContent, &quot;    podImp = &quot; . JSValueToNative($attribute-&gt;signature, &quot;value&quot;, 0) . &quot;;\n&quot;);
&gt; Use booleans.
Done.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1721
&gt;  +                                      push(@implContent, &quot;    podImp.set$implSetterFunctionName(&quot; . JSValueToNative($attribute-&gt;signature, &quot;value&quot;, 0) . &quot;);\n&quot;);
&gt; ditto (and elsewhere)
Done.


&gt; 
&gt; LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:1
&gt;  +  description(&quot;Test IndexedDB&apos;s openCursor.&quot;);
&gt; Update the description.
ouch, done.

&gt; 
&gt; LayoutTests/storage/indexeddb/resources/shared.js:52
&gt;  +      testFailed(&quot;Success function called unexpectedly: (&quot; + event.code + &quot;) &quot; + event.message);
&gt; There will be no code/message.
removed.

&gt; 
&gt; LayoutTests/fast/loader/stateobjects/initpopstateevent-expected.txt:5
&gt;  +  PASS serialized script value threw an exception due to a cycle.
&gt; Put a message in the beginning saying it&apos;ll print &quot;COMPLETE&quot; when done and then add code to do that.
done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244098</commentid>
    <comment_count>26</comment_count>
      <attachid>59888</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-28 22:19:38 -0700</bug_when>
    <thetext>Comment on attachment 59888
Patch

LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:8
 +      verifyErrorEvent(event);
Assert that we&apos;re raising a serialization error?  Or...make a fixme to do this, since it probably doesn&apos;t work right today.  :-)

LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:18
 +      var a = {};
Maybe make a function in the shared script for this?  createUnserializableValue()  ?

LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:23
 +          testFailed(&quot;objStore.add threw an unexpected exception: &quot; + err);
And then notify done + return?

WebCore/bindings/js/SerializedScriptValue.cpp:972
 +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));
This should be a RefPtr...later return serializedValue.release();

WebCore/bindings/js/SerializedScriptValue.cpp:990
 +      } else {
No {}&apos;s on the second half

WebCore/bindings/scripts/test/TestPODObj.idl:13
 +   * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
Just use a 2 clause license.

WebCore/bindings/scripts/test/TestPODObj.idl:2
 +   * Copyright (C) 2009 Google Inc. All rights reserved.
2010

WebCore/bindings/scripts/test/TestPODObj.idl:34
 +                   attribute [ConvertNullToNullString] DOMString stringAttr;
Not sure this indenting is necessary.

WebCore/bindings/scripts/test/TestObj.idl:65
 +          // Test various forms of SerializedScriptValue
period at end.

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:798
 +      RefPtr&lt;SerializedScriptValue&gt; serializedArg = SerializedScriptValue::create(exec, exec-&gt;argument(0), &amp;ec);
Hmm...do we need to generate bail out code for if ec is !0?

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:828
 +      JSC::JSValue result = imp-&gt;serializedValueReturnRaises(ec) ? imp-&gt;serializedValueReturnRaises(ec)-&gt;deserialize(exec, castedThis-&gt;globalObject()) : jsNull();
Hu?  This seems very not right.  :-)
At least make sure the bindings generator kills itself rather than emit stuff like this.

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:842
 +      JSC::JSValue result = imp-&gt;serializedValueReturnNoRaise() ? imp-&gt;serializedValueReturnNoRaise()-&gt;deserialize(exec, castedThis-&gt;globalObject()) : jsNull();
ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244349</commentid>
    <comment_count>27</comment_count>
      <attachid>60033</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-29 10:17:05 -0700</bug_when>
    <thetext>Created attachment 60033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244352</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 10:20:22 -0700</bug_when>
    <thetext>Attachment 60033 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
bject/WebKitDOMTestPODObj.cpp:145:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:161:  webkit_dom_test_pod_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:168:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:170:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:196:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:211:  Extra space between return and WEBKIT_DOM_TEST_POD_OBJ  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:212:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:204:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:210:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:220:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:221:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244361</commentid>
    <comment_count>29</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-29 10:29:59 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 59888 [details])
&gt; LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:8
&gt;  +      verifyErrorEvent(event);
&gt; Assert that we&apos;re raising a serialization error?  Or...make a fixme to do this, since it probably doesn&apos;t work right today.  :-)
yeah, there was a FIXME further down where I&apos;m short-circuiting this :)
but good point, added another one here.


&gt; 
&gt; LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:18
&gt;  +      var a = {};
&gt; Maybe make a function in the shared script for this?  createUnserializableValue()  ?
done.

&gt; 
&gt; LayoutTests/storage/indexeddb/script-tests/idb-add-serialized-script-value.js:23
&gt;  +          testFailed(&quot;objStore.add threw an unexpected exception: &quot; + err);
&gt; And then notify done + return?
done.

&gt; 
&gt; WebCore/bindings/js/SerializedScriptValue.cpp:972
&gt;  +      PassRefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));
&gt; This should be a RefPtr...later return serializedValue.release();
done.

&gt; 
&gt; WebCore/bindings/js/SerializedScriptValue.cpp:990
&gt;  +      } else {
&gt; No {}&apos;s on the second half
done.

&gt; 
&gt; WebCore/bindings/scripts/test/TestPODObj.idl:13
&gt;  +   * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; Just use a 2 clause license.
sigh, I&apos;ll keep this in mind when copying from somewhere else next time.. thanks!

&gt; 
&gt; WebCore/bindings/scripts/test/TestPODObj.idl:2
&gt;  +   * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; 2010
copy the whole license from somewhere else.

&gt; 
&gt; WebCore/bindings/scripts/test/TestPODObj.idl:34
&gt;  +                   attribute [ConvertNullToNullString] DOMString stringAttr;
&gt; Not sure this indenting is necessary.
removed.

&gt; 
&gt; WebCore/bindings/scripts/test/TestObj.idl:65
&gt;  +          // Test various forms of SerializedScriptValue
&gt; period at end.
done.

&gt; 
&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:798
&gt;  +      RefPtr&lt;SerializedScriptValue&gt; serializedArg = SerializedScriptValue::create(exec, exec-&gt;argument(0), &amp;ec);
&gt; Hmm...do we need to generate bail out code for if ec is !0?
no idea.. :( won&apos;t the setDOMException() below take care of it?

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:828
&gt;  +      JSC::JSValue result = imp-&gt;serializedValueReturnRaises(ec) ? imp-&gt;serializedValueReturnRaises(ec)-&gt;deserialize(exec, castedThis-&gt;globalObject()) : jsNull();
&gt; Hu?  This seems very not right.  :-)
&gt; At least make sure the bindings generator kills itself rather than emit stuff like this.

fixed. getting imp-&gt;serializedValueReturn[Raises|NoRaise]() as a temp, and then testing it (plus ec, if available), and returning jsNull() instead.
note that this code would call the function twice, but wasn&apos;t intrinsically wrong AFAICT, since the function that returns the serializedValue should be const anyway..

oh, the joys of perl. :) would please double check the generator bits as well? thanks!

&gt; 
&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:842
&gt;  +      JSC::JSValue result = imp-&gt;serializedValueReturnNoRaise() ? imp-&gt;serializedValueReturnNoRaise()-&gt;deserialize(exec, castedThis-&gt;globalObject()) : jsNull();
&gt; ditto

fixed as above..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244493</commentid>
    <comment_count>30</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-29 14:45:01 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:798
&gt; &gt;  +      RefPtr&lt;SerializedScriptValue&gt; serializedArg = SerializedScriptValue::create(exec, exec-&gt;argument(0), &amp;ec);
&gt; &gt; Hmm...do we need to generate bail out code for if ec is !0?
&gt; no idea.. :( won&apos;t the setDOMException() below take care of it?

Well, we don&apos;t want to run the webCore method unless we haven&apos;t hit an error at this point.  See what Chromium does.  (Not sure if this is what you did or not...won&apos;t have time to look until tonight.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244737</commentid>
    <comment_count>31</comment_count>
      <attachid>60111</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-30 05:32:54 -0700</bug_when>
    <thetext>Created attachment 60111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244738</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-30 05:34:19 -0700</bug_when>
    <thetext>Attachment 60111 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
bject/WebKitDOMTestPODObj.cpp:145:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:161:  webkit_dom_test_pod_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:168:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:170:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:196:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:211:  Extra space between return and WEBKIT_DOM_TEST_POD_OBJ  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:212:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:204:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:210:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:220:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:221:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244739</commentid>
    <comment_count>33</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-30 05:37:00 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; &gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:798
&gt; &gt; &gt;  +      RefPtr&lt;SerializedScriptValue&gt; serializedArg = SerializedScriptValue::create(exec, exec-&gt;argument(0), &amp;ec);
&gt; &gt; &gt; Hmm...do we need to generate bail out code for if ec is !0?
&gt; &gt; no idea.. :( won&apos;t the setDOMException() below take care of it?
&gt; 
&gt; Well, we don&apos;t want to run the webCore method unless we haven&apos;t hit an error at this point.  See what Chromium does.  (Not sure if this is what you did or not...won&apos;t have time to look until tonight.)

got it. the generated code now sets the exception code and returns immediately on exception, without calling the webcore method in the latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245162</commentid>
    <comment_count>34</comment_count>
      <attachid>60111</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 00:40:05 -0700</bug_when>
    <thetext>Comment on attachment 60111
Patch

WebCore/bindings/js/SerializedScriptValue.h:179
 +          static PassRefPtr&lt;SerializedScriptValue&gt; createWithoutThrowing(JSC::ExecState* exec, JSC::JSValue value);
don&apos;t need exec or value here...or below

WebCore/bindings/js/SerializedScriptValue.h:183
 +          static PassRefPtr&lt;SerializedScriptValue&gt; create(JSC::ExecState* exec, JSC::JSValue value, ExceptionCode* ec);
don&apos;t need ec

WebCore/bindings/scripts/CodeGeneratorJS.pm:2234
 +          push(@implContent, &quot;\n&quot; . NativeSerializedScriptValueToJSValue($function-&gt;signature, $functionString, @{$function-&gt;raisesExceptions})) if $function-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;;
what about any?  be sure to test for this if it&apos;s true that you should have had &quot;any&quot;?

WebCore/bindings/scripts/CodeGeneratorJS.pm:2473
 +      if ($type eq &quot;SerializedScriptValue&quot; or $type eq &quot;any&quot;) {
Do you actually need this?  Can&apos;t you assume it?

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:832
 +      SerializedScriptValue* serializedScriptValue = imp-&gt;serializedValueReturnRaises(ec);
Wouldn&apos;t this need to be a PassRefPtr?

Does anything even use this code yet?  If not, then maybe we shouldn&apos;t test for it and/or worry about it.

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:833
 +      JSC::JSValue result = serializedScriptValue &amp;&amp; !ec ? serializedScriptValue-&gt;deserialized() : jsNull();
if ec is set, we should return undefined.  Otherwise null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245321</commentid>
    <comment_count>35</comment_count>
      <attachid>60241</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-01 06:56:10 -0700</bug_when>
    <thetext>Created attachment 60241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245322</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 06:58:04 -0700</bug_when>
    <thetext>Attachment 60241 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
bject/WebKitDOMTestPODObj.cpp:145:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:161:  webkit_dom_test_pod_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:168:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:170:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:196:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:211:  Extra space between return and WEBKIT_DOM_TEST_POD_OBJ  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:212:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:192:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:204:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:210:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:220:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:221:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245323</commentid>
    <comment_count>37</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-01 07:01:53 -0700</bug_when>
    <thetext>thanks jeremy! another look please?

(In reply to comment #34)
&gt; (From update of attachment 60111 [details])
&gt; WebCore/bindings/js/SerializedScriptValue.h:179
&gt;  +          static PassRefPtr&lt;SerializedScriptValue&gt; createWithoutThrowing(JSC::ExecState* exec, JSC::JSValue value);
&gt; don&apos;t need exec or value here...or below
done

&gt; 
&gt; WebCore/bindings/js/SerializedScriptValue.h:183
&gt;  +          static PassRefPtr&lt;SerializedScriptValue&gt; create(JSC::ExecState* exec, JSC::JSValue value, ExceptionCode* ec);
&gt; don&apos;t need ec
done.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:2234
&gt;  +          push(@implContent, &quot;\n&quot; . NativeSerializedScriptValueToJSValue($function-&gt;signature, $functionString, @{$function-&gt;raisesExceptions})) if $function-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;;
&gt; what about any?  be sure to test for this if it&apos;s true that you should have had &quot;any&quot;?
right, testing for both SerializedScriptValue and any.

&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:2473
&gt;  +      if ($type eq &quot;SerializedScriptValue&quot; or $type eq &quot;any&quot;) {
&gt; Do you actually need this?  Can&apos;t you assume it?
good point.. changed so that the caller tests it.

&gt; 
&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:832
&gt;  +      SerializedScriptValue* serializedScriptValue = imp-&gt;serializedValueReturnRaises(ec);
&gt; Wouldn&apos;t this need to be a PassRefPtr?
done.

&gt; 
&gt; Does anything even use this code yet?  If not, then maybe we shouldn&apos;t test for it and/or worry about it.
well, I think it&apos;s better to have it now rather than worry about it later? as in, as far as i can tell it&apos;s a valid case and we want to make sure the generator will &quot;do the right thing&quot;?

&gt; 
&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:833
&gt;  +      JSC::JSValue result = serializedScriptValue &amp;&amp; !ec ? serializedScriptValue-&gt;deserialized() : jsNull();
&gt; if ec is set, we should return undefined.  Otherwise null.
done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245326</commentid>
    <comment_count>38</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 07:14:38 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; Does anything even use this code yet?  If not, then maybe we shouldn&apos;t test for it and/or worry about it.
&gt; well, I think it&apos;s better to have it now rather than worry about it later? as in, as far as i can tell it&apos;s a valid case and we want to make sure the generator will &quot;do the right thing&quot;?

For better or for worse, what the generator supports is generally built up on demand.  This means that often when you add something to an IDL you have to add support into the generators.

Will look at the patch tomorrow.  Sorry for these long cycles, but it&apos;s midnight here and I&apos;m pretty tired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245788</commentid>
    <comment_count>39</comment_count>
      <attachid>60241</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-02 00:33:12 -0700</bug_when>
    <thetext>Comment on attachment 60241
Patch

WebCore/bindings/scripts/test/JS/JSTestObj.cpp:833
 +      JSC::JSValue result =  ec ? jsUndefined() :  serializedScriptValue ? serializedScriptValue-&gt;deserialized() : jsNull();
Personally, I think this is cleaner:

if (ec) {
    setDOMException
    return jsUndefined;
}
return serializedScriptVlaue-&gt;deserilized()

WebCore/bindings/scripts/CodeGeneratorJS.pm:2475
 +      $ret = $ret . &quot; serializedScriptValue ? serializedScriptValue-&gt;deserialized() : jsNull();\n&quot;;
you get double spaces between a few items here...not that big of a deal tho



r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257101</commentid>
    <comment_count>40</comment_count>
      <attachid>62810</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-28 04:29:47 -0700</bug_when>
    <thetext>Created attachment 62810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257102</commentid>
    <comment_count>41</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-28 04:31:02 -0700</bug_when>
    <thetext>sorry about the delay, this one went under my radar. both comments addressed, another look please?

(In reply to comment #39)
&gt; (From update of attachment 60241 [details])
&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:833
&gt;  +      JSC::JSValue result =  ec ? jsUndefined() :  serializedScriptValue ? serializedScriptValue-&gt;deserialized() : jsNull();
&gt; Personally, I think this is cleaner:
&gt; 
&gt; if (ec) {
&gt;     setDOMException
&gt;     return jsUndefined;
&gt; }
&gt; return serializedScriptVlaue-&gt;deserilized()
&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:2475
&gt;  +      $ret = $ret . &quot; serializedScriptValue ? serializedScriptValue-&gt;deserialized() : jsNull();\n&quot;;
&gt; you get double spaces between a few items here...not that big of a deal tho
&gt; 
&gt; 
&gt; 
&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257106</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-28 04:37:46 -0700</bug_when>
    <thetext>Attachment 62810 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
bject/WebKitDOMTestPODObj.cpp:145:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:161:  webkit_dom_test_pod_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:168:  webkit_dom_test_pod_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:170:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:196:  webkit_dom_test_pod_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:211:  Extra space between return and WEBKIT_DOM_TEST_POD_OBJ  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.cpp:212:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:194:  converted_serialized_arg is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:206:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:212:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:222:  g_res is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:223:  Extra space between WebKitDOMSerializedScriptValue* and res  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:21:  #ifndef header guard has wrong style, please use: WebKitDOMTestPODObjPrivate_h  [build/header_guard] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestPODObjPrivate.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 36 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333293</commentid>
    <comment_count>43</comment_count>
      <attachid>62810</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-12 14:19:50 -0800</bug_when>
    <thetext>Comment on attachment 62810
Patch

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

Looks reasonable.  Some cleanup mentioned below.  The only serious problem is what looks like a memory leak.

&gt; WebCore/bindings/js/SerializedScriptValue.cpp:977
&gt; +    RefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));

Isn&apos;t this a memory leak?  We need to call adoptRef, right?

&gt; WebCore/bindings/js/SerializedScriptValue.cpp:991
&gt; +    RefPtr&lt;SerializedScriptValue&gt; serializedValue = new SerializedScriptValue(SerializedScriptValueData::serialize(exec, value));

Same here.  adoptRef?

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:2491
&gt; +    $ret = $ret . &quot;    PassRefPtr&lt;SerializedScriptValue&gt; serializedScriptValue = $value;\n&quot;;

We don&apos;t usually store PassRefPtrs on the stack.  We usually us RefPtr and then release.

&gt; WebCore/bindings/scripts/test/V8/V8TestObj.cpp:610
&gt; +    if (UNLIKELY(ec))
&gt; +        goto fail;

That&apos;s pretty nasty code.  Also, the indent is wrong here.

&gt; WebCore/bindings/scripts/test/V8/V8TestObj.cpp:637
&gt; +    {
&gt; +    RefPtr&lt;SerializedScriptValue&gt; result = imp-&gt;serializedValueReturnRaises(ec);
&gt; +    if (UNLIKELY(ec))
&gt; +        goto fail;
&gt; +    return result.release()-&gt;deserialize();
&gt; +    }

Another bad indent.  Why do we need these { }  brackets?

&gt; WebCore/bindings/v8/SerializedScriptValue.cpp:1031
&gt; +        didThrow = true;

Why are we using didThrow instead of the ec, like we usually do?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59113</attachid>
            <date>2010-06-18 08:36:24 -0700</date>
            <delta_ts>2010-06-21 12:50:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100618163622.patch</filename>
            <type>text/plain</type>
            <size>37975</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGMxM2M1OGJhM2QyMTkzODQ4Y2JjZDZlZmRiNjZhMzdmMDA3ZDFiYi4uMzY5YjhiYTQ2NjY4YWRk
Zjg0MTE0MjlmN2ExMzY2ZDM1YzYwNDA1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMC0wNi0xOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZvciB0aHJvd2luZyBiZWhh
dmlvciBvZiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBJREwu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDgzNQor
CisgICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0ZWQgYmluZGluZ3Mg
d2lsbCBlaXRoZXIgdGhyb3cgYW4gZXhjZXB0aW9uIG9yIGJlIHNpbGVudAorICAgICAgICB3aGVu
IGNyZWF0aW5nIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGJhc2VkIG9uIHRoZSBjb3JyZXNwb25k
aW5nIElETCBkZWZpbml0aW9uLgorICAgICAgICBUZXN0czogV2ViS2l0VG9vbHMvU2NyaXB0cy9y
dW4tYmluZGluZ3MtdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouY3BwOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmFp
c2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UpOgor
ICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlz
ZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVy
bl9ub19yYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFs
aXplZFZhbHVlUmFpc2VzOl0pOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1
ZU5vUmFpc2U6XSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzXSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9S
YWlzZV0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmFpc2VzQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVOb1Jh
aXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxp
emVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2RDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdp
dGhvdXRUaHJvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnNlcmlhbGl6YXRpb25FcnJvcik6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQpOgorICAg
ICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50Lmg6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQu
aWRsOgorCiAyMDEwLTA2LTE4ICBBbnRvbiBNdWhpbiAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggM2NmNjIzOTA1YzI5MTNkNTJhMmYxZTBl
Y2Y1ZDM5OTZmMGZmNzFmZC4uMzI2M2ViZjZkYjUxMDhiM2VjMzgzYjNlNzkyN2QyYjUxZDdiNjcz
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0x
NzI3LDEzICsxNzI3LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUgZXEgImZs
b2F0IikgeyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcCA9ICIgLiBK
U1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHBvZEltcCA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAi
dmFsdWUiLCBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIC4gIjtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9kSW1wLnNldCRpbXBsU2V0
dGVyRnVuY3Rpb25OYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAidmFsdWUiKSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5h
bWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsIEB7
JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpcyk7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSwgInZhbHVlIiwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmli
dXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJSZWZsZWN0In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRyZWZsZWN0
VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVj
dFVSTCJ9OwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikg
LiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1l
bnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBh
cmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiLCBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30p
IC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRl
ciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRF
WF9TSVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQg
dGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBp
cyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApAQCAtMjMxNiw2ICsyMzE2LDcgQEAgc3Vi
IEpTVmFsdWVUb05hdGl2ZQogewogICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKICAgICBteSAk
dmFsdWUgPSBzaGlmdDsKKyAgICBteSAkcmFpc2VzID0gc2hpZnQ7CiAKICAgICBteSAkdHlwZSA9
ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKIApAQCAtMjM0
MSw3ICsyMzQyLDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogCiAgICAgaWYgKCR0eXBlIGVxICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAgICRpbXBs
SW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwotICAgICAgICByZXR1cm4g
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICBy
ZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSwgJmVjKSIg
aWYgKCRyYWlzZXMpOworICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlV2l0aG91dFRocm93aW5nKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KIAogICAgICRpbXBsSW5j
bHVkZXN7IkZsb2F0UG9pbnQuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiU1ZHUG9pbnQiOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYzY0N2EzYmFmOTg3
YmZmMGRjMTA4MTk1Y2RiODUxMzQ0MmE5OGVmNS4uYTFmMjllMzhhYThkNDc5NTkyYmQ4M2VmMWEy
ZjU0ZTU5YWQ5M2U0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0xMjI0LDE3ICsxMjI0LDE5IEBAIEVORAogCiAgICAgICAgIGlmICgkcGFyYW1l
dGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cg
PSBmYWxzZTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBi
b29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNlO1xuIikgaWYgKCRyYWlzZXNFeGNl
cHRpb25zKTsKICAgICAgICAgfSBlbHNpZiAoQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBh
cmFtZXRlcikpIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9v
bCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJh
bWV0ZXIsICRwYXJhbUluZGV4KSAuICIgJHBhcmFtZXRlck5hbWUgPSAiKTsKIAotICAgICAgICBp
ZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkcmFp
c2VzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAke3BhcmFtZXRl
ck5hbWV9RGlkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4i
KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlIikgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKGFyZ3NbJHBhcmFtSW5kZXhdKTtc
biIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNUeXBl
Q2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1
bmRlZikgLiAiO1xuIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5jcHAKaW5kZXggMGEzNTU1MDhkMzFlMTdlZGZiODA1YzlmNjQ2N2Uy
YzdhMTgyMDMzYi4uNzg2NjIyMjljMGQzNTNkMDYxNjEyNmU4Njk2ZGIwZTcxNmY4ZjFiMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmou
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2Jq
LmNwcApAQCAtMzg5LDEyICszODksNDEgQEAgV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpt
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZShj
b25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNl
cmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCiB7
CiAgICAgaWYgKCFpbXBsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGltcGwoKS0+c2VyaWFs
aXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6
OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlUmFpc2VzKFdlYkNvcmU6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSksIGVj
KTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+
KGVjKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZShj
b25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFs
aXplZEFyZykpKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRW
YWx1ZVJldHVyblJhaXNlcygpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBX
ZWJET01TdHJpbmcoKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFdlYkRPTVN0cmluZyByZXN1bHQgPSB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPnNlcmlh
bGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpKTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRp
Y19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFp
c2UoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7
CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5zZXJpYWxpemVkVmFs
dWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRo
RXhjZXB0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdE9iai5oCmluZGV4IGNhYTQ2NDY3NDM3MDljYTJkMmE2NjBiN2QwMjVhNjlkMGIzZmJj
MTQuLjEzODMxM2M0NjhjNTEzOWYyNzg0YTAzZGQ0MWNiNGU2ZjhlNzc2YTUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtODIs
NyArODIsMTAgQEAgcHVibGljOgogICAgIFdlYkRPTVRlc3RPYmogb2JqTWV0aG9kV2l0aEFyZ3Mo
aW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RP
YmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdz
KGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhj
b25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsK
LSAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRB
cmcpOworICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGNvbnN0IFdlYkRPTVN0cmluZyYg
c2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNvbnN0IFdl
YkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgV2ViRE9NU3RyaW5nIHNlcmlhbGl6ZWRW
YWx1ZVJldHVyblJhaXNlcygpOworICAgIFdlYkRPTVN0cmluZyBzZXJpYWxpemVkVmFsdWVSZXR1
cm5Ob1JhaXNlKCk7CiAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7CiAgICAgdm9pZCBj
dXN0b21NZXRob2QoKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZFdpdGhBcmdzKGludCBpbnRBcmcs
IGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggOTVmOTE3MDBiMGY2MWY5OWMxZjJkMzBkNmM4NDRm
ZjVhOWNjMGM0OC4uY2E1NmIxNjA2NGYxODBjY2U0NzAzNGY5NzkyMDczZTg4Nzc1Y2Q3YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5o
IgogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKQEAgLTE1NCwxNCArMTU1LDU3IEBAIHdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0
T2JqKiBzCiB9CiAKIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBz
ZXJpYWxpemVkX2FyZykKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yYWlz
ZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiAgc2VyaWFsaXplZF9hcmcsIEdFcnJvciAqKmVycm9yKQogewogICAgIGdfcmV0dXJuX2lmX2Zh
aWwgKHNlbGYpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwgKHNlcmlhbGl6ZWRfYXJnKTsKICAgICBXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBfZ19zZXJpYWxpemVkX2FyZyA9IFdlYktpdDo6Y29y
ZShzZXJpYWxpemVkX2FyZyk7CiAgICAgZ19yZXR1cm5faWZfZmFpbCAoX2dfc2VyaWFsaXplZF9h
cmcpOwotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShfZ19zZXJpYWxpemVkX2FyZyk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2VyaWFsaXplZFZhbHVl
UmFpc2VzKF9nX3NlcmlhbGl6ZWRfYXJnLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNvcmU6
OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwgKHNlcmlhbGl6ZWRfYXJn
KTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBfZ19zZXJpYWxpemVkX2Fy
ZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7CisgICAgZ19yZXR1cm5faWZfZmFpbCAo
X2dfc2VyaWFsaXplZF9hcmcpOworICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoX2df
c2VyaWFsaXplZF9hcmcpOworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAor
d2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKHNlbGYsIDApOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOworICAgICAg
ICBXZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiA+KFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CisgICAgcmV0dXJu
IHJlczsKK30KKworV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAKK3dlYmtpdF9kb21f
dGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRl
bS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKTsKKyAgICBXZWJLaXRET01TZXJpYWxp
emVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01TZXJpYWxpemVkU2Ny
aXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOwog
fQogCiB2b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDMwZjY0MTRlYjE3N2NlMmRmNDg0MWEyMjBk
NzY5MWFkOGNmZDUwNDEuLmUwNWY0YzQ2N2I3MmIwNzhiNGVlMDNmODk1OWE5NTBjZmNhN2VjYzIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCkBAIC03MSw3ICs3MSwxNiBAQCBXRUJLSVRfQVBJIFdlYktpdERP
TVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9h
cmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2NoYXIqICBzdHJfYXJnLCBX
ZWJLaXRET01UZXN0T2JqKiAgb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpOwogCiBXRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2Fy
Zyk7Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmFpc2VzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6
ZWRfYXJnLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX25v
X3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIEdFcnJvciAqKmVycm9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCmluZGV4IDE0ZmI1MWFkZmZjZjA5YjUwNTZmMWM2ZjY5YmNkNGY1NjI0
NTMzZjIuLmE2OWQ4M2UzNWJiY2IyY2NkNjY3NDMzOWQzNWFiM2VhNjY0ODhkYmUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTM0LDcg
KzEzNCw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRP
UihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFs
dWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzNdID0KIHsKICAgICB7ICJ2b2lkTWV0
aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCksIChpbnRwdHJf
dCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInZvaWRNZXRob2RXaXRoQXJncyIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyksIChpbnRwdHJf
dCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTQ0LDcgKzE0NCwxMCBAQCBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzBdID0KICAg
ICB7ICJvYmpNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9i
ak1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAg
eyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInNlcmlhbGl6
ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSks
IChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1
ZVJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJh
aXNlcyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWVOb1JhaXNlKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAi
c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJB
VE9SKDApIH0sCisgICAgeyAic2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIsIERvbnREZWxl
dGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpLCAoaW50
cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoRXhjZXB0aW9u
IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbiksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZCIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3Qp
MyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE2OSw3ICsxNzIsNyBAQCBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzBdID0KIH07CiAK
ICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hU
YWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgNjksIDYzLCBKU1Rlc3RPYmpQcm90b3R5
cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzEsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUs
IDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC02MjUsMTkgKzYyOCw2MiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kVGhhdFJlcXVpcmVzQWxsQXJncwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmFp
c2VzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpz
X2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlz
VmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJmVjKTsKKworICAgIGltcC0+c2VyaWFsaXplZFZh
bHVlUmFpc2VzKHNlcmlhbGl6ZWRBcmcsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWVOb1JhaXNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0
cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRo
b3V0VGhyb3dpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogCi0gICAgaW1wLT5zZXJpYWxp
emVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNl
KHNlcmlhbGl6ZWRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gaW1wLT5zZXJp
YWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpID8gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXMoZWMpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkg
OiBqc051bGwoKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2Uo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gaW1wLT5zZXJpYWxpemVk
VmFsdWVSZXR1cm5Ob1JhaXNlKCkgPyBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2Uo
KS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpIDoganNOdWxs
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7CkBAIC0xMDE2LDcgKzEwNjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChF
eGVjU3RhdAogICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMyhleGVjKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpCiAg
ICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0
KGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYykp
OworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogfQogCiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdE9iaiogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaAppbmRleCAzZDE5MGVjYTViNTgwZDJiYmRkMmIzZGFjZDRjYjk2NjRlNDYwOTcx
Li5hZDUwNTZkZDZkYmE5NWVhMzI1ZDE4ODA1ZDkwOGYzZGJlYjZlMjQ5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtOTQsNyArOTQsMTAgQEAg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kKEpTQzo6RXhlY1MKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhlY1N0YXRlKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJh
aXNlcyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZShKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKEpTQzo6RXhlY1N0YXRlKik7CiBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2Qo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRl
Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
CmluZGV4IDQ1OTdmN2ZkZDkwNzY0OWQ3NGE4YWM0NDkzZGYxMmNjZWNiYjFjZmEuLjg3NzdlMjky
Mzg2MDFlMWFjZGI3MDEzMGZkMGVkYWRhNjk2MDEzNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCkBAIC04MCw3ICs4MCwxMCBAQAogLSAo
RE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaW50QXJnIHN0ckFyZzooTlNTdHJp
bmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAq
KW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9N
VGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxB
cmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpB
cmc7Ci0tICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwor
LSAodm9pZClzZXJpYWxpemVkVmFsdWVSYWlzZXM6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsK
Ky0gKHZvaWQpc2VyaWFsaXplZFZhbHVlTm9SYWlzZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJn
OworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXM7CistIChOU1N0cmlu
ZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2U7CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNl
cHRpb247CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFy
Z3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RP
YmogKilvYmpBcmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmoubW0KaW5kZXggOGIyMzVhOGViZjM1MmQ1MmRiOWY1ZjEzYjY3OTkyOTQ5ZmUwZDVl
OS4uZjlhMjU0NmYyMDc1ZDM4YzQ2MDEzZDZkMzVhY2IxYWI5NmYzNGE0NSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzI5LDEw
ICszMjksMzMgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tICh2b2lkKXNlcmlhbGl6ZWRW
YWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnCistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJh
aXNlczooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFy
ZykpKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBJTVBMLT5zZXJp
YWxpemVkVmFsdWVSYWlzZXMoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
V2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSwgZWMpOworICAgIFdlYkNvcmU6OnJhaXNl
T25ET01FcnJvcihlYyk7Cit9CisKKy0gKHZvaWQpc2VyaWFsaXplZFZhbHVlTm9SYWlzZTooTlNT
dHJpbmcgKilzZXJpYWxpemVkQXJnCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIElNUEwtPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcp
KSk7Cit9CisKKy0gKE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIE5TU3RyaW5nICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQ
dHIoSU1QTC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVjKSkpOworICAgIFdlYkNvcmU6
OnJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNTdHJp
bmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+
c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKSk7CiB9CiAKIC0gKHZvaWQpbWV0aG9kV2l0
aEV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRl
eCA2ZjVkOTZiY2E5MjM4YzBjZWI2NjcyMzRkNDdmMjA5OTdhNjg0NzcwLi40MjQwMTE5ZWNiYTBm
YTA0ODkxZGU0ZTg2ODYxMGMwMmFlNDg1M2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0T2JqLmlkbApAQCAtNTIsNyArNTIsMTEgQEAgbW9kdWxlIHRlc3QgewogICAgICAg
ICBbUmVxdWlyZXNBbGxBcmd1bWVudHM9UmFpc2VdIFRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVz
QWxsQXJnc0FuZFRocm93cyhpbiBET01TdHJpbmcgc3RyQXJnLCBpbiBUZXN0T2JqIG9iakFyZykK
ICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAgIHZvaWQgc2VyaWFs
aXplZFZhbHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAg
ICAgLy8gVGVzdCB2YXJpb3VzIGZvcm1zIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQorICAgICAg
ICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2Vy
aWFsaXplZEFyZykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2VyaWFsaXpl
ZFZhbHVlTm9SYWlzZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZEFyZyk7Cisg
ICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMo
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNl
cmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKTsKIAogICAgICAgICAvLyBFeGNlcHRpb25zCiAg
ICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01FeGNlcHRpb24p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5k
ZXggOGNkYjJhNzU3ZWJmMzcxM2U0ZDExZDZjY2UxY2M1ZjkyZWNhODFmMy4uYzZjNjZjZThjYWU2
NjgyYmUwZTEwMzJhYzIyOTllNDcwYzk5MTU1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC00MDQsMTggKzQwNCw1OCBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3ND
YWxsYmFjayhjb25zdCB2OAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0K
IAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
ZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7CisgICAgSU5D
X1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyA9IGZh
bHNlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVkQXJnRGlkVGhy
b3cpOwogICAgIGlmIChzZXJpYWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci0gICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7Cisg
ICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIGlm
IChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5zZXJpYWxpemVkVmFsdWVOb1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0
VGhyb3dpbmcoYXJnc1swXSk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKHNlcmlh
bGl6ZWRBcmcpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0g
aW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChVTkxJS0VMWShl
YykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKS0+ZGVz
ZXJpYWxpemUoKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbXAtPnNlcmlh
bGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdp
dGhFeGNlcHRpb24iKTsKQEAgLTcxNSw3ICs3NTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG92ZXJsb2FkZWRNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogICAgICAgICByZXR1cm4gb3ZlcmxvYWRlZE1ldGhvZDNDYWxsYmFjayhhcmdzKTsKICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA9PSAxKQogICAgICAgICByZXR1cm4gb3ZlcmxvYWRlZE1ldGhvZDRD
YWxsYmFjayhhcmdzKTsKLSAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
CisgICAgVjhQcm94eTo6dGhyb3dUeXBlRXJyb3IoKTsKICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKIH0KIApAQCAtNzcxLDcgKzgxMSwxMCBAQCBzdGF0aWMgY29uc3QgQmF0
Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7InZvaWRNZXRob2QiLCBU
ZXN0T2JqSW50ZXJuYWw6OnZvaWRNZXRob2RDYWxsYmFja30sCiAgICAgeyJpbnRNZXRob2QiLCBU
ZXN0T2JqSW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrfSwKICAgICB7Im9iak1ldGhvZCIsIFRl
c3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAotICAgIHsic2VyaWFsaXplZFZhbHVl
IiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCisgICAgeyJzZXJp
YWxpemVkVmFsdWVSYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNl
c0NhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiLCBUZXN0T2JqSW50ZXJu
YWw6OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2VDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFs
dWVSZXR1cm5SYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlc0NhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiLCBUZXN0
T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxsYmFja30sCiAgICAg
eyJtZXRob2RXaXRoRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRo
b2RDYWxsYmFja30sCiAgICAgeyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9iajo6Y3Vz
dG9tTWV0aG9kV2l0aEFyZ3NDYWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOGU5MTkyMDkwYzY0NmU1YjVhNGM0NTI1MzA1ODcz
NzZlMzMzZGQ5Yi4uZDdhNTBjOTI5MDAyZDhhOGVlYzBmMjcxZDg0N2MxZjI1OTg0MGJkYiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTAy
MywxMyArMTAyMywyNCBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVB
bmRTZXRQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iagogCiBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdykKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsKKyAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzY3JpcHRWYWx1ZSA9IGFkb3B0UmVmKG5ldyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUpKTsKKyAgICBpZiAoc2NyaXB0VmFsdWUtPm1fZGF0
YS5pc051bGwoKSkgeworICAgICAgICB0aHJvd0Vycm9yKE5PVF9TVVBQT1JURURfRVJSKTsKKyAg
ICAgICAgZGlkVGhyb3cgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBkaWRUaHJvdyA9IGZh
bHNlOworICAgIHJldHVybiBzY3JpcHRWYWx1ZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7CiAgICAgYm9vbCBkaWRUaHJvdzsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsK
KyAgICByZXR1cm4gY3JlYXRlKHZhbHVlLCBkaWRUaHJvdyk7Cit9CisKK1Bhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRU
aHJvd2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUpKTsKIH0KIAogUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmUoU3RyaW5nIGRhdGEpCkBAIC0xMDU0LDIxICsxMDY1LDEyIEBAIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnJlbGVhc2UoKQogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSgpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7Ci19Ci0KLVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCi17Ci0gICAgZGlkVGhyb3cgPSBmYWxzZTsKICAgICBXcml0
ZXIgd3JpdGVyOwogICAgIFNlcmlhbGl6ZXIgc2VyaWFsaXplcih3cml0ZXIpOwotICAgIGlmICgh
c2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoTk9UX1NV
UFBPUlRFRF9FUlIpOwotICAgICAgICBkaWRUaHJvdyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7Cisg
ICAgaWYgKHNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSkKKyAgICAgICAgbV9kYXRhID0gU3Ry
aW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CiB9CiAKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2Rl
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMzcx
MGI1YTIzMTA1YTZmMTY5MzE2NTBlYTUwOGIwMmI0N2U5ZTBkMi4uYjVmNWY1NGRkOTNkZDg4ZmYy
NTQ0NDVlNTZhNzk1YTc0Y2JlOGM4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICAvLyBWOC4g
V2hlbiBzZXJpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHxkaWRUaHJvd3wgaXMgZmFsc2UuCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdyk7CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZVdp
dGhvdXRUaHJvd2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nIGRh
dGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRl
KFN0cmluZyBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGNyZWF0ZSgpOwpAQCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9X
aXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBib29sIHNlcmlhbGl6
YXRpb25FcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc051bGwoKTsgfQorCiAgICAgLy8g
RGVzZXJpYWxpemVzIHRoZSB2YWx1ZSAoaW4gdGhlIGN1cnJlbnQgY29udGV4dCkuIFJldHVybnMg
YSBudWxsIHZhbHVlIGluCiAgICAgLy8gY2FzZSBvZiBmYWlsdXJlLgogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBkZXNlcmlhbGl6ZSgpOwpAQCAtNjgsNyArNzEsNyBAQCBwcml2YXRlOgogICAg
IH07CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKLSAgICBTZXJpYWxpemVkU2NyaXB0
VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBib29sJiBkaWRUaHJvdyk7CisgICAgZXhwbGlj
aXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKTsKIAog
ICAgIFN0cmluZyBtX2RhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50
LmNwcCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IGI5YWQ4NjJiYzAyOTM3
YzQyOWJmMjM0NGE0M2E5OGFjNzlkMTA5YzguLjc5MmZiMzRkZmI2MDU0NjNkMTMyYjQ3ZGMzNzEx
MzhiMTA0YzRjYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCisr
KyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCkBAIC0zNyw4ICszNyw5IEBAIFBvcFN0
YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHN0YXRlT2JqZWN0KQogewogfQogICAgIAotdm9pZCBQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3Rh
dGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVjdCkK
K3ZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAg
IEFTU0VSVF9VTlVTRUQoZWMsIHRydWUpOwogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaCBi
L1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAppbmRleCAyZmI4ZDA2ODViZjBlMGQ1MjJlNDZi
MDhiOGFiYWY3MjYzYTRiNDIyLi43MTFmMGI1ZGFhOWI5NzAwOWI5NjFjMWE5YmNmN2Y2NTIwMjhm
Njc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgKKysrIGIvV2ViQ29y
ZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHN0YXRlT2JqZWN0KSk7CiAgICAgfQog
Ci0gICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPik7CisgICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIGJvb2wgaXNQb3BTdGF0
ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0KCk7IH0gICAgCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBiL1dlYkNvcmUvZG9tL1Bv
cFN0YXRlRXZlbnQuaWRsCmluZGV4IGFkYzkwNzRlYzRmZWIwNzAwODc2NzNmNmFjODhjMDMwYTU4
NzI0ZDIuLjZjODY2NTdlMDdiZDA5YTY1ODVmOWMyZjU4MDBlYjMyMGM4MTYzZjMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuaWRsCkBAIC0yOSw5ICsyOSw5IEBAIG1vZHVsZSBldmVudHMgewogI2lmICFkZWZp
bmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIGludGVyZmFjZSBQb3BTdGF0
ZUV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGluIERPTVN0
cmluZyB0eXBlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFu
IGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVh
biBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVh
biBjYW5jZWxhYmxlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgc3RhdGVBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdGF0ZUFyZykgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0
YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59274</attachid>
            <date>2010-06-21 12:50:41 -0700</date>
            <delta_ts>2010-06-22 05:45:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100621205037.patch</filename>
            <type>text/plain</type>
            <size>45735</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiMTU1ZWYyZmQ3NDJiOTlkNjQwY2U4YzU0MjU2MTBmZmM0YjE3OTZmLi5iOTk2OTk3
NDAxY2E3NGI3ZDFhMDA3YWVjMWQxYTYzODFhNDJiYTdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjEgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjEgIER1bWl0
cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBm
aXhpbmcgZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
c3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjJkYzVkYWFiMDkyNDRhNTFjMzM5ZjIxOGMxODVjMGQ1OTA4YmFkNAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0
cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitUaGlzIHRlc3Q6Cist
IENoZWNrcyB0aGF0IGluaXRQb3BTdGF0ZUV2ZW50IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBz
dGF0ZUFyZyBjYW4ndCBiZSBzZXJpYWxpemVkLgorUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1
ZSB3aXRob3V0IGV4Y2VwdGlvbiBmb3IgdW5kZWZpbmVkLgorUEFTUyBzZXJpYWxpemVkIHNjcmlw
dCB2YWx1ZSB3aXRob3V0IGV4Y2VwdGlvbiBmb3IgZW1wdHkgYXJyYXkuCitQQVNTIHNlcmlhbGl6
ZWQgc2NyaXB0IHZhbHVlIHRocmV3IGFuIGV4Y2VwdGlvbiBkdWUgdG8gYSBjeWNsZS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVl
dmVudC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3Bz
dGF0ZWV2ZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg3MTJlYTQ4OTlmOGE4ZDQ3MjY2ZTg2YWNlYmJk
OWQ5MDczMDMyNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0
YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC5odG1sCkBAIC0wLDAgKzEsNDEgQEAKKzxzY3Jp
cHQ+CitmdW5jdGlvbiBsb2codHh0KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
b2dnZXIiKS5pbm5lckhUTUwgKz0gdHh0ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBzdGF0ZVBv
cHBlZCgpCit7CisgICAgZXZlbnQuaW5pdFBvcFN0YXRlRXZlbnQoInRlc3QiLCB0cnVlLCB0cnVl
LCB1bmRlZmluZWQpOworICAgIGxvZygiUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB3aXRo
b3V0IGV4Y2VwdGlvbiBmb3IgdW5kZWZpbmVkLiIpOworICAgIHZhciBhID0gW107CisgICAgZXZl
bnQuaW5pdFBvcFN0YXRlRXZlbnQoInRlc3QiLCB0cnVlLCB0cnVlLCBhKTsKKyAgICBsb2coIlBB
U1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIGVtcHR5IGFy
cmF5LiIpOworICAgIGEuY3ljbGUgPSBhOworICAgIHRyeSB7CisgICAgICBldmVudC5pbml0UG9w
U3RhdGVFdmVudCgidGVzdCIsIHRydWUsIHRydWUsIGEpOworICAgIH0gY2F0Y2ggKGVycikgewor
ICAgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHRocmV3IGFuIGV4Y2VwdGlv
biBkdWUgdG8gYSBjeWNsZS4iKTsKKyAgICB9CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7ICAg
ICAgICAKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCk7IiBvbnBv
cHN0YXRlPSJzdGF0ZVBvcHBlZCgpOyI+Cis8cHJlPgorVGhpcyB0ZXN0OgorLSBDaGVja3MgdGhh
dCBpbml0UG9wU3RhdGVFdmVudCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gc3RhdGVBcmcgY2Fu
J3QgYmUgc2VyaWFsaXplZC4KKzwvcHJlPgorPHByZSBpZD0ibG9nZ2VyIj48L3ByZT4KKzxzY3Jp
cHQ+CitoaXN0b3J5LnJlcGxhY2VTdGF0ZSgiRmlyc3RFbnRyeSIsIG51bGwsICI/Rmlyc3RFbnRy
eSIpOworaGlzdG9yeS5wdXNoU3RhdGUoIlNlY29uZEVudHJ5IiwgbnVsbCwgIj9TZWNvbmRFbnRy
eSIpOworaGlzdG9yeS5iYWNrKCk7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJp
YWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wM2I4OWYyOTQyNjM4NjAxYzAwZjkwY2U1Yjc3OGE2ZjhkZTU5ZDNiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxp
emVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NyBAQAorVGVzdCBJbmRl
eGVkREIncyBvcGVuQ3Vyc29yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5k
ZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNjZXNzJyBpbiBy
ZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ2Fi
b3J0JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRy
dWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworb3BlblN1Y2Nlc3MKK1N1Y2Nl
c3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ2Nv
ZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyBmYWxzZQor
UEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJjZSAhPSBudWxs
IGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1Mg
J29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gZXZlbnQu
dGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK2Ri
ID0gZXZlbnQucmVzdWx0CitkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpCitQQVNTICdvbnN1
Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1
ZQorUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiBy
ZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitjcmVhdGVP
YmplY3RTdG9yZVN1Y2Nlc3MKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGlu
IGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNz
YWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTICdhYm9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUn
IGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlz
IGV2ZW50LnRhcmdldC5ET05FCisKK29iamVjdFN0b3JlID0gZXZlbnQucmVzdWx0CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNl
cmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE4M2RiZjY0YTExNTA0MjBh
MjU5NzI1NGU0YzFiN2UyOGQ0OWYxMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXpl
ZC1zY3JpcHQtdmFsdWUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKaW5kZXggODA5
YmRlY2JlM2MwZWJiMGM1N2ZmNGViZTY4MjM3NWMxYzYwYmYyNy4uYzFlMmM2ZGJkZDY2MDBhMDMz
MDYyMjFmN2Y2ZDYzNTliMWMyMTE0ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCkBAIC00Niw2ICs0NiwxNSBAQCBmdW5jdGlvbiB2
ZXJpZnlSZXN1bHQocmVzdWx0KQogICAgIGRlYnVnKCIiKTsKIH0KIAorCitmdW5jdGlvbiB1bmV4
cGVjdGVkU3VjY2Vzc0NhbGxiYWNrKCkKK3sKKyAgICB0ZXN0RmFpbGVkKCJTdWNjZXNzIGZ1bmN0
aW9uIGNhbGxlZCB1bmV4cGVjdGVkbHk6ICgiICsgZXZlbnQuY29kZSArICIpICIgKyBldmVudC5t
ZXNzYWdlKTsKKyAgICBkZWJ1ZygiIik7CisgICAgdmVyaWZ5UmVzdWx0KGV2ZW50KTsKKyAgICBk
b25lKCk7Cit9CisKIGZ1bmN0aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKIHsKICAgICB0
ZXN0RmFpbGVkKCJFcnJvciBmdW5jdGlvbiBjYWxsZWQgdW5leHBlY3RlZGx5OiAoIiArIGV2ZW50
LmNvZGUgKyAiKSAiICsgZXZlbnQubWVzc2FnZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12
YWx1ZS5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGIt
YWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMjM2MDBkZWM4NDk0
YmIyZDZjODI3YWVmMDk3ZDk2NmFmMzdhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlw
dC12YWx1ZS5qcwpAQCAtMCwwICsxLDUyIEBACitkZXNjcmlwdGlvbigiVGVzdCBJbmRleGVkREIn
cyBvcGVuQ3Vyc29yLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JDYWxsYmFjaygpCit7CisgICAgZGVidWcoInNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIHZlcmlmeUVycm9y
RXZlbnQoZXZlbnQpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gY3Jl
YXRlT2JqZWN0U3RvcmVTdWNjZXNzKCkKK3sKKyAgICBkZWJ1ZygiY3JlYXRlT2JqZWN0U3RvcmVT
dWNjZXNzIik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB2YXIgb2JqZWN0
U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGV2ZW50LnJlc3VsdCIpOworICAgIHZh
ciBhID0gW107CisgICAgYS5jeWNsZSA9IGE7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzdWx0ID0g
b2JqZWN0U3RvcmUuYWRkKGEpOworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICB0ZXN0RmFp
bGVkKCJvYmpTdG9yZS5hZGQgdGhyZXcgYW4gdW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBlcnIp
OworICAgIH0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBub3RpZnkgZG9uZSBhbmQgY2hlY2sg
dGhlIGVycm9yIGNhbGxiYWNrIG9uY2UgYWRkIGlzIGltcGxlbWVudGVkLgorICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAvLyB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICAvLyByZXN1bHQu
b25zdWNjZXNzID0gdW5leHBlY3RlZFN1Y2Nlc3NDYWxsYmFjazsKKyAgICAvLyByZXN1bHQub25l
cnJvciA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVuU3VjY2VzcyIpOworICAg
IHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIg
PSBldmVudC5yZXN1bHQiKTsKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmpl
Y3RTdG9yZSgndGVzdCcpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0
Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICByZXN1bHQgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlv
bicpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IG9wZW5TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggYzMzNzRlYWZjMGFmOTRiM2YwZjY2Mjc0YmRlZmVmOWM2ZTdhNDdi
OC4uZjQ2ZjAyZmRlYmZmOTlkNDUxZmJkNzNhMGMxMzE0YjU4OGM4YzI2ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBA
QAorMjAxMC0wNi0yMSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciB0aHJvd2luZyBiZWhhdmlvciBvZiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdG8gYmUgc3Bl
Y2lmaWVkIGluIHRoZSBJREwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDgzNQorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBn
ZW5lcmF0ZWQgYmluZGluZ3Mgd2lsbCBlaXRoZXIgdGhyb3cgYW4gZXhjZXB0aW9uIG9yIGJlIHNp
bGVudAorICAgICAgICB3aGVuIGNyZWF0aW5nIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGJhc2Vk
IG9uIHRoZSBjb3JyZXNwb25kaW5nIElETCBkZWZpbml0aW9uLgorICAgICAgICBUZXN0czogV2Vi
S2l0VG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6
c2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVl
UmV0dXJuUmFpc2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJl
dHVybk5vUmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVk
X3ZhbHVlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRf
dmFsdWVfbm9fcmFpc2UpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVk
X3ZhbHVlX3JldHVybl9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJp
YWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmFp
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFs
aXplZFZhbHVlTm9SYWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgKC1bRE9NVGVz
dE9iaiBzZXJpYWxpemVkVmFsdWVSYWlzZXM6XSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2Vy
aWFsaXplZFZhbHVlTm9SYWlzZTpdKToKKyAgICAgICAgKC1bRE9NVGVzdE9iaiBzZXJpYWxpemVk
VmFsdWVSZXR1cm5SYWlzZXNdKToKKyAgICAgICAgKC1bRE9NVGVzdE9iaiBzZXJpYWxpemVkVmFs
dWVSZXR1cm5Ob1JhaXNlXSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlz
ZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJu
YWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlV2l0aG91dFRocm93aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6c2VyaWFsaXphdGlvbkVycm9yKToKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudCk6
CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuaDoKKyAgICAgICAgKiBkb20vUG9wU3RhdGVF
dmVudC5pZGw6CisKIDIwMTAtMDYtMjEgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3Vs
YWluQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IDRlMmU5MTE5NDQ3ZjNiMDRlMDkzNTA5N2Q5NjFlZmM2YmUwOWVkYjQuLmMyNTE1YjViM2Fj
OWFlMWVmYjhhNzc2ZGYyMDdiNTY5NWExMDBkMzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTcxNiwxMyArMTcxNiwxMyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlw
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRwb2RUeXBlIGVxICJmbG9hdCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpT
U1ZHTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0
aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgQHskZnVuY3Rpb24tPnJhaXNlc0V4
Y2VwdGlvbnN9KSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHBvZEltcC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9k
SW1wLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiLCBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30p
IC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAtPmNvbW1p
dENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hdGl2
ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFs
dWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkc2V0dGVyRXhwcmVzc2lvblByZWZpeCA9ICRjb2Rl
R2VuZXJhdG9yLT5TZXR0ZXJFeHByZXNzaW9uUHJlZml4KFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJm
YWNlTmFtZSwgJGF0dHJpYnV0ZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiBAeyRh
dHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwpAQCAtMTkxNiw3ICsxOTE2LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1c
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21T
aWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFy
YW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZl
VHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiLCBAeyRmdW5jdGlv
bi0+cmFpc2VzRXhjZXB0aW9uc30pIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0
IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5n
cywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApAQCAt
MjI5OCw2ICsyMjk4LDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogewogICAgIG15ICRzaWduYXR1
cmUgPSBzaGlmdDsKICAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkcmFpc2VzID0gc2hp
ZnQ7CiAKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0
dXJlLT50eXBlKTsKIApAQCAtMjMyMyw3ICsyMzI0LDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQog
CiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJh
bnkiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0g
PSAxOwotICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
ICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsICR2YWx1ZSwgJmVjKSIgaWYgKCRyYWlzZXMpOworICAgICAgICByZXR1cm4gIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKGV4ZWMsICR2YWx1ZSkiOwog
ICAgIH0KIAogICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0UG9pbnQuaCJ9ID0gMSBpZiAkdHlwZSBl
cSAiU1ZHUG9pbnQiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggZTI0OWNhYWEzZGFhZDM5ZmI1N2ZkZDA2MTc3ZDM5NWY3MmI1MTdhMS4uYTYxMjA0
YzllOTAxZWNjMDc1YWRhODczMjMyZWExMTlhNDE5MDZjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMTkwLDE3ICsxMTkwLDE5IEBAIEVORAog
CiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
KSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9
ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3Bh
cmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNl
O1xuIikgaWYgKCRyYWlzZXNFeGNlcHRpb25zKTsKICAgICAgICAgfSBlbHNpZiAoQmFzaWNUeXBl
Q2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsKICAgICAgICAg
fQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdldE5hdGl2ZVR5
cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIsICRwYXJhbUluZGV4KSAuICIgJHBhcmFtZXRlck5h
bWUgPSAiKTsKIAotICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlIikgeworICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIiAmJiAkcmFpc2VzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBh
cmFtSW5kZXhdLCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cp
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+dHlw
ZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5n
KGFyZ3NbJHBhcmFtSW5kZXhdKTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdz
WyRwYXJhbUluZGV4XSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7
cGFyYW1ldGVyTmFtZX1PayIgOiB1bmRlZikgLiAiO1xuIik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKaW5kZXggNjViYzlmMzZl
ZTM2ZTI0MjVlNDY0ZTcwYTBkNjBkYmY1MzQ5ZDNhNS4uZDg4MTQ3Y2NhOWNiZDk3YjMzYTU5ZjQ4
M2IxOWJkN2ZiMGZhODBjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApAQCAtNTQxLDEyICs1NDEsNDEgQEAgV2ViRE9NVGVz
dE9iaiBXZWJET01UZXN0T2JqOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNv
bnN0IFdlYkRPTVN0cmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OnNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCit2
b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb25zdCBXZWJET01TdHJp
bmcmIHNlcmlhbGl6ZWRBcmcpCiB7CiAgICAgaWYgKCFpbXBsKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlUmFp
c2VzKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmlu
ZyhzZXJpYWxpemVkQXJnKSksIGVjKTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0
PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2Vy
aWFsaXplZFZhbHVlTm9SYWlzZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2VyaWFs
aXplZFZhbHVlTm9SYWlzZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShX
ZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRP
TVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpCit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkRPTVN0cmluZyByZXN1bHQgPSB0b1dlYktpdChXVEY6
OmdldFB0cihpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpKTsKKyAgICB3
ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnNlcmlh
bGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIo
aW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogdm9pZCBXZWJE
T01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDMzYmM3ZmJhNTliMjNiZjBi
MzkwNzMwNjIwMzhiNTU1ZTgyMzBmNTcuLmVlOTY5ZGI4YjI5ODJkMWNjYmI3MjZkNGRhMzVjODcz
YTYxN2FjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouaApAQCAtMTAwLDcgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgV2ViRE9NVGVz
dE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBXZWJET01UZXN0T2JqIG1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0
IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBX
ZWJET01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdl
YkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVSYWlz
ZXMoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICB2b2lkIHNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICBX
ZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCk7CisgICAgV2ViRE9NU3Ry
aW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKTsKICAgICB2b2lkIG1ldGhvZFdpdGhF
eGNlcHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9tTWV0
aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0
IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCBlZmIzNjJi
YmEzZWVkZDNmM2ExYThiNGU3YjRlNWU2NzAzMjcwMDY5Li4xYWE3M2JiZDc0NDA1MjNiODI1OGYy
OTFjNmE4NTM3NzkzYmU5NzhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCkBAIC0xNTUsMTQgKzE1Niw1
NyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2Fu
ZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogcwogfQogCiB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NlcmlhbGl6ZWRfdmFsdWVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnLCBHRXJyb3IgKiplcnJvcikK
IHsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXpl
ZF9hcmcpOwogICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9z
ZXJpYWxpemVkX2FyZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwotICAgIGl0ZW0tPnNlcmlhbGl6
ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb252ZXJ0ZWRf
c2VyaWFsaXplZF9hcmcsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
cmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBX
ZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVy
dGVkX3NlcmlhbGl6ZWRfYXJnKTsKKyAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNv
bnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX3JhaXNl
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6
OmdldFB0cihpdGVtLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsK
KyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2Mp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERP
TVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOworICAg
IHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX25vX3JhaXNlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQ
dHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKTsKKyAgICBXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01TZXJpYWxp
emVkU2NyaXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4g
cmVzOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDhkY2Q4YzMxZTMzNjNiZTcyNDhh
Mzc1YjU5NzJhNTE2OTcwMGMzOTcuLjA4ZDA1NWY4YTcxNjgyMDBmMmNmZDRjNmE1NDkzNGYzMGU3
M2IxMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC03MSw3ICs3MSwxNiBAQCBXRUJLSVRfQVBJIFdl
YktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVz
X2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2NoYXIqICBzdHJf
YXJnLCBXZWJLaXRET01UZXN0T2JqKiAgb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpOwogCiBXRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxp
emVkX2FyZyk7Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmFpc2VzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNl
cmlhbGl6ZWRfYXJnLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKTsK
KworV0VCS0lUX0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0
dXJuX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiBXRUJLSVRfQVBJIHZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDM2MDc4MmQ4NjhmNWFkYjAxMWVjNzMzODA2ZjQy
MGExMDNhYTI1ZjUuLmY2ODQ2MDlkZGU4NDE2ZDY4NzM1ZTk5Njc5MmI4MjdmZTgxODdkNWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAt
MTQ0LDcgKzE0NCw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5LX0dF
TkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzNdID0KIHsKICAgICB7ICJ2
b2lkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInZvaWRNZXRob2RXaXRoQXJn
cyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyksIChp
bnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTU0LDcgKzE1NCwxMCBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzBd
ID0KICAgICB7ICJvYmpNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk9iak1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0s
CiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInNl
cmlhbGl6ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6
ZWRWYWx1ZVJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZVJhaXNlcyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNl
cmlhbGl6ZWRWYWx1ZU5vUmFpc2UiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWVOb1JhaXNlKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisg
ICAgeyAic2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9u
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKSwgKGludHB0cl90KTAgVEhVTktf
R0VORVJBVE9SKDApIH0sCisgICAgeyAic2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2Up
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoRXhj
ZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
biksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhv
ZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZCksIChpbnRwdHJf
dCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpLCAoaW50
cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE3OSw3ICsxODIsNyBAQCBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzBdID0K
IH07CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxF
IEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgNjksIDYzLCBKU1Rlc3RPYmpQ
cm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFz
aFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzEsIDEyNywgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJvdG90eXBl
VGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC03ODQsMTkgKzc4Nyw2
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJmVjKTsKKworICAgIGltcC0+c2VyaWFs
aXplZFZhbHVlUmFpc2VzKHNlcmlhbGl6ZWRBcmcsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGVXaXRob3V0VGhyb3dpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogCi0gICAgaW1wLT5z
ZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVO
b1JhaXNlKHNlcmlhbGl6ZWRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RP
YmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gaW1w
LT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpID8gaW1wLT5zZXJpYWxpemVkVmFsdWVS
ZXR1cm5SYWlzZXMoZWMpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSkgOiBqc051bGwoKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gaW1wLT5zZXJp
YWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkgPyBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UoKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpIDog
anNOdWxsKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oCmluZGV4IDNiMjFjODU2MDFjMGEzN2I3Y2RmZmYxZWU1ZmEzNjE0MTI4
YTQ2NzAuLjAxZDc0NDkyNDI1ZGYxYjdmNjZhYjYzMzUxMjZjYjkyZjJmYjRmMTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05NCw3ICs5NCwx
MCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2QoSlNDOjpFeGVjUwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoSlNDOjpF
eGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVj
U3RhdGUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLmgKaW5kZXggZDg4NjJkYTE1ZWFjNGU4MWEyZWIxMWFiZWEzYTA1ZDMzZmIyYzFiYi4uNzgz
YTI2NzExYjJmMjVkNGFjNmVmMmYxYmJhODQ3NDRkN2QxY2QxMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTk4LDcgKzk4LDEwIEBA
CiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihO
U1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0
T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnczooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJn
OihET01UZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAq
KW9iakFyZzsKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRB
cmc7CistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczooTlNTdHJpbmcgKilzZXJpYWxpemVk
QXJnOworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNlOihOU1N0cmluZyAqKXNlcmlhbGl6
ZWRBcmc7CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlczsKKy0gKE5T
U3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZTsKIC0gKHZvaWQpbWV0aG9kV2l0
aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRob2RX
aXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9N
VGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2OWZiOTZhNDBmNDE0OWQ4MDU5NGNl
ZjdkZmI4Li4xOTc5YTM4YmNlOTVmZmYwOTc0NWM4MWE3N2RiYWY1MzgyNDBiNTY1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC00
NDUsMTAgKzQ0NSwzMyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKHZvaWQpc2VyaWFs
aXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKKy0gKHZvaWQpc2VyaWFsaXplZFZh
bHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKIHsKICAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2VyaWFsaXplZFZhbHVlKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxp
emVkQXJnKSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIElNUEwt
PnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpLCBlYyk7CisgICAgV2ViQ29yZTo6
cmFpc2VPbkRPTUVycm9yKGVjKTsKK30KKworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNl
OihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXpl
ZEFyZykpKTsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTlNTdHJpbmcgKnJlc3VsdCA9IGtpdChXVEY6
OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKSk7CisgICAgV2Vi
Q29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChO
U1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJ
TVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogLSAodm9pZCltZXRo
b2RXaXRoRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
CmluZGV4IGVmNGRiMTA2ZjA3NDY2Zjg0MjU5NDE0ZDg5ZDlkMDQ5ZjY5ODQyMjIuLjdmMGMzZmRm
OGY4MGY1NDlhNGYxYzFmNTlkMTk3N2I3ZmMyNTA3NzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC02Miw3ICs2MiwxMSBAQCBtb2R1bGUgdGVzdCB7CiAg
ICAgICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50cz1SYWlzZV0gVGVzdE9iaiBtZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzKGluIERPTVN0cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2Jq
QXJnKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKLSAgICAgICAgdm9pZCBz
ZXJpYWxpemVkVmFsdWUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwor
ICAgICAgICAvLyBUZXN0IHZhcmlvdXMgZm9ybXMgb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlCisg
ICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBzZXJpYWxpemVkQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXJp
YWxpemVkVmFsdWVOb1JhaXNlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJn
KTsKKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlcygpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogCiAgICAgICAgIC8vIEV4Y2VwdGlv
bnMKICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApp
bmRleCA0YTU0YWUzNDA5NTM3NDA0OWJjYTFlMjE5NTZhYzhkMzhkZWIzMTZmLi5jYzA5ZDVlNmFl
ZWUxYmVlMjM2YjZjMzg5MGM3MjA2NWFlMWJlNjMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTU2MSwxOCArNTYxLDU4IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
c0NhbGxiYWNrKGNvbnN0IHY4CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwog
fQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWUiKTsKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyIpOwogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgewogICAgIGJvb2wgc2VyaWFsaXplZEFyZ0RpZFRocm93ID0g
ZmFsc2U7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMF0sIHNlcmlhbGl6ZWRBcmdEaWRU
aHJvdyk7CiAgICAgaWYgKHNlcmlhbGl6ZWRBcmdEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZShzZXJpYWxpemVkQXJnKTsK
KyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhzZXJpYWxpemVkQXJnLCBlYyk7CisgICAg
aWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAor
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVOb1JhaXNlQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhv
dXRUaHJvd2luZyhhcmdzWzBdKTsKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2Uoc2Vy
aWFsaXplZEFyZyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlc0Nh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMiKTsKKyAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIHsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQg
PSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYyk7CisgICAgaWYgKFVOTElLRUxZ
KGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpLT5k
ZXNlcmlhbGl6ZSgpOworICAgIH0KKyAgICBmYWlsOgorICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihlYyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIpOworICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGltcC0+c2Vy
aWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpLT5kZXNlcmlhbGl6ZSgpOworfQorCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9k
V2l0aEV4Y2VwdGlvbiIpOwpAQCAtOTQ2LDcgKzk4NiwxMCBAQCBzdGF0aWMgY29uc3QgQmF0Y2hl
ZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7InZvaWRNZXRob2QiLCBUZXN0
T2JqSW50ZXJuYWw6OnZvaWRNZXRob2RDYWxsYmFja30sCiAgICAgeyJpbnRNZXRob2QiLCBUZXN0
T2JqSW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrfSwKICAgICB7Im9iak1ldGhvZCIsIFRlc3RP
YmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAotICAgIHsic2VyaWFsaXplZFZhbHVlIiwg
VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCisgICAgeyJzZXJpYWxp
emVkVmFsdWVSYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0Nh
bGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiLCBUZXN0T2JqSW50ZXJuYWw6
OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2VDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVS
ZXR1cm5SYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
c0NhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiLCBUZXN0T2Jq
SW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxsYmFja30sCiAgICAgeyJt
ZXRob2RXaXRoRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9u
Q2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRob2RD
YWxsYmFja30sCiAgICAgeyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9iajo6Y3VzdG9t
TWV0aG9kV2l0aEFyZ3NDYWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOGU5MTkyMDkwYzY0NmU1YjVhNGM0NTI1MzA1ODczNzZl
MzMzZGQ5Yi4uYjFkZjZjMjE1NzAwMGE0YjRjMWNiM2Q4ZDZlMWU0NjMzYjE3OTMyOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTAyMywx
MyArMTAyMywyNCBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVBbmRT
ZXRQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iagogCiBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdykKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzY3JpcHRWYWx1ZSA9IGFkb3B0UmVmKG5ldyBTZXJp
YWxpemVkU2NyaXB0VmFsdWUodmFsdWUpKTsKKyAgICBpZiAoc2NyaXB0VmFsdWUtPm1fZGF0YS5p
c051bGwoKSkgeworICAgICAgICB0aHJvd0Vycm9yKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAg
ICAgZGlkVGhyb3cgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBkaWRUaHJvdyA9IGZhbHNl
OworICAgIHJldHVybiBzY3JpcHRWYWx1ZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7CiAgICAgYm9vbCBkaWRUaHJvdzsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsKKyAg
ICByZXR1cm4gY3JlYXRlKHZhbHVlLCBkaWRUaHJvdyk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJv
d2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUpKTsKIH0KIAogUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
U3RyaW5nIGRhdGEpCkBAIC0xMDU4LDE3ICsxMDY5LDEyIEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKIHsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29s
JiBkaWRUaHJvdykKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKLSAgICBkaWRUaHJvdyA9IGZhbHNlOwog
ICAgIFdyaXRlciB3cml0ZXI7CiAgICAgU2VyaWFsaXplciBzZXJpYWxpemVyKHdyaXRlcik7Ci0g
ICAgaWYgKCFzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dFcnJv
cihOT1RfU1VQUE9SVEVEX0VSUik7Ci0gICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGEgPSBTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0
YSgpKTsKKyAgICBpZiAoc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKQorICAgICAgICBtX2Rh
dGEgPSBTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0YSgpKTsKIH0KIAogU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoU3RyaW5nIGRhdGEsIFN0cmluZ0RhdGFN
b2RlIG1vZGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApp
bmRleCAzNzEwYjVhMjMxMDVhNmYxNjkzMTY1MGVhNTA4YjAyYjQ3ZTllMGQyLi5iNWY1ZjU0ZGQ5
M2RkODhmZjI1NDQ0NWU1NmE3OTVhNzRjYmU4YzhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAg
IC8vIFY4LiBXaGVuIHNlcmlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCwgfGRpZFRocm93fCBpcyBm
YWxzZS4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIGRpZFRocm93KTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
Y3JlYXRlV2l0aG91dFRocm93aW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShT
dHJpbmcgZGF0YSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBjcmVhdGUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gY3JlYXRlKCk7CkBAIC01Nyw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIFN0
cmluZyB0b1dpcmVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAorICAgIGJvb2wg
c2VyaWFsaXphdGlvbkVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzTnVsbCgpOyB9CisK
ICAgICAvLyBEZXNlcmlhbGl6ZXMgdGhlIHZhbHVlIChpbiB0aGUgY3VycmVudCBjb250ZXh0KS4g
UmV0dXJucyBhIG51bGwgdmFsdWUgaW4KICAgICAvLyBjYXNlIG9mIGZhaWx1cmUuCiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGRlc2VyaWFsaXplKCk7CkBAIC02OCw3ICs3MSw3IEBAIHByaXZh
dGU6CiAgICAgfTsKIAogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOwotICAgIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIGJvb2wmIGRpZFRocm93KTsKKyAg
ICBleHBsaWNpdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsK
ICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU3RyaW5nIGRhdGEsIFN0cmluZ0RhdGFNb2RlIG1v
ZGUpOwogCiAgICAgU3RyaW5nIG1fZGF0YTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuY3BwIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKaW5kZXggYjlhZDg2
MmJjMDI5MzdjNDI5YmYyMzQ0YTQzYTk4YWM3OWQxMDljOC4uNzkyZmIzNGRmYjYwNTQ2M2QxMzJi
NDdkYzM3MTEzOGIxMDRjNGNhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVu
dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKQEAgLTM3LDggKzM3LDkg
QEAgUG9wU3RhdGVFdmVudDo6UG9wU3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc3RhdGVPYmplY3QpCiB7CiB9CiAgICAgCi12b2lkIFBvcFN0YXRlRXZlbnQ6Omlu
aXRQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUs
IGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRl
T2JqZWN0KQordm9pZCBQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVjdCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CisgICAgQVNTRVJUX1VOVVNFRChlYywgdHJ1ZSk7CiAgICAgaWYgKGRpc3BhdGNoZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9wU3RhdGVF
dmVudC5oIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCmluZGV4IDJmYjhkMDY4NWJmMGUw
ZDUyMmU0NmIwOGI4YWJhZjcyNjNhNGI0MjIuLjcxMWYwYjVkYWE5Yjk3MDA5Yjk2MWMxYTliY2Y3
ZjY1MjAyOGY2NzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAorKysg
Yi9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcFN0YXRlRXZlbnQoc3RhdGVPYmplY3QpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+KTsKKyAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgYm9vbCBp
c1BvcFN0YXRlRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWUqIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZU9iamVjdC5nZXQoKTsg
fSAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsIGIvV2ViQ29y
ZS9kb20vUG9wU3RhdGVFdmVudC5pZGwKaW5kZXggYWRjOTA3NGVjNGZlYjA3MDA4NzY3M2Y2YWM4
OGMwMzBhNTg3MjRkMi4uNmM4NjY1N2UwN2JkMDlhNjU4NWY5YzJmNTgwMGViMzIwYzgxNjNmMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwKKysrIGIvV2ViQ29yZS9k
b20vUG9wU3RhdGVFdmVudC5pZGwKQEAgLTI5LDkgKzI5LDkgQEAgbW9kdWxlIGV2ZW50cyB7CiAj
aWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgaW50ZXJmYWNl
IFBvcFN0YXRlRXZlbnQgOiBFdmVudCB7CiAgICAgICAgIHZvaWQgaW5pdFBvcFN0YXRlRXZlbnQo
aW4gRE9NU3RyaW5nIHR5cGVBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGJvb2xlYW4gY2FuQnViYmxlQXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIGNhbkJ1YmJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIGNhbmNlbGFibGVBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdGF0ZUFyZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHN0YXRlQXJnKSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1Y4Q3VzdG9tR2V0dGVy
XSBhbnkgc3RhdGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59362</attachid>
            <date>2010-06-22 05:46:01 -0700</date>
            <delta_ts>2010-06-22 12:38:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100622134557.patch</filename>
            <type>text/plain</type>
            <size>96982</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlNjk4Zjc3YWQzYTI4NTI5ODU2NjEzZDMzNjI0MDk4ZDY3NTMyNzdiLi44ZWU0NzJj
M2Q0MGRhMzIxYTgxMzU0N2Y0M2JlZWI2ODcxNjdhZDE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjIgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9p
bml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9z
dGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYy
ZGM1ZGFhYjA5MjQ0YTUxYzMzOWYyMThjMTg1YzBkNTkwOGJhZDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0OgorLSBDaGVja3MgdGhhdCBp
bml0UG9wU3RhdGVFdmVudCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gc3RhdGVBcmcgY2FuJ3Qg
YmUgc2VyaWFsaXplZC4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNl
cHRpb24gZm9yIHVuZGVmaW5lZC4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91
dCBleGNlcHRpb24gZm9yIGVtcHR5IGFycmF5LgorUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1
ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU4YzEyMzBiM2E5ZTQ1ZTAwNTM2YmMwMzM3ZjAwYTI4ZjkzNzU3NzYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5p
dHBvcHN0YXRlZXZlbnQuaHRtbApAQCAtMCwwICsxLDQxIEBACis8c2NyaXB0PgorZnVuY3Rpb24g
bG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJI
VE1MICs9IHR4dCArICI8YnI+IjsKK30KKworZnVuY3Rpb24gc3RhdGVQb3BwZWQoKQoreworICAg
IGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkKTsK
KyAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24g
Zm9yIHVuZGVmaW5lZC4iKTsKKyAgICB2YXIgYSA9IFtdOworICAgIGV2ZW50LmluaXRQb3BTdGF0
ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgYSk7CisgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQg
c2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciBlbXB0eSBhcnJheS4iKTsKKyAgICBh
LmN5Y2xlID0gYTsKKyAgICB0cnkgeworICAgICAgZXZlbnQuaW5pdFBvcFN0YXRlRXZlbnQoInRl
c3QiLCB0cnVlLCB0cnVlLCBhKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGxvZygiUEFT
UyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3lj
bGUuIik7CisgICAgfQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2Ny
aXB0PgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsiIG9ucG9wc3RhdGU9InN0YXRlUG9wcGVkKCk7
Ij4KKzxwcmU+CitUaGlzIHRlc3Q6CistIENoZWNrcyB0aGF0IGluaXRQb3BTdGF0ZUV2ZW50IHRo
cm93cyBhbiBleGNlcHRpb24gd2hlbiBzdGF0ZUFyZyBjYW4ndCBiZSBzZXJpYWxpemVkLgorPC9w
cmU+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPHNjcmlwdD4KK2hpc3RvcnkucmVwbGFjZVN0
YXRlKCJGaXJzdEVudHJ5IiwgbnVsbCwgIj9GaXJzdEVudHJ5Iik7CitoaXN0b3J5LnB1c2hTdGF0
ZSgiU2Vjb25kRW50cnkiLCBudWxsLCAiP1NlY29uZEVudHJ5Iik7CitoaXN0b3J5LmJhY2soKTsK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFs
aXplZC1zY3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYjg5ZjI5NDI2Mzg2
MDFjMDBmOTBjZTViNzc4YTZmOGRlNTlkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDQ3IEBACitUZXN0IEluZGV4ZWREQidzIG9wZW5DdXJzb3IuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIub3BlbignbmFtZScsICdk
ZXNjcmlwdGlvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdv
bmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVl
CitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZp
cmUgc2hvcnRseS4uLgorCitvcGVuU3VjY2VzcworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1Mg
J3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UK
K1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50
IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNj
ZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFy
Z2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAn
cmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJl
YWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworZGIgPSBldmVudC5yZXN1bHQKK2RiLmNy
ZWF0ZU9iamVjdFN0b3JlKCd0ZXN0JykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gcmVz
dWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVu
dCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2NyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcworU3Vj
Y2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAn
Y29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNl
CitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51
bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFT
UyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBldmVu
dC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRy
dWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKwor
b2JqZWN0U3RvcmUgPSBldmVudC5yZXN1bHQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbCBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYTgzZGJmNjRhMTE1MDQyMGEyNTk3MjU0ZTRjMWI3ZTI4ZDQ5ZjEw
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFk
ZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRleCA4MDliZGVjYmUzYzBlYmIwYzU3ZmY0ZWJl
NjgyMzc1YzFjNjBiZjI3Li5jMWUyYzZkYmRkNjYwMGEwMzMwNjIyMWY3ZjZkNjM1OWIxYzIxMTRl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hh
cmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFy
ZWQuanMKQEAgLTQ2LDYgKzQ2LDE1IEBAIGZ1bmN0aW9uIHZlcmlmeVJlc3VsdChyZXN1bHQpCiAg
ICAgZGVidWcoIiIpOwogfQogCisKK2Z1bmN0aW9uIHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2so
KQoreworICAgIHRlc3RGYWlsZWQoIlN1Y2Nlc3MgZnVuY3Rpb24gY2FsbGVkIHVuZXhwZWN0ZWRs
eTogKCIgKyBldmVudC5jb2RlICsgIikgIiArIGV2ZW50Lm1lc3NhZ2UpOworICAgIGRlYnVnKCIi
KTsKKyAgICB2ZXJpZnlSZXN1bHQoZXZlbnQpOworICAgIGRvbmUoKTsKK30KKwogZnVuY3Rpb24g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2soKQogewogICAgIHRlc3RGYWlsZWQoIkVycm9yIGZ1bmN0
aW9uIGNhbGxlZCB1bmV4cGVjdGVkbHk6ICgiICsgZXZlbnQuY29kZSArICIpICIgKyBldmVudC5t
ZXNzYWdlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Njcmlw
dC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQt
dmFsdWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMyMzYwMGRlYzg0OTRiYjJkNmM4MjdhZWYwOTdkOTY2YWYz
N2E1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Nj
cmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzCkBAIC0wLDAgKzEs
NTIgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIG9wZW5DdXJzb3IuIik7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gc2VyaWFsaXplZFNjcmlwdFZhbHVlRXhwZWN0ZWRF
cnJvckNhbGxiYWNrKCkKK3sKKyAgICBkZWJ1Zygic2VyaWFsaXplZFNjcmlwdFZhbHVlRXhwZWN0
ZWRFcnJvckNhbGxiYWNrIik7CisgICAgdmVyaWZ5RXJyb3JFdmVudChldmVudCk7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3Mo
KQoreworICAgIGRlYnVnKCJjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MiKTsKKyAgICB2ZXJpZnlT
dWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHZhciBvYmplY3RTdG9yZSA9IGV2YWxBbmRMb2coIm9i
amVjdFN0b3JlID0gZXZlbnQucmVzdWx0Iik7CisgICAgdmFyIGEgPSBbXTsKKyAgICBhLmN5Y2xl
ID0gYTsKKyAgICB0cnkgeworICAgICAgICByZXN1bHQgPSBvYmplY3RTdG9yZS5hZGQoYSk7Cisg
ICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9ialN0b3JlLmFkZCB0aHJl
dyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogIiArIGVycik7CisgICAgfQorICAgIC8vIEZJWE1F
OiByZW1vdmUgdGhlIG5vdGlmeSBkb25lIGFuZCBjaGVjayB0aGUgZXJyb3IgY2FsbGJhY2sgb25j
ZSBhZGQgaXMgaW1wbGVtZW50ZWQuCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIC8vIHZl
cmlmeVJlc3VsdChyZXN1bHQpOworICAgIC8vIHJlc3VsdC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVk
U3VjY2Vzc0NhbGxiYWNrOworICAgIC8vIHJlc3VsdC5vbmVycm9yID0gc2VyaWFsaXplZFNjcmlw
dFZhbHVlRXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2Vzcygp
Cit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzIik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2
ZW50KTsKKyAgICB2YXIgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIpOworICAg
IHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0JykiKTsKKyAg
ICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlT2Jq
ZWN0U3RvcmVTdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2Fs
bGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2co
ImluZGV4ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0aW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1
bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVz
dWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwordGVzdCgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiOWJi
NTdhMDhiNjUwOWQyOTNjNDlmNzc1YmM4Mzg5MzZhZjg5MTg2Li5jOGE5ZjU0ODI2MmYyNWQ0NTY2
MDUzNjdjYjkzYjNmZmQwOTk3YmE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBAQAorMjAxMC0wNi0yMiAgTWFyY3Vz
IEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZvciB0aHJvd2luZyBiZWhhdmlv
ciBvZiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBJREwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDgzNQorCisg
ICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0ZWQgYmluZGluZ3Mgd2ls
bCBlaXRoZXIgdGhyb3cgYW4gZXhjZXB0aW9uIG9yIGJlIHNpbGVudAorICAgICAgICB3aGVuIGNy
ZWF0aW5nIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGJhc2VkIG9uIHRoZSBjb3JyZXNwb25kaW5n
IElETCBkZWZpbml0aW9uLgorICAgICAgICBJdCBhbHNvIGFkZHMgVGVzdFBPRE9iai5pZGwgdG8g
ZXhlcmNpc2UgdGhlIGJpbmRpbmcgZ2VuZXJhdG9yIGZvciBpbnRlcmZhY2VzIHdpdGggW1BPRFR5
cGU9XSBhdHRyaWJ1dGUuCisgICAgICAgIFRlc3RzOiBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi1i
aW5kaW5ncy10ZXN0cyBzaG91bGQgcGFzcy4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE9iai5jcHA6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSYWlzZXMp
OgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZSk6CisgICAg
ICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMpOgorICAgICAg
ICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZTo6V2ViRE9N
VGVzdFBPRE9ialByaXZhdGUpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVz
dFBPRE9iaik6CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjppbXBsKToKKyAgICAgICAgKFdl
YkRPTVRlc3RQT0RPYmo6On5XZWJET01UZXN0UE9ET2JqKToKKyAgICAgICAgKFdlYkRPTVRlc3RQ
T0RPYmo6OnJlYWRPbmx5RmxvYXRBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OnN0
cmluZ0F0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6c2V0U3RyaW5nQXR0cik6Cisg
ICAgICAgICh0b1dlYkNvcmUpOgorICAgICAgICAodG9XZWJLaXQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yYWlzZXMpOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fcmFpc2Vz
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5f
bm9fcmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmtpdCk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfcmVhZF9vbmx5X2Zsb2F0X2F0dHIp
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3N0cmluZ19hdHRyKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9zdHJpbmdfYXR0cik6CisgICAgICAg
IChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxp
emUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3Byb3BlcnR5KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX2luaXQpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdFBPRE9iaik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9i
ai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9y
OjpjbGFzc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1
Y3Rvcjo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
UE9ET2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9ialByb3RvdHlwZTo6c2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OkpTVGVzdFBPRE9iaik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RQT0RPYmo6On5KU1Rlc3RQT0RPYmopOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9E
T2JqOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0UE9ET2JqUmVh
ZE9ubHlGbG9hdEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0UE9ET2JqU3RyaW5nQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RQT0RPYmpTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Z2V0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1Rlc3RQT0RPYmopOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmNsYXNz
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjbGFzc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOgorICAgICAgICAoLVtET01U
ZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZVJhaXNlczpdKToKKyAgICAgICAgKC1bRE9NVGVzdE9iaiBz
ZXJpYWxpemVkVmFsdWVOb1JhaXNlOl0pOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6
ZWRWYWx1ZVJldHVyblJhaXNlc10pOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRW
YWx1ZVJldHVybk5vUmFpc2VdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RQT0RPYmoubW06IEFkZGVkLgorICAgICAgICAoLVtET01UZXN0UE9ET2Jq
IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRE9NVGVzdFBPRE9iaiBmaW5hbGl6ZV0pOgorICAgICAg
ICAoLVtET01UZXN0UE9ET2JqIHJlYWRPbmx5RmxvYXRBdHRyXSk6CisgICAgICAgICgtW0RPTVRl
c3RQT0RPYmogc3RyaW5nQXR0cl0pOgorICAgICAgICAoLVtET01UZXN0UE9ET2JqIHNldFN0cmlu
Z0F0dHI6XSk6CisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVybmFsLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFBPRE9iai5pZGw6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2VDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJl
dHVyblJhaXNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6
c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RQT0RP
YmpJbnRlcm5hbDo6VjhfVVNFKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RQT0RPYmpJbnRlcm5h
bDo6cmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RQ
T0RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdFBPRE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb25maWd1cmVWOFRlc3RQT0RPYmpUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RQT0RPYmo6OkdldFJhd1RlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBP
RE9iajo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjp0b05h
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6Okhhc0luc3RhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0
b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6ZGVyZWZPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6c2VyaWFsaXphdGlvbkVycm9yKToK
KyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3BT
dGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudCk6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZl
bnQuaDoKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5pZGw6CisKIDIwMTAtMDYtMjIgIFl1
dGEgS2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCmluZGV4IDRlMmU5MTE5NDQ3ZjNiMDRlMDkzNTA5N2Q5NjFlZmM2YmUwOWVkYjQu
LmExN2UxYjg4MzNjZDIyNTU1MTdlY2E5MGIwZWIxYmE0MjZlYjBiM2UgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTcxNiwxMyArMTcxNiwxMyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGVxICJmbG9hdCIpIHsgIyBTcGVjaWFs
IGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4g
SlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgMCkgLiAiO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAu
c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcC5zZXQkaW1wbFNldHRl
ckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
InZhbHVlIiwgMCkgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpcyk7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZh
bHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXR0ZXJFeHByZXNzaW9uUHJl
Zml4ID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb25QcmVmaXgoXCVpbXBsSW5jbHVk
ZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtc
biIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CkBAIC0xOTE2LDcgKzE5MTYs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXNvbHZlciA9IGN1c3RvbVJlc29sdmVy
LmdldCgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRp
dmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUgPSAiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIpIC4gIjtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIg
LiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUgPSAiIC4g
SlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIs
IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgLiAiO1xuIik7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBpbmRleCIgYW5kIGl0J3Mg
bmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbi4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4g
dGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFuZCB0aGUgZmFjdCB0
aGF0IGl0CkBAIC0yMjk4LDYgKzIyOTgsNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiB7CiAgICAg
bXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwogICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15ICRy
YWlzZXMgPSBzaGlmdDsKIAogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRzaWduYXR1cmUtPnR5cGUpOwogCkBAIC0yMzIzLDcgKzIzMjQsOCBAQCBzdWIgSlNWYWx1
ZVRvTmF0aXZlCiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3Ig
JHR5cGUgZXEgImFueSIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgJHZhbHVlLCAmZWMpIiBpZiAoJHJhaXNlcyk7CisgICAgICAgIHJl
dHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoZXhlYywg
JHZhbHVlKSI7CiAgICAgfQogCiAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRQb2ludC5oIn0gPSAx
IGlmICR0eXBlIGVxICJTVkdQb2ludCI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQppbmRleCBlMjQ5Y2FhYTNkYWFkMzlmYjU3ZmRkMDYxNzdkMzk1ZjcyYjUx
N2ExLi5hNjEyMDRjOWU5MDFlY2MwNzVhZGE4NzMyMzJlYTExOWE0MTkwNmM2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTExOTAsMTcgKzExOTAs
MTkgQEAgRU5ECiAKICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICBib29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNlO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfURpZFRo
cm93ID0gZmFsc2U7XG4iKSBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpOwogICAgICAgICB9IGVsc2lm
IChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1PaztcbiIp
OwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4g
R2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlciwgJHBhcmFtSW5kZXgpIC4gIiAk
cGFyYW1ldGVyTmFtZSA9ICIpOwogCi0gICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVx
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiICYmICRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoYXJnc1skcGFyYW1JbmRleF0sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCR7cGFyYW1ldGVyTmFt
ZX1EaWRUaHJvdylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgICAgICB9IGVsc2lmICgkcGFy
YW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRo
b3V0VGhyb3dpbmcoYXJnc1skcGFyYW1JbmRleF0pO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFt
ZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1l
dGVyKSA/ICAiJHtwYXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICI7XG4iKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRl
eCA2NWJjOWYzNmVlMzZlMjQyNWU0NjRlNzBhMGQ2MGRiZjUzNDlkM2E1Li5kODgxNDdjY2E5Y2Jk
OTdiMzNhNTlmNDgzYjE5YmQ3ZmIwZmE4MGM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCkBAIC01NDEsMTIgKzU0MSw0MSBA
QCBXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
V2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFs
aXplZEFyZykKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmFpc2VzKGNvbnN0
IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZykKIHsKICAgICBpZiAoIWltcGwoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaW1wbCgpLT5zZXJpYWxp
emVkVmFsdWVSYWlzZXMoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2Vi
Q29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSwgZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Io
c3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKK30KKwordm9pZCBXZWJET01U
ZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFs
aXplZEFyZykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1w
bCgpLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworfQorCitXZWJET01T
dHJpbmcgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCkKK3sKKyAg
ICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NU3RyaW5nIHJlc3VsdCA9IHRv
V2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVj
KSkpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29k
ZT4oZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVz
dE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiB0b1dlYktpdChX
VEY6OmdldFB0cihpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSkpOwogfQog
CiB2b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhFeGNlcHRpb24oKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggMzNiYzdm
YmE1OWIyM2JmMGIzOTA3MzA2MjAzOGI1NTVlODIzMGY1Ny4uZWU5NjlkYjhiMjk4MmQxY2NiYjcy
NmQ0ZGEzNWM4NzNhNjE3YWMwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCkBAIC0xMDAsNyArMTAwLDEwIEBAIHB1YmxpYzoKICAg
ICBXZWJET01UZXN0T2JqIG9iak1ldGhvZFdpdGhBcmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRP
TVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIFdlYkRP
TVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBXZWJET01UZXN0T2JqIG1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJB
cmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7Ci0gICAgdm9pZCBzZXJpYWxpemVkVmFs
dWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICB2b2lkIHNlcmlhbGl6
ZWRWYWx1ZVJhaXNlcyhjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIHZv
aWQgc2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRB
cmcpOworICAgIFdlYkRPTVN0cmluZyBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoKTsKKyAg
ICBXZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogICAgIHZvaWQg
bWV0aG9kV2l0aEV4Y2VwdGlvbigpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9kKCk7CiAgICAgdm9p
ZCBjdXN0b21NZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YmMxNGQ4ZGY5NTQ5ODM5YjE0Yjc3NjA4YTI4NjQ0ZjNhZWYyNTA2Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmou
Y3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkRPTVRlc3RQT0RPYmouaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5j
bHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVj
dCBXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZSB7CisgICAgV2ViRE9N
VGVzdFBPRE9ialByaXZhdGUoV2ViQ29yZTo6VGVzdFBPRE9iaiogb2JqZWN0ID0gMCkKKyAgICAg
ICAgOiBpbXBsKG9iamVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRl
c3RQT0RPYmo+IGltcGw7Cit9OworCitXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2Jq
KCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkKK3sKK30KKworV2ViRE9N
VGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKiBpbXBsKQor
ICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdFBPRE9ialBy
aXZhdGUoaW1wbCkpCit7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmoo
Y29uc3QgV2ViRE9NVGVzdFBPRE9iaiYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7Cisg
ICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdFBPRE9ialByaXZhdGUoY29w
eS5pbXBsKCkpIDogMDsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiogV2ViRE9NVGVzdFBPRE9i
ajo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1wbC5nZXQo
KSA6IDA7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmo6On5XZWJET01UZXN0UE9ET2JqKCkKK3sKKyAg
ICBkZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK2Zsb2F0IFdlYkRPTVRlc3RQ
T0RPYmo6OnJlYWRPbmx5RmxvYXRBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5yZWFkT25seUZsb2F0QXR0cigp
OworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdFBPRE9iajo6c3RyaW5nQXR0cigpIGNvbnN0
Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpTdHJpbmcmPihpbXBsKCktPnN0
cmluZ0F0dHIoKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdFBPRE9iajo6c2V0U3RyaW5nQXR0cihj
b25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmluZ0F0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRy
KTsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RQ
T0RPYmomIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOworfQorCitXZWJE
T01UZXN0UE9ET2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoqIHZhbHVlKQoreworICAg
IHJldHVybiBXZWJET01UZXN0UE9ET2JqKHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5
NmVlMGU5NWZhNTRhMDEyNzgyZmEyZmVmMjE4ZmU5NGExYmM0NjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVRlc3RQT0RPYmpfaAorI2RlZmlu
ZSBXZWJET01UZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorI2luY2x1
ZGUgPFdlYkRPTVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0UE9E
T2JqOworfTsKKworCitjbGFzcyBXZWJET01UZXN0UE9ET2JqIDogcHVibGljIFdlYkRPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdFBPRE9iaigpOworICAgIGV4cGxpY2l0IFdlYkRP
TVRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiopOworICAgIFdlYkRPTVRlc3RQT0RPYmoo
Y29uc3QgV2ViRE9NVGVzdFBPRE9iaiYpOworICAgIH5XZWJET01UZXN0UE9ET2JqKCk7CisKKyAg
ICBmbG9hdCByZWFkT25seUZsb2F0QXR0cigpIGNvbnN0OworICAgIFdlYkRPTVN0cmluZyBzdHJp
bmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmlu
ZyYpOworCisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgc3RydWN0IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRlOworICAgIFdlYkRPTVRlc3RQ
T0RPYmpQcml2YXRlKiBtX2ltcGw7Cit9OworCitXZWJDb3JlOjpUZXN0UE9ET2JqKiB0b1dlYkNv
cmUoY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYpOworV2ViRE9NVGVzdFBPRE9iaiB0b1dlYktpdChX
ZWJDb3JlOjpUZXN0UE9ET2JqKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXgg
ZWZiMzYyYmJhM2VlZGQzZjNhMWE4YjRlN2I0ZTVlNjcwMzI3MDA2OS4uMWFhNzNiYmQ3NDQwNTIz
YjgyNThmMjkxYzZhODUzNzc5M2JlOTc4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgpAQCAtMTU1LDE0
ICsxNTYsNTcgQEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxf
YXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHMKIH0KIAogdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKQord2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZywgR0Vycm9yICoq
ZXJyb3IpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNl
cmlhbGl6ZWRfYXJnKTsKICAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252
ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOwogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKLSAgICBpdGVtLT5z
ZXJpYWxpemVkVmFsdWUoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoY29u
dmVydGVkX3NlcmlhbGl6ZWRfYXJnLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNvcmU6Omdl
dEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7Cisg
ICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRf
YXJnID0gV2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7CisgICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlTm9S
YWlzZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworfQorCitXZWJLaXRET01TZXJpYWxpemVk
U2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVy
bl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVjKSk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2M7CisgICAgICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywg
ZWNkZXNjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
KyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
KTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUq
IAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlzZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSk7CisgICAgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiA+KFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CisgICAg
cmV0dXJuIHJlczsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCA4ZGNkOGMzMWUzMzYz
YmU3MjQ4YTM3NWI1OTcyYTUxNjk3MDBjMzk3Li4wOGQwNTVmOGE3MTY4MjAwZjJjZmQ0YzZhNTQ5
MzRmMzBlNzNiMTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzEsNyArNzEsMTYgQEAgV0VCS0lU
X0FQSSBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9y
ZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdjaGFy
KiAgc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogIG9ial9hcmcsIEdFcnJvciAqKmVycm9yKTsK
IAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAg
c2VyaWFsaXplZF9hcmcpOword2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3Jh
aXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqICBzZXJpYWxpemVkX2FyZywgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9ub19yYWlzZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVk
X2FyZyk7CisKK1dFQktJVF9BUEkgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAKK3dl
YmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fcmFpc2VzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKKworV0VCS0lUX0FQSSBXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3Zh
bHVlX3JldHVybl9ub19yYWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAogV0VCS0lUX0FQ
SSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MmUzY2Y2YjcxYzY4OTU2N2NiYjgyMmJmYmNkOTc0ZTZmZDQxMzRkCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0UE9ET2JqLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RQT0RPYmouaCIKKyNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRt
YXJzaGFsLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKyAgICAKK2dwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0UE9ET2JqKiBvYmopCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBE
T01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1
cm4gRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RQT0RPYmoob2JqKSk7
Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KKworZ2Zsb2F0Cit3ZWJraXRfZG9t
X3Rlc3RfcG9kX29ial9nZXRfcmVhZF9vbmx5X2Zsb2F0X2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9i
aiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQg
cmVzID0gaXRlbS0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCitn
Y2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9N
VGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
KyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cigpKTsK
KyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZiwgZ2NoYXIqICB2YWx1ZSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJDb3JlOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7
Cit9CisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0UE9ET2JqLCB3ZWJraXRfZG9tX3Rl
c3RfcG9kX29iaiwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9iaiogcmVxdWVz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYkNv
cmU6OlRlc3RQT0RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0UE9E
T2JqKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfUkVBRF9PTkxZX0ZMT0FUX0FUVFIsCisgICAgUFJPUF9TVFJJTkdfQVRUUiwKK307CisKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAg
ICAgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRlc3RQT0RPYmogKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2Jq
ZWN0LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwor
ICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TVRlc3RQT0RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihvYmplY3QpOworICAg
IFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7Cisg
ICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgo
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKG9i
amVjdCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWV9G
TE9BVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGNvcmVT
ZWxmLT5yZWFkT25seUZsb2F0QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHIoKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfY2xh
c3NfaW5pdChXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2Zp
bmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0
X3BvZF9vYmpfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1JFQURfT05MWV9GTE9BVF9BVFRSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJyZWFkLW9ubHktZmxvYXQt
YXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRlc3RfcG9kX29ial9yZWFkLW9ubHktZmxvYXQtYXR0ciIs
IC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdmbG9hdCBUZXN0UE9ET2Jq
LnJlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4
dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULCAvKiBtaW4gKi8KK0dfTUFYRkxP
QVQsIC8qIG1heCAqLworMC4wLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJJTkdfQVRUUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInN0
cmluZy1hdHRyIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9wb2Rfb2JqX3N0cmluZy1hdHRyIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdjaGFyKiAgVGVzdFBPRE9iai5z
dHJpbmctYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1
ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9pbml0KFdl
YktpdERPTVRlc3RQT0RPYmoqIHJlcXVlc3QpCit7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NVGVzdFBPRE9iaiogd3JhcFRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiog
Y29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsK
KyAgICAKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiB3cmFwcGVyID0gV0VCS0lUX0RPTV9URVNU
X1BPRF9PQkooZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIE5VTEwp
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3cmFwcGVyLCAwKTsKKworICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKworICAgIGNvcmVPYmplY3QtPnJlZigpOworICAgIFdF
QktJVF9ET01fT0JKRUNUKHdyYXBwZXIpLT5jb3JlT2JqZWN0ID0gY29yZU9iamVjdDsKKworCisg
ICAgcmV0dXJuIHdyYXBwZXI7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9i
ai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZlYWMzZWMxNzA1MTFlNjFhYjU3ZjFmNmQ1ZTc0MmQwMWJi
YTkxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0UE9ET2JqX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5o
IgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCisKKworR19CRUdJTl9E
RUNMUworI2RlZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKICAgICAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9QT0RfT0JKKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIFdlYktpdERPTVRlc3RQT0RPYmopKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKLCBX
ZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9QT0Rf
T0JKKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0RPTV9URVNUX1BPRF9PQkopKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfUE9E
X09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1BPRF9P
QkpfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSiwgV2ViS2l0RE9NVGVzdFBPRE9iakNsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01UZXN0UE9ET2JqIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9yZWFkX29ubHlfZmxvYXRfYXR0
cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKTsKKworV0VCS0lUX0FQSSBnY2hhciogCit3ZWJr
aXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiog
c2VsZik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0
cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYsIGdjaGFyKiAgdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVGVzdFBPRE9ial9oICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQ
T0RPYmpQcml2YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM5NWU3MWQ3ZmRiZmNiODdj
ZWY1MDk4NjE0M2U1NWQ3ZWMxNzMxZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV0VCX0tJVF9E
T01fVEVTVF9QT0RfT0JKX1BSSVZBVEVfSAorI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX1BPRF9P
QkpfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCituYW1lc3BhY2Ug
V2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqICoKKyAgICB3cmFwVGVzdFBPRE9iaihX
ZWJDb3JlOjpUZXN0UE9ET2JqICpjb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OlRlc3RQT0RP
YmogKgorICAgIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9iaiAqcmVxdWVzdCk7CisKKyAgICBncG9p
bnRlcgorICAgIGtpdChXZWJDb3JlOjpUZXN0UE9ET2JqKiBub2RlKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX1BPRF9PQkpfUFJJVkFURV9I
ICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApp
bmRleCAzNjA3ODJkODY4ZjVhZGIwMTFlYzczMzgwNmY0MjBhMTAzYWEyNWY1Li5mNjg0NjA5ZGRl
ODQxNmQ2ODczNWU5OTY3OTJiODI3ZmU4MTg3ZDVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEpT
VGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQogI2Vu
ZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJs
ZVZhbHVlc1szMF0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlVmFsdWVzWzMzXSA9CiB7CiAgICAgeyAidm9pZE1ldGhvZCIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKICAgICB7ICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKQEAgLTE1NCw3ICsxNTQsMTAgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiAgICAgeyAib2JqTWV0aG9kV2l0
aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyks
IChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAi
bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MpLCAoaW50cHRyX3Qp
MiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJzZXJpYWxpemVkVmFsdWUiLCBEb250RGVs
ZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUpLCAoaW50cHRyX3QpMSBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxpemVkVmFsdWVSYWlzZXMiLCBEb250RGVs
ZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSYWlzZXMpLCAoaW50cHRyX3Qp
MSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSksIChp
bnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJl
dHVyblJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZVJldHVyblJhaXNlcyksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsg
InNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKSwgKGludHB0cl90KTAgVEhVTktfR0VO
RVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJjdXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9S
KDApIH0sCkBAIC0xNzksNyArMTgyLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VO
RVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGUgPSB7IDY5LCA2MywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAg
fTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5
cGVUYWJsZSA9IHsgMTMxLCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07
CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2Jq
UHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0
KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQpAQCAtNzg0LDE5ICs3ODcsNjIgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3MKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCksICZlYyk7CisKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhzZXJpYWxp
emVkQXJnLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlz
ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXpl
ZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKIAotICAgIGltcC0+c2VyaWFsaXplZFZhbHVlKHNlcmlhbGl6
ZWRBcmcpOworICAgIGltcC0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShzZXJpYWxpemVkQXJnKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXpl
ZFZhbHVlUmV0dXJuUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0
cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzKGVjKSA/IGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVjKS0+ZGVzZXJp
YWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpIDoganNOdWxsKCk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworCisg
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlz
ZSgpID8gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCktPmRlc2VyaWFsaXplKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAz
YjIxYzg1NjAxYzBhMzdiN2NkZmZmMWVlNWZhMzYxNDEyOGE0NjcwLi4wMWQ3NDQ5MjQyNWRmMWI3
ZjY2YWI2MzM1MTI2Y2I5MmYyZmI0ZjExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtOTQsNyArOTQsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEpTQzo6
RXhlY1MKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUo
SlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWVSZXR1cm5Ob1JhaXNlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RPYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
Y2U4ODQ0YmM5MDc3YTZkNTBmMmU4ZjA4ODIzODliMzIzOTc5MTE2Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcApAQCAt
MCwwICsxLDIwMSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNUZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKEpTVGVzdFBPRE9iaik7CisKKy8qIEhhc2ggdGFibGUgKi8KKyNpZiBF
TkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRv
cgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorCitz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9ET2JqVGFibGVWYWx1ZXNbNF0gPQor
eworICAgIHsgInJlYWRPbmx5RmxvYXRBdHRyIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFBPRE9i
alJlYWRPbmx5RmxvYXRBdHRyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisg
ICAgeyAic3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0UE9ET2JqU3RyaW5nQXR0ciksIChpbnRwdHJf
dClzZXRKU1Rlc3RQT0RPYmpTdHJpbmdBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsg
ImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RQT0RPYmpDb25zdHJ1Y3RvciksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgMCwgMCwgMCwgMCBUSFVOS19H
RU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19D
T05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9ialRhYmxlID0geyA4LCA3LCBKU1Rl
c3RQT0RPYmpUYWJsZVZhbHVlcywgMCB9OworLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3Ig
Ki8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAs
IGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNl
bmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9ET2JqQ29uc3RydWN0
b3JUYWJsZVZhbHVlc1sxXSA9Cit7CisgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigw
KSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hU
QUJMRSBIYXNoVGFibGUgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNU
ZXN0UE9ET2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworY2xhc3MgSlNUZXN0UE9ET2Jq
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHVibGljOgorICAg
IEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZpcnR1
YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2lu
Zm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RQT0RPYmpDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFBPRE9iakNvbnN0cnVjdG9yIiwgMCwgJkpTVGVzdFBP
RE9iakNvbnN0cnVjdG9yVGFibGUsIDAgfTsKKworSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OkpT
VGVzdFBPRE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTVGVzdFBPRE9iakNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK2Jvb2wgSlNUZXN0UE9ET2JqQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZVNsb3Q8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywg
JkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK2Jvb2wgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1
ZURlc2NyaXB0b3I8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgJkpT
VGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworI2lmIEVOQUJMRShKSVQp
CisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQor
I2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisKK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1sxXSA9Cit7
CisgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Cit9OworCisjdW5kZWYgVEhV
TktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0
UE9ET2JqUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdFBPRE9ialByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJUZXN0UE9ET2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdFBPRE9ialByb3RvdHlwZVRh
YmxlLCAwIH07CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBn
ZXRET01Qcm90b3R5cGU8SlNUZXN0UE9ET2JqPihleGVjLCBnbG9iYWxPYmplY3QpOworfQorCitj
b25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2JqOjpzX2luZm8gPSB7ICJUZXN0UE9ET2JqIiwgMCwg
JkpTVGVzdFBPRE9ialRhYmxlLCAwIH07CisKK0pTVGVzdFBPRE9iajo6SlNUZXN0UE9ET2JqKE5v
bk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4g
PiBpbXBsKQorICAgIDogRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCisgICAgLCBtX2ltcGwoaW1wbCkKK3sKK30KKworSlNUZXN0UE9ET2JqOjp+SlNU
ZXN0UE9ET2JqKCkKK3sKKyAgICBmb3JnZXRET01PYmplY3QodGhpcywgaW1wbCgpKTsKK30KKwor
SlNPYmplY3QqIEpTVGVzdFBPRE9iajo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gbmV3IChleGVjKSBK
U1Rlc3RQT0RPYmpQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBKU1Rlc3RQT0RPYmpQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisK
K2Jvb2wgSlNUZXN0UE9ET2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBPRE9iaiwgQmFzZT4oZXhlYywgJkpT
VGVzdFBPRE9ialRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpT
VGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RQT0RPYmos
IEJhc2U+KGV4ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAg
IEpTVGVzdFBPRE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdFBPRE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RQT0RP
YmogaW1wKCpjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gIGpzTnVt
YmVyKGV4ZWMsIGltcC5yZWFkT25seUZsb2F0QXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitKU1ZhbHVlIGpzVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkp
OworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0UE9ET2JqIGltcCgqY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9ICBqc1N0cmluZyhleGVjLCBpbXAuc3Ry
aW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGpzVGVzdFBPRE9i
akNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0UE9ET2JqKiBkb21PYmplY3QgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIHJldHVybiBKU1Rlc3RQT0RP
Ymo6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOworfQor
dm9pZCBKU1Rlc3RQT0RPYmo6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIGxvb2t1cFB1dDxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgc2xvdCk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0
UE9ET2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdFBPRE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdFBPRE9iaio+KHRoaXNPYmplY3QpOworICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8
VGVzdFBPRE9iaj4gKiBpbXAgPSBzdGF0aWNfY2FzdDxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQ
T0RPYmo+ICo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgVGVzdFBPRE9iaiBwb2RJbXAoKmlt
cCk7CisgICAgcG9kSW1wLnNldFN0cmluZ0F0dHIodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
ZXhlYywgdmFsdWUpKTsKKyAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMp
OworfQorCitKU1ZhbHVlIEpTVGVzdFBPRE9iajo6Z2V0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4
dCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1Rlc3RQT0RPYmosIEpTU1ZH
UE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCwg
Y29udGV4dCk7Cit9CitUZXN0UE9ET2JqIHRvVGVzdFBPRE9iaihKU0M6OkpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RQT0RPYmo6OnNfaW5mbykgPyAo
VGVzdFBPRE9iaikgKnN0YXRpY19jYXN0PEpTVGVzdFBPRE9iaio+KGFzT2JqZWN0KHZhbHVlKSkt
PmltcGwoKSA6IFRlc3RQT0RPYmooKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RPYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGU0ZmZlYmE1NDMxYjVj
ODk4ZjE5NTE5YzU0MjU2OWY4MzZjN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmgKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdFBPRE9ial9oCisjZGVmaW5lIEpT
VGVzdFBPRE9ial9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU1NW
R1BPRFR5cGVXcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0V2l0aEds
b2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0UE9ET2JqIDogcHVibGljIERPTU9iamVj
dFdpdGhHbG9iYWxQb2ludGVyIHsKKyAgICB0eXBlZGVmIERPTU9iamVjdFdpdGhHbG9iYWxQb2lu
dGVyIEJhc2U7CitwdWJsaWM6CisgICAgSlNUZXN0UE9ET2JqKE5vbk51bGxQYXNzUmVmUHRyPEpT
Qzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlw
ZVdyYXBwZXI8VGVzdFBPRE9iaj4gPik7CisgICAgdmlydHVhbCB+SlNUZXN0UE9ET2JqKCk7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNT
bG90Q291bnQpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNTVkdQT0RU
eXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0
KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9E
T2JqPiA+IG1faW1wbDsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qLCBTVkdF
bGVtZW50Kik7CitUZXN0UE9ET2JqIHRvVGVzdFBPRE9iaihKU0M6OkpTVmFsdWUpOworCitjbGFz
cyBKU1Rlc3RQT0RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxP
YmplY3QgeworICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7
CisgICAgfQorICAgIEpTVGVzdFBPRE9ialByb3RvdHlwZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUp
IDogSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
IHsgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkpT
VmFsdWUganNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFBP
RE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
UE9ET2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCBk
ODg2MmRhMTVlYWM0ZTgxYTJlYjExYWJlYTNhMDVkMzNmYjJjMWJiLi43ODNhMjY3MTFiMmYyNWQ0
YWM2ZWYyZjFiYmE4NDc0NGQ3ZDFjZDEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtOTgsNyArOTgsMTAgQEAKIC0gKERPTVRlc3RP
YmogKilvYmpNZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3Ry
QXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRlc3RPYmogKiltZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmog
KilvYmpBcmc7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93czooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwotLSAo
dm9pZClzZXJpYWxpemVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKKy0gKHZvaWQp
c2VyaWFsaXplZFZhbHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7CistICh2b2lk
KXNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2U6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKKy0gKE5T
U3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzOworLSAoTlNTdHJpbmcgKilzZXJp
YWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlOwogLSAodm9pZCltZXRob2RXaXRoRXhjZXB0aW9uOwog
LSAodm9pZCljdXN0b21NZXRob2Q7CiAtICh2b2lkKWN1c3RvbU1ldGhvZFdpdGhBcmdzOihpbnQp
aW50QXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2Jq
QXJnOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0T2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2Jq
Lm1tCmluZGV4IDliYmJmMTQ0YjdlZTY5ZmI5NmE0MGY0MTQ5ZDgwNTk0Y2VmN2RmYjguLjE5Nzlh
MzhiY2U5NWZmZjA5NzQ1YzgxYTc3ZGJhZjUzODI0MGI1NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAgLTQ0NSwxMCArNDQ1LDMz
IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLSAodm9pZClzZXJpYWxpemVkVmFsdWU6KE5T
U3RyaW5nICopc2VyaWFsaXplZEFyZworLSAodm9pZClzZXJpYWxpemVkVmFsdWVSYWlzZXM6KE5T
U3RyaW5nICopc2VyaWFsaXplZEFyZwogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgSU1QTC0+c2VyaWFsaXplZFZh
bHVlUmFpc2VzKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6
OlN0cmluZyhzZXJpYWxpemVkQXJnKSksIGVjKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJy
b3IoZWMpOworfQorCistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2U6KE5TU3RyaW5nICop
c2VyaWFsaXplZEFyZworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworfQor
CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcworeworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBOU1N0cmluZyAqcmVzdWx0ID0ga2l0KFdURjo6Z2V0UHRyKElNUEwt
PnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9u
RE9NRXJyb3IoZWMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TU3RyaW5nICopc2Vy
aWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnNlcmlhbGl6
ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSkpOwogfQogCiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRp
b24KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9E
T2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTE0NTZhNjZjNzVmOTRiZWIwMTYwYTc3N2M4YzkwYWQwYjliNzJi
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdA
Z21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCisjaWYg
V0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK0Bj
bGFzcyBOU1N0cmluZzsKKworQGludGVyZmFjZSBET01UZXN0UE9ET2JqIDogRE9NT2JqZWN0Cist
IChmbG9hdClyZWFkT25seUZsb2F0QXR0cjsKKy0gKE5TU3RyaW5nICopc3RyaW5nQXR0cjsKKy0g
KHZvaWQpc2V0U3RyaW5nQXR0cjooTlNTdHJpbmcgKiluZXdTdHJpbmdBdHRyOworQGVuZAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdFBPRE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dFBPRE9iai5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjViNTFkMzkxNDBmZTY4YTJiMzQ0MWViYjg0YjAxZTQy
ZWY0OWQxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0UE9ET2JqLm1tCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisK
KyNpbXBvcnQgIkRPTVRlc3RQT0RPYmouaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgi
CisjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0ICJE
T01UZXN0UE9ET2JqSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisj
aW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBv
cnQgIlRlc3RQT0RPYmouaCIKKyNpbXBvcnQgIlRocmVhZENoZWNrLmgiCisjaW1wb3J0ICJXZWJD
b3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgorI2lt
cG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJD
b3JlOjpUZXN0UE9ET2JqKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdFBP
RE9iagorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURl
YWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RQT0RPYmogY2xhc3NdLCBzZWxmKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZGVsZXRlIElNUEw7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistICh2b2lkKWZpbmFsaXplCit7CisgICAgZGVsZXRlIElNUEw7CisgICAgW3N1cGVyIGZpbmFs
aXplXTsKK30KKworLSAoZmxvYXQpcmVhZE9ubHlGbG9hdEF0dHIKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnJlYWRPbmx5Rmxv
YXRBdHRyKCk7Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nQXR0cgoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+c3RyaW5nQXR0
cigpOworfQorCistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3RyaW5nICopbmV3U3RyaW5nQXR0
cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBM
LT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRl
c3RQT0RPYmogY29yZShET01UZXN0UE9ET2JqICp3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFw
cGVyID8gKnJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdFBPRE9iaio+KHdyYXBwZXItPl9p
bnRlcm5hbCkgOiBXZWJDb3JlOjpUZXN0UE9ET2JqKCk7Cit9CisKK0RPTVRlc3RQT0RPYmogKmtp
dChXZWJDb3JlOjpUZXN0UE9ET2JqIHZhbHVlKQoreworICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RI
UkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OworICAgIERP
TVRlc3RQT0RPYmogKndyYXBwZXIgPSBbW0RPTVRlc3RQT0RPYmogYWxsb2NdIF9pbml0XTsKKyAg
ICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFs
Kj4obmV3IFdlYkNvcmU6OlRlc3RQT0RPYmoodmFsdWUpKTsKKyAgICByZXR1cm4gW3dyYXBwZXIg
YXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwuaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRjZWIwY2Ri
M2NkZTNjNDc0YWUxYzRlM2M1NDQ5OTY4YzA5ZmQwYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVybmFsLmgKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNv
cmUvRE9NVGVzdFBPRE9iai5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0g
V0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBU
ZXN0UE9ET2JqOworfQorCitXZWJDb3JlOjpUZXN0UE9ET2JqIGNvcmUoRE9NVGVzdFBPRE9iaiAq
KTsKK0RPTVRlc3RQT0RPYmogKmtpdChXZWJDb3JlOjpUZXN0UE9ET2JqKTsKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IGVmNGRiMTA2ZjA3
NDY2Zjg0MjU5NDE0ZDg5ZDlkMDQ5ZjY5ODQyMjIuLjdmMGMzZmRmOGY4MGY1NDlhNGYxYzFmNTlk
MTk3N2I3ZmMyNTA3NzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCkBAIC02Miw3ICs2MiwxMSBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIFtSZXF1aXJlc0Fs
bEFyZ3VtZW50cz1SYWlzZV0gVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhy
b3dzKGluIERPTVN0cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2JqQXJnKQogICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKLSAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoaW4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOworICAgICAgICAvLyBUZXN0IHZh
cmlvdXMgZm9ybXMgb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlCisgICAgICAgIHZvaWQgc2VyaWFs
aXplZFZhbHVlUmFpc2VzKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVOb1JhaXNl
KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAgICAgU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZFZhbHVl
UmV0dXJuTm9SYWlzZSgpOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbnMKICAgICAgICAgdm9pZCBt
ZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYmMwNWJmYTE5
NmNkYTQ4N2I0NDM4ZmU1NWFhYjA4MTAwOGY5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbApAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
c3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNv
ZGUgZ2VuZXJhdG9yIGFuZCBmb3IgdHJhY2tpbmcKKy8vIGNoYW5nZXMgaW4gaXRzIG91cHV0Lgor
bW9kdWxlIHRlc3QgeworICAgIGludGVyZmFjZSBbUE9EVHlwZT1UZXN0UE9ET2JqXSBUZXN0UE9E
T2JqIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0ICAgICAgICAgIHJlYWRPbmx5
RmxvYXRBdHRyOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgc3RyaW5nQXR0cjsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGE1NGFlMzQwOTUzNzQw
NDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uY2MwOWQ1ZTZhZWVlMWJlZTIzNmI2YzM4OTBjNzIw
NjVhZTFiZTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwCkBAIC01NjEsMTggKzU2MSw1OCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2OAog
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSYWlz
ZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyA9IGZhbHNlOwogICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVkQXJnRGlkVGhyb3cpOwogICAgIGlmIChzZXJp
YWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
aW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVk
VmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cisg
ICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVO
b1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJn
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoYXJnc1swXSk7
CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKHNlcmlhbGl6ZWRBcmcpOworICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZh
bHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0gaW1wLT5zZXJpYWxpemVkVmFs
dWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKS0+ZGVzZXJpYWxpemUoKTsKKyAgICB9
CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1
ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKQEAg
LTk0Niw3ICs5ODYsMTAgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2Fs
bGJhY2tzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9kIiwgVGVzdE9iakludGVybmFsOjp2b2lkTWV0
aG9kQ2FsbGJhY2t9LAogICAgIHsiaW50TWV0aG9kIiwgVGVzdE9iakludGVybmFsOjppbnRNZXRo
b2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhv
ZENhbGxiYWNrfSwKLSAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2Vy
aWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmFpc2VzIiwgVGVz
dE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFja30sCisgICAgeyJzZXJp
YWxpemVkVmFsdWVOb1JhaXNlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVOb1Jh
aXNlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIiwgVGVzdE9i
akludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFja30sCisgICAgeyJz
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVk
VmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIs
IFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7ImN1
c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiY3Vz
dG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJh
Y2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9i
ai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThmNmIwZWVmYmI1YTExOTYxNTE0MDYzNjJmNzJl
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0UE9ET2JqOjppbmZvID0geyBW
OFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0LCAwIH07
CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVh
ZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RQT0RP
YmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOworICAgIFRlc3RQT0RPYmoqIGltcCA9IFY4VGVz
dFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6
Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7CisgICAgVGVzdFBPRE9iaiogaW1wID0gVjhUZXN0
UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFBP
RE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0UE9ET2JqKiBpbXAgPSBWOFRlc3RQT0RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hl
Y2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0cmluZ0F0dHIodik7CisgICAgcmV0dXJuOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJzW10gPSB7CisgICAgLy8gQXR0cmlidXRlICdy
ZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnJlYWRPbmx5
RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmlu
Z0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVy
LCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVG
QVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8q
IG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJl
PiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RQT0RPYmoi
LCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0UE9ET2JqOjpp
bnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RQT0RPYmpBdHRycywgc2l6ZW9mKFRlc3RQ
T0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RPYmpBdHRycyksCisgICAgICAgIDAsIDApOwor
ICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdl
dFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJldHVybiBkZXNj
OworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2Jq
OjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdDYWNoZSA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0NhY2hlOworfQorCit2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSgpCit7CisgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpD
YWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOwor
ICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsKK30KKworVjhTVkdQT0RUeXBlV3JhcHBlcjxU
ZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOFNWR1BPRFR5cGVXcmFw
cGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9vbCBWOFRlc3RQT0RPYmo6Okhhc0luc3Rh
bmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3VGVt
cGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qIGlt
cGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworICAgIFY4UHJveHkq
IHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBs
KTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB3
cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
cHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgZ2V0RE9NT2JqZWN0TWFw
KCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBpbXBsKQoreworICAgIHJl
dHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChW
OFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9iajo6d3Jh
cChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVj
dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4o
b2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2MmE3ZWQ5OGYzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmgKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYgVjhUZXN0UE9ET2JqX2gK
KyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVk
ZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXI7
CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBIYXNJ
bnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7Cisg
ICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+KiB0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+Kik7CisgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4qKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4gPik7Cit9
CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDhlOTE5MjA5MGM2NDZlNWI1YTRjNDUyNTMwNTg3
Mzc2ZTMzM2RkOWIuLmIxZGY2YzIxNTcwMDBhNGI0YzFjYjNkOGQ2ZTFlNDYzM2IxNzkzMjkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEw
MjMsMTMgKzEwMjMsMjQgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXpl
QW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmoKIAogUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2NyaXB0VmFsdWUgPSBhZG9wdFJlZihuZXcg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKHNjcmlwdFZhbHVlLT5tX2Rh
dGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VSUik7Cisg
ICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlkVGhyb3cgPSBm
YWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAgIGJvb2wgZGlkVGhyb3c7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7
CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlkVGhyb3cpOworfQorCitQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0
VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CiB9CiAKIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKFN0cmluZyBkYXRhKQpAQCAtMTA1OCwxNyArMTA2OSwxMiBAQCBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7Ci0gICAgZGlkVGhyb3cgPSBmYWxz
ZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNlcmlhbGl6ZXIgc2VyaWFsaXplcih3cml0ZXIp
OwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKSB7Ci0gICAgICAgIHRocm93
RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAgICBkaWRUaHJvdyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVy
LmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSkKKyAgICAgICAg
bV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CiB9CiAKIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdE
YXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2NTBlYTUwOGIwMmI0N2U5ZTBkMi4uYjVmNWY1
NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2JlOGM4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHxkaWRUaHJvd3wg
aXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdyk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdp
cmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBi
b29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc051bGwoKTsg
fQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2YWx1ZSAoaW4gdGhlIGN1cnJlbnQgY29udGV4
dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAgICAgLy8gY2FzZSBvZiBmYWlsdXJlLgogICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlhbGl6ZSgpOwpAQCAtNjgsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKLSAgICBTZXJp
YWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBib29sJiBkaWRUaHJvdyk7
CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVl
Pik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9k
ZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Q
b3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IGI5
YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFjNzlkMTA5YzguLjc5MmZiMzRkZmI2MDU0NjNk
MTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRl
RXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCkBAIC0zNyw4ICsz
Nyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewogfQogICAgIAotdm9pZCBQb3BTdGF0ZUV2ZW50
Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
dGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMsIHRydWUpOwogICAgIGlmIChkaXNwYXRjaGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAppbmRleCAyZmI4ZDA2ODVi
ZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIyLi43MTFmMGI1ZGFhOWI5NzAwOWI5NjFjMWE5
YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgK
KysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHN0YXRlT2JqZWN0
KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIGJv
b2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0
KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBiL1dl
YkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmluZGV4IGFkYzkwNzRlYzRmZWIwNzAwODc2NzNm
NmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdiZDA5YTY1ODVmOWMyZjU4MDBlYjMyMGM4MTYz
ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCisrKyBiL1dlYkNv
cmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0yOSw5ICsyOSw5IEBAIG1vZHVsZSBldmVudHMg
ewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIGludGVy
ZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lkIGluaXRQb3BTdGF0ZUV2
ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGVBcmcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdGF0ZUFyZykgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdl
dHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59405</attachid>
            <date>2010-06-22 12:38:23 -0700</date>
            <delta_ts>2010-06-28 03:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100622203820.patch</filename>
            <type>text/plain</type>
            <size>100018</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNGY2NWNjNzJkYzlmZDNkOWRhOWMxMTkyZTE1NzQwZDkyOTFhZDhkLi4yZjkyOWJi
MDIyNTg2OTlkODBlNDUyNjAwZjQ4YzQ1ZGM2MDA3MDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjIgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRl
b2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYyZGM1ZGFhYjA5MjQ0YTUxYzMzOWYyMThjMTg1YzBkNTkwOGJhZDQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0
YXRlZXZlbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0OgorLSBDaGVj
a3MgdGhhdCBpbml0UG9wU3RhdGVFdmVudCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gc3RhdGVB
cmcgY2FuJ3QgYmUgc2VyaWFsaXplZC4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0
aG91dCBleGNlcHRpb24gZm9yIHVuZGVmaW5lZC4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFs
dWUgd2l0aG91dCBleGNlcHRpb24gZm9yIGVtcHR5IGFycmF5LgorUEFTUyBzZXJpYWxpemVkIHNj
cmlwdCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVl
dmVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMDU4MTExZDE5MWVmOWMzOTViYzA1YTU1NjMzOTU3N2Fk
N2Y1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9i
amVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRtbApAQCAtMCwwICsxLDQyIEBACis8c2NyaXB0Pgor
ZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2Vy
IikuaW5uZXJIVE1MICs9IHR4dCArICI8YnI+IjsKK30KKworZnVuY3Rpb24gc3RhdGVQb3BwZWQo
KQoreworICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgdW5k
ZWZpbmVkKTsKKyAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBl
eGNlcHRpb24gZm9yIHVuZGVmaW5lZC4iKTsKKyAgICB2YXIgYSA9IHt9OworICAgIGV2ZW50Lmlu
aXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgYSk7CisgICAgbG9nKCJQQVNTIHNl
cmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciBlbXB0eSBhcnJheS4i
KTsKKyAgICBhLmN5Y2xlID0gYTsKKyAgICB0cnkgeworICAgICAgZXZlbnQuaW5pdFBvcFN0YXRl
RXZlbnQoInRlc3QiLCB0cnVlLCB0cnVlLCBhKTsKKyAgICAgIGxvZygiRkFJTCBzZXJpYWxpemVk
IHNjcmlwdCB2YWx1ZSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBkdWUgdG8gYSBjeWNsZS4i
KTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGxvZygiUEFTUyBzZXJpYWxpemVkIHNjcmlw
dCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuIik7CisgICAgfQorICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPGJvZHkgb25wb3Bz
dGF0ZT0ic3RhdGVQb3BwZWQoKTsiPgorPHByZT4KK1RoaXMgdGVzdDoKKy0gQ2hlY2tzIHRoYXQg
aW5pdFBvcFN0YXRlRXZlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHN0YXRlQXJnIGNhbid0
IGJlIHNlcmlhbGl6ZWQuCis8L3ByZT4KKzxwcmUgaWQ9ImxvZ2dlciI+PC9wcmU+Cis8c2NyaXB0
PgoraGlzdG9yeS5yZXBsYWNlU3RhdGUoIkZpcnN0RW50cnkiLCBudWxsLCAiP0ZpcnN0RW50cnki
KTsKK2hpc3RvcnkucHVzaFN0YXRlKCJTZWNvbmRFbnRyeSIsIG51bGwsICI/U2Vjb25kRW50cnki
KTsKK2hpc3RvcnkuYmFjaygpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFs
aXplZC1zY3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDNiODlmMjk0MjYzODYwMWMwMGY5MGNlNWI3NzhhNmY4ZGU1OWQzYgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXpl
ZC1zY3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1Rlc3QgSW5kZXhl
ZERCJ3Mgb3BlbkN1cnNvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4
ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0aW9uJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVz
dWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdhYm9y
dCcgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVl
CitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK29wZW5TdWNjZXNzCitTdWNjZXNz
IGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2Rl
JyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BB
U1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBp
cyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdv
bmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIGV2ZW50LnRh
cmdldCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCitkYiA9
IGV2ZW50LnJlc3VsdAorZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3QnKQorUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
K1BBU1MgJ2Fib3J0JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVz
dWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworY3JlYXRlT2Jq
ZWN0U3RvcmVTdWNjZXNzCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2Fn
ZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFT
UyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAnYWJvcnQnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBp
biBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBl
dmVudC50YXJnZXQuRE9ORQorCitvYmplY3RTdG9yZSA9IGV2ZW50LnJlc3VsdApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlw
dC12YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJp
YWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhODNkYmY2NGExMTUwNDIwYTI1
OTcyNTRlNGMxYjdlMjhkNDlmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCmluZGV4IDgwOWJk
ZWNiZTNjMGViYjBjNTdmZjRlYmU2ODIzNzVjMWM2MGJmMjcuLmMxZTJjNmRiZGQ2NjAwYTAzMzA2
MjIxZjdmNmQ2MzU5YjFjMjExNGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwpAQCAtNDYsNiArNDYsMTUgQEAgZnVuY3Rpb24gdmVy
aWZ5UmVzdWx0KHJlc3VsdCkKICAgICBkZWJ1ZygiIik7CiB9CiAKKworZnVuY3Rpb24gdW5leHBl
Y3RlZFN1Y2Nlc3NDYWxsYmFjaygpCit7CisgICAgdGVzdEZhaWxlZCgiU3VjY2VzcyBmdW5jdGlv
biBjYWxsZWQgdW5leHBlY3RlZGx5OiAoIiArIGV2ZW50LmNvZGUgKyAiKSAiICsgZXZlbnQubWVz
c2FnZSk7CisgICAgZGVidWcoIiIpOworICAgIHZlcmlmeVJlc3VsdChldmVudCk7CisgICAgZG9u
ZSgpOworfQorCiBmdW5jdGlvbiB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaygpCiB7CiAgICAgdGVz
dEZhaWxlZCgiRXJyb3IgZnVuY3Rpb24gY2FsbGVkIHVuZXhwZWN0ZWRseTogKCIgKyBldmVudC5j
b2RlICsgIikgIiArIGV2ZW50Lm1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWFk
ZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGQ5OWRkOWU5NzExODZm
MjQzNGI2MjlmMGM2MjM5OWQxZTlhODY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQt
dmFsdWUuanMKQEAgLTAsMCArMSw1MiBAQAorZGVzY3JpcHRpb24oIlRlc3QgSW5kZXhlZERCJ3Mg
b3BlbkN1cnNvci4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBzZXJpYWxpemVk
U2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2soKQoreworICAgIGRlYnVnKCJzZXJpYWxp
emVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2siKTsKKyAgICB2ZXJpZnlFcnJvckV2
ZW50KGV2ZW50KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZU9iamVjdFN0b3JlU3VjY2VzcygpCit7CisgICAgZGVidWcoImNyZWF0ZU9iamVjdFN0b3JlU3Vj
Y2VzcyIpOworICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgdmFyIG9iamVjdFN0
b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBldmVudC5yZXN1bHQiKTsKKyAgICB2YXIg
YSA9IHt9OworICAgIGEuY3ljbGUgPSBhOworICAgIHRyeSB7CisgICAgICAgIHJlc3VsdCA9IG9i
amVjdFN0b3JlLmFkZChhKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgib2JqU3RvcmUuYWRkIHRocmV3IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZXJyKTsK
KyAgICB9CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgbm90aWZ5IGRvbmUgYW5kIGNoZWNrIHRo
ZSBlcnJvciBjYWxsYmFjayBvbmNlIGFkZCBpcyBpbXBsZW1lbnRlZC4KKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgLy8gdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgLy8gcmVzdWx0Lm9u
c3VjY2VzcyA9IHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgLy8gcmVzdWx0Lm9uZXJy
b3IgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1
bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygib3BlblN1Y2Nlc3MiKTsKKyAgICB2
ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0g
ZXZlbnQucmVzdWx0Iik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3Rlc3QnKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5v
bnN1Y2Nlc3MgPSBjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAg
cmVzdWx0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24n
KSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBv
cGVuU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDE5MDlkZTc5YzExNWExYTM4MTQyMDhmZDdmYjAwMWJlNDU4N2IzNWIu
LmJhMDhkNGRhNzViNDc5NmM0MzAzNGNlZjUyOGJhMTMxODJjMGM4NGUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBA
CisyMDEwLTA2LTIyICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBvcnQg
Zm9yIHRocm93aW5nIGJlaGF2aW9yIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0byBiZSBzcGVj
aWZpZWQgaW4gdGhlIElETC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwODM1CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGdl
bmVyYXRlZCBiaW5kaW5ncyB3aWxsIGVpdGhlciB0aHJvdyBhbiBleGNlcHRpb24gb3IgYmUgc2ls
ZW50CisgICAgICAgIHdoZW4gY3JlYXRpbmcgYSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgYmFzZWQg
b24gdGhlIGNvcnJlc3BvbmRpbmcgSURMIGRlZmluaXRpb24uCisgICAgICAgIEl0IGFsc28gYWRk
cyBUZXN0UE9ET2JqLmlkbCB0byBleGVyY2lzZSB0aGUgYmluZGluZyBnZW5lcmF0b3IgZm9yIGlu
dGVyZmFjZXMgd2l0aCBbUE9EVHlwZT1dIGF0dHJpYnV0ZS4KKyAgICAgICAgVGVzdHM6IFdlYktp
dFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNl
cmlhbGl6ZWRWYWx1ZVJhaXNlcyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVk
VmFsdWVOb1JhaXNlKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJl
dHVyblJhaXNlcyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSZXR1
cm5Ob1JhaXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQ
T0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQ
T0RPYmpQcml2YXRlOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01U
ZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqKToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6
OmltcGwpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6fldlYkRPTVRlc3RQT0RPYmopOgor
ICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6cmVhZE9ubHlGbG9hdEF0dHIpOgorICAgICAgICAo
V2ViRE9NVGVzdFBPRE9iajo6c3RyaW5nQXR0cik6CisgICAgICAgIChXZWJET01UZXN0UE9ET2Jq
OjpzZXRTdHJpbmdBdHRyKToKKyAgICAgICAgKHRvV2ViQ29yZSk6CisgICAgICAgICh0b1dlYktp
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2Jq
Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVk
X3ZhbHVlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRf
dmFsdWVfbm9fcmFpc2UpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVk
X3ZhbHVlX3JldHVybl9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJp
YWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9y
ZWFkX29ubHlfZmxvYXRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9n
ZXRfc3RyaW5nX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0
cmluZ19hdHRyKToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfcG9kX29ial9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29i
al9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3By
b3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfaW5pdCk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0UE9ET2JqKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZVJldHVybk5vUmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2Jq
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0UE9ET2JqQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBl
OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6SlNUZXN0UE9ET2JqKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6fkpTVGVzdFBPRE9iaik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RQT0RPYmpTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFBPRE9iakNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdFBPRE9iaik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFBPRE9iajo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9i
ajo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6aW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OmNsYXNzSW5mbyk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OkpTVGVzdFBPRE9i
alByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW06CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmFpc2VzOl0pOgorICAg
ICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2U6XSk6CisgICAgICAgICgt
W0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzXSk6CisgICAgICAgICgtW0RP
TVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZV0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbTogQWRkZWQuCisgICAg
ICAgICgtW0RPTVRlc3RQT0RPYmogZGVhbGxvY10pOgorICAgICAgICAoLVtET01UZXN0UE9ET2Jq
IGZpbmFsaXplXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogcmVhZE9ubHlGbG9hdEF0dHJd
KToKKyAgICAgICAgKC1bRE9NVGVzdFBPRE9iaiBzdHJpbmdBdHRyXSk6CisgICAgICAgICgtW0RP
TVRlc3RQT0RPYmogc2V0U3RyaW5nQXR0cjpdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAo
a2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2Jq
SW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNl
c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXpl
ZFZhbHVlTm9SYWlzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5h
bDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpWOF9VU0UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdFBPRE9iakludGVybmFsOjpyZWFkT25seUZsb2F0QXR0ckF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9i
ajo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjp3cmFwKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2Jq
OjpkZXJlZk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRo
b3V0VGhyb3dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpz
ZXJpYWxpemF0aW9uRXJyb3IpOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBvcFN0YXRlRXZlbnQ6OmluaXRQb3BTdGF0ZUV2ZW50KToKKyAgICAg
ICAgKiBkb20vUG9wU3RhdGVFdmVudC5oOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50Lmlk
bDoKKwogMjAxMC0wNi0wNCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDkwZjhkN2NhY2RmNzQyYmQ1NzI0
ZjQ5YjBlMzhmYWU0YzRkOGFhZDYuLjA4OTAwNjI5NjFiYjVmOTY2ZDEyZDAwN2IxMjFmYjgzMDYw
YWUzY2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKQEAgLTk2Nyw2ICs5NjcsMzMgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp+U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKCkKIHsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IG5ldyBTZXJpYWxpemVkU2NyaXB0VmFs
dWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgJmVjKTsKKyAg
ICByZXR1cm4gc2VyaWFsaXplZFZhbHVlOworfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSogZWMpCit7CisgICAgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXplKGV4ZWMs
IHZhbHVlKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICplYyA9
IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgKmVjKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAqZWMgPSAwOworICAgIH0KKyAgICByZXR1cm4gc2VyaWFs
aXplZFZhbHVlOworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFs
dWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtOTc5LDcgKzEwMDYsNyBAQCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlND
b250ZXh0UmVmIG9yaQogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlOwogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA5M2Jk
MGRlOTA4NjRlZTdiZDJkMTkwNGMwZTIxMDAzNmIwODk0MzFjLi5lYTY4OWVlZjI5ODVlMmQ0Y2M4
ZDJkZDQ4YWU4NTkzMzdhYzEwNjJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgKQEAgLTE3NiwxMCArMTc2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6
c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSkpOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlV2l0aG91dFRocm93aW5nKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpOworCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUqIGVjKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDRlMmU5MTE5NDQ3ZjNiMDRlMDkzNTA5N2Q5
NjFlZmM2YmUwOWVkYjQuLmExN2UxYjg4MzNjZDIyNTU1MTdlY2E5MGIwZWIxYmE0MjZlYjBiM2Ug
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTcx
NiwxMyArMTcxNiwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGVxICJmbG9h
dCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNW
YWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZh
bHVlIiwgMCkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05h
dGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZElt
cC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgMCkgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpcyk7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgInZhbHVlIiwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXR0
ZXJFeHByZXNzaW9uUHJlZml4ID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb25QcmVm
aXgoXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CkBA
IC0xOTE2LDcgKzE5MTYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXNvbHZlciA9
IGN1c3RvbVJlc29sdmVyLmdldCgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUg
PSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAu
ICIgJG5hbWUgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KSIsIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgLiAiO1xuIik7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBp
bmRleCIgYW5kIGl0J3MgbmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJS
IGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRz
IHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVk
IGFuZCB0aGUgZmFjdCB0aGF0IGl0CkBAIC0yMjk4LDYgKzIyOTgsNyBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiB7CiAgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwogICAgIG15ICR2YWx1ZSA9IHNo
aWZ0OworICAgIG15ICRyYWlzZXMgPSBzaGlmdDsKIAogICAgIG15ICR0eXBlID0gJGNvZGVHZW5l
cmF0b3ItPlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOwogCkBAIC0yMzIzLDcgKzIzMjQs
OCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSIgb3IgJHR5cGUgZXEgImFueSIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3si
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgJHZhbHVlLCAmZWMpIiBpZiAoJHJhaXNl
cyk7CisgICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0
VGhyb3dpbmcoZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgJGltcGxJbmNsdWRlc3siRmxv
YXRQb2ludC5oIn0gPSAxIGlmICR0eXBlIGVxICJTVkdQb2ludCI7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBlMjQ5Y2FhYTNkYWFkMzlmYjU3ZmRk
MDYxNzdkMzk1ZjcyYjUxN2ExLi5hNjEyMDRjOWU5MDFlY2MwNzVhZGE4NzMyMzJlYTExOWE0MTkw
NmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAg
LTExOTAsMTcgKzExOTAsMTkgQEAgRU5ECiAKICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUg
ZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNlO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJh
bWV0ZXJOYW1lfURpZFRocm93ID0gZmFsc2U7XG4iKSBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpOwog
ICAgICAgICB9IGVsc2lmIChCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkg
ewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1l
dGVyTmFtZX1PaztcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlciwgJHBh
cmFtSW5kZXgpIC4gIiAkcGFyYW1ldGVyTmFtZSA9ICIpOwogCi0gICAgICAgIGlmICgkcGFyYW1l
dGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgIGlmICgkcGFy
YW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiICYmICRyYWlzZXNFeGNlcHRp
b25zKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sICR7cGFyYW1ldGVyTmFtZX1EaWRU
aHJvdyk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgICAg
ICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoYXJnc1skcGFyYW1JbmRleF0pO1xuIik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBKU1ZhbHVl
VG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhdIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1R5cGVDYW5GYWlsQ29u
dmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICI7
XG4iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmNwcAppbmRleCA2NWJjOWYzNmVlMzZlMjQyNWU0NjRlNzBhMGQ2MGRiZjUzNDlkM2E1
Li5kODgxNDdjY2E5Y2JkOTdiMzNhNTlmNDgzYjE5YmQ3ZmIwZmE4MGM3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCkBAIC01
NDEsMTIgKzU0MSw0MSBAQCBXZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFRoYXRS
ZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRP
TVN0cmluZyYgc2VyaWFsaXplZEFyZykKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZh
bHVlUmFpc2VzKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZykKIHsKICAgICBpZiAo
IWltcGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWUo
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNl
cmlhbGl6ZWRBcmcpKSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSwgZWMpOworICAgIHdl
YkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKK30K
Kwordm9pZCBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNvbnN0IFdlYkRP
TVN0cmluZyYgc2VyaWFsaXplZEFyZykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkp
OworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmlu
ZygpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViRE9NU3Ry
aW5nIHJlc3VsdCA9IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+c2VyaWFsaXplZFZhbHVl
UmV0dXJuUmFpc2VzKGVjKSkpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2Vi
RE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJET01T
dHJpbmcgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJl
dHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UoKSkpOwogfQogCiB2b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhFeGNlcHRpb24o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2Jq
LmgKaW5kZXggMzNiYzdmYmE1OWIyM2JmMGIzOTA3MzA2MjAzOGI1NTVlODIzMGY1Ny4uZWU5Njlk
YjhiMjk4MmQxY2NiYjcyNmQ0ZGEzNWM4NzNhNjE3YWMwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCkBAIC0xMDAsNyArMTAwLDEw
IEBAIHB1YmxpYzoKICAgICBXZWJET01UZXN0T2JqIG9iak1ldGhvZFdpdGhBcmdzKGludCBpbnRB
cmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpB
cmcpOwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBX
ZWJET01UZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2Vi
RE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7Ci0gICAgdm9p
ZCBzZXJpYWxpemVkVmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAg
ICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6
ZWRBcmcpOworICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb25zdCBXZWJET01TdHJp
bmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIFdlYkRPTVN0cmluZyBzZXJpYWxpemVkVmFsdWVSZXR1
cm5SYWlzZXMoKTsKKyAgICBXZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlz
ZSgpOwogICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpOwogICAgIHZvaWQgY3VzdG9tTWV0
aG9kKCk7CiAgICAgdm9pZCBjdXN0b21NZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2Jq
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2Jq
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YmMxNGQ4ZGY5NTQ5ODM5YjE0Yjc3NjA4YTI4NjQ0ZjNhZWYyNTA2
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RQT0RPYmouY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTVRlc3RQT0RPYmouaCIKKworI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUZXN0
UE9ET2JqLmgiCisjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0
aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK3N0cnVjdCBXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0
ZSB7CisgICAgV2ViRE9NVGVzdFBPRE9ialByaXZhdGUoV2ViQ29yZTo6VGVzdFBPRE9iaiogb2Jq
ZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9iamVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RQT0RPYmo+IGltcGw7Cit9OworCitXZWJET01UZXN0UE9ET2JqOjpX
ZWJET01UZXN0UE9ET2JqKCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkK
K3sKK30KKworV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0
UE9ET2JqKiBpbXBsKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2Vi
RE9NVGVzdFBPRE9ialByaXZhdGUoaW1wbCkpCit7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmo6Oldl
YkRPTVRlc3RQT0RPYmooY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYgY29weSkKKyAgICA6IFdlYkRP
TU9iamVjdCgpCit7CisgICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdFBP
RE9ialByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiog
V2ViRE9NVGVzdFBPRE9iajo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1f
aW1wbC0+aW1wbC5nZXQoKSA6IDA7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmo6On5XZWJET01UZXN0
UE9ET2JqKCkKK3sKKyAgICBkZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK2Zs
b2F0IFdlYkRPTVRlc3RQT0RPYmo6OnJlYWRPbmx5RmxvYXRBdHRyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5yZWFk
T25seUZsb2F0QXR0cigpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdFBPRE9iajo6c3Ry
aW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJE
T01TdHJpbmcoKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpTdHJp
bmcmPihpbXBsKCktPnN0cmluZ0F0dHIoKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdFBPRE9iajo6
c2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmluZ0F0dHIpCit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0U3RyaW5nQXR0
cihuZXdTdHJpbmdBdHRyKTsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiogdG9XZWJDb3JlKGNv
bnN0IFdlYkRPTVRlc3RQT0RPYmomIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1w
bCgpOworfQorCitXZWJET01UZXN0UE9ET2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoq
IHZhbHVlKQoreworICAgIHJldHVybiBXZWJET01UZXN0UE9ET2JqKHZhbHVlKTsKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2Jq
LmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM5NmVlMGU5NWZhNTRhMDEyNzgyZmEyZmVmMjE4ZmU5NGExYmM0NjgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
PHNhbS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVRlc3RQ
T0RPYmpfaAorI2RlZmluZSBXZWJET01UZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgPFdlYkRPTU9i
amVjdC5oPgorI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBUZXN0UE9ET2JqOworfTsKKworCitjbGFzcyBXZWJET01UZXN0UE9ET2JqIDogcHVi
bGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdFBPRE9iaigpOworICAg
IGV4cGxpY2l0IFdlYkRPTVRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiopOworICAgIFdl
YkRPTVRlc3RQT0RPYmooY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYpOworICAgIH5XZWJET01UZXN0
UE9ET2JqKCk7CisKKyAgICBmbG9hdCByZWFkT25seUZsb2F0QXR0cigpIGNvbnN0OworICAgIFdl
YkRPTVN0cmluZyBzdHJpbmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNv
bnN0IFdlYkRPTVN0cmluZyYpOworCisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogaW1wbCgpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgc3RydWN0IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRlOwor
ICAgIFdlYkRPTVRlc3RQT0RPYmpQcml2YXRlKiBtX2ltcGw7Cit9OworCitXZWJDb3JlOjpUZXN0
UE9ET2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYpOworV2ViRE9NVGVzdFBP
RE9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0UE9ET2JqKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHAKaW5kZXggZWZiMzYyYmJhM2VlZGQzZjNhMWE4YjRlN2I0ZTVlNjcwMzI3MDA2OS4u
MWFhNzNiYmQ3NDQwNTIzYjgyNThmMjkxYzZhODUzNzc5M2JlOTc4ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
YmouY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NQmluZGluZy5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgpAQCAtMTU1LDE0ICsxNTYsNTcgQEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhh
dF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHMKIH0KIAog
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJn
KQord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVk
X2FyZywgR0Vycm9yICoqZXJyb3IpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKICAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlcmlhbGl6ZWRfYXJnKTsKICAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFs
aXplZF9hcmcpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJn
KTsKLSAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWUoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXJpYWxpemVk
VmFsdWVSYWlzZXMoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAg
ICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRf
YXJnKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZXJp
YWxpemVkX2FyZyk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVy
dGVkX3NlcmlhbGl6ZWRfYXJnID0gV2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7CisgICAgaXRlbS0+c2Vy
aWFsaXplZFZhbHVlTm9SYWlzZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworfQorCitXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxp
emVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoq
ZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMg
PSBzdGF0aWNfY2FzdDxXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqID4oV2ViS2l0Ojpr
aXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TZXJpYWxp
emVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3Jl
dHVybl9ub19yYWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFp
c2UoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgcmVzID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiA+KFdlYktpdDo6a2l0KGdfcmVz
LmdldCgpKSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRl
eCA4ZGNkOGMzMWUzMzYzYmU3MjQ4YTM3NWI1OTcyYTUxNjk3MDBjMzk3Li4wOGQwNTVmOGE3MTY4
MjAwZjJjZmQ0YzZhNTQ5MzRmMzBlNzNiMTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzEsNyAr
NzEsMTYgQEAgV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdjaGFyKiAgc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogIG9ial9hcmcsIEdF
cnJvciAqKmVycm9yKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
cmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpOword2Via2l0X2RvbV90ZXN0X29ial9zZXJp
YWxpemVkX3ZhbHVlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZywgR0Vycm9yICoqZXJyb3IpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9ub19y
YWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqICBzZXJpYWxpemVkX2FyZyk7CisKK1dFQktJVF9BUEkgV2ViS2l0RE9NU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiAKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5f
cmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKKworV0VCS0lU
X0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29i
al9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKIAogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4
Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQ
T0RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmUzY2Y2YjcxYzY4OTU2N2NiYjgyMmJmYmNk
OTc0ZTZmZDQxMzRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmNwcApAQCAtMCwwICsxLDIwNSBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlRlc3RQT0RP
YmouaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29iamVjdC9D
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RQT0RP
YmouaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2dwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0UE9ET2Jq
KiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBy
ZXQ7CisKKyAgICByZXR1cm4gRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRl
c3RQT0RPYmoob2JqKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KKworZ2Zs
b2F0Cit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfcmVhZF9vbmx5X2Zsb2F0X2F0dHIoV2Vi
S2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKKyAgICByZXR1
cm4gcmVzOworfQorCitnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5n
X2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
c3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rl
c3RfcG9kX29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZiwgZ2No
YXIqICB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6
OlRlc3RQT0RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJD
b3JlOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNv
bnZlcnRlZF92YWx1ZSk7Cit9CisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0UE9ET2Jq
LCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29iaiwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmUoV2ViS2l0RE9NVGVz
dFBPRE9iaiogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAw
KTsKKworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0UE9ET2JqKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0
dXJuIGNvcmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfUkVBRF9PTkxZX0ZMT0FUX0FUVFIsCisgICAgUFJPUF9TVFJJTkdf
QVRUUiwKK307CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9
IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNv
cmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogY29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmogKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7
CisKKyAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOwor
ICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVP
YmplY3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9wb2Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfUE9EX09C
SihvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TVFJJTkdf
QVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdlYkNvcmU6OlN0
cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZiA9IFdFQktJVF9ET01f
VEVTVF9QT0RfT0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogY29yZVNlbGYg
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQ
Uk9QX1JFQURfT05MWV9GTE9BVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxv
YXQodmFsdWUsIGNvcmVTZWxmLT5yZWFkT25seUZsb2F0QXR0cigpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmlu
Z0F0dHIoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X3BvZF9vYmpfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1JFQURfT05MWV9GTE9BVF9BVFRSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJy
ZWFkLW9ubHktZmxvYXQtYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfcG9kX29ial9yZWFkLW9u
bHktZmxvYXQtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdm
bG9hdCBUZXN0UE9ET2JqLnJlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQg
ZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULCAvKiBt
aW4gKi8KK0dfTUFYRkxPQVQsIC8qIG1heCAqLworMC4wLCAvKiBkZWZhdWx0ICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9T
VFJJTkdfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoInN0cmluZy1hdHRyIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9wb2Rfb2JqX3N0
cmluZy1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdjaGFy
KiAgVGVzdFBPRE9iai5zdHJpbmctYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29t
ZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
cG9kX29ial9pbml0KFdlYktpdERPTVRlc3RQT0RPYmoqIHJlcXVlc3QpCit7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdFBPRE9iaiogd3JhcFRlc3RQT0RPYmooV2ViQ29y
ZTo6VGVzdFBPRE9iaiogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
b3JlT2JqZWN0LCAwKTsKKyAgICAKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiB3cmFwcGVyID0g
V0VCS0lUX0RPTV9URVNUX1BPRF9PQkooZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNU
X1BPRF9PQkosIE5VTEwpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3cmFwcGVyLCAwKTsK
KworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9p
bnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1h
bGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3Ig
dGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKworICAgIGNvcmVPYmplY3Qt
PnJlZigpOworICAgIFdFQktJVF9ET01fT0JKRUNUKHdyYXBwZXIpLT5jb3JlT2JqZWN0ID0gY29y
ZU9iamVjdDsKKworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZlYWMzZWMxNzA1MTFlNjFhYjU3
ZjFmNmQ1ZTc0MmQwMWJiYTkxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0UE9ET2Jq
X2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlICJ3ZWJraXQvd2Vi
a2l0ZG9tZGVmaW5lcy5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD4KKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmgi
CisKKworR19CRUdJTl9ERUNMUworI2RlZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JK
ICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIFdlYktpdERP
TVRlc3RQT0RPYmopKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSl9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01f
VEVTVF9QT0RfT0JKLCBXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkopKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1RFU1RfUE9EX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX1BPRF9PQkpfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSiwgV2ViS2l0RE9NVGVzdFBP
RE9iakNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXN0UE9ET2JqIHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0UE9E
T2JqQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90eXBlICh2b2lk
KTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9yZWFk
X29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKTsKKworV0VCS0lUX0FQ
SSBnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0
RE9NVGVzdFBPRE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0
X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYsIGdjaGFy
KiAgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVGVzdFBPRE9i
al9oICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM5
NWU3MWQ3ZmRiZmNiODdjZWY1MDk4NjE0M2U1NWQ3ZWMxNzMxZgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9i
alByaXZhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
Zm5kZWYgV0VCX0tJVF9ET01fVEVTVF9QT0RfT0JKX1BSSVZBVEVfSAorI2RlZmluZSBXRUJfS0lU
X0RPTV9URVNUX1BPRF9PQkpfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlICJUZXN0UE9ET2Jq
LmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqICoKKyAgICB3
cmFwVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqICpjb3JlT2JqZWN0KTsKKworICAgIFdl
YkNvcmU6OlRlc3RQT0RPYmogKgorICAgIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9iaiAqcmVxdWVz
dCk7CisKKyAgICBncG9pbnRlcgorICAgIGtpdChXZWJDb3JlOjpUZXN0UE9ET2JqKiBub2RlKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX1BP
RF9PQkpfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAppbmRleCAzNjA3ODJkODY4ZjVhZGIwMTFlYzczMzgwNmY0MjBhMTAzYWEy
NWY1Li5mNjg0NjA5ZGRlODQxNmQ2ODczNWU5OTY3OTJiODI3ZmU4MTg3ZDVhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTE0NCw3ICsx
NDQsNyBAQCBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1Io
Z2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMzXSA9CiB7CiAgICAgeyAidm9pZE1ldGhv
ZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpLCAoaW50cHRyX3Qp
MCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3Qp
MyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE1NCw3ICsxNTQsMTAgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiAgICAg
eyAib2JqTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpN
ZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
Im1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9S
KDApIH0sCiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIsIERvbnRE
ZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJzZXJpYWxpemVk
VmFsdWUiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUpLCAo
aW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxpemVkVmFsdWVS
YWlzZXMiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSYWlz
ZXMpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxpemVk
VmFsdWVOb1JhaXNlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlTm9SYWlzZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNl
cmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiLCBEb250RGVsZXRl
IHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKSwgKGludHB0
cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIs
IERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50
cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxl
dGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMg
VEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNzksNyArMTgyLDcgQEAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiB9OwogCiAj
dW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFi
bGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDY5LCA2MywgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTMxLCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRh
YmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAw
IH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNzg0LDE5ICs3ODcsNjIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNl
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXpl
ZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZlYyk7CisKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1
ZVJhaXNlcyhzZXJpYWxpemVkQXJnLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFs
aXplZFZhbHVlTm9SYWlzZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91
dFRocm93aW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIAotICAgIGltcC0+c2VyaWFsaXpl
ZFZhbHVlKHNlcmlhbGl6ZWRBcmcpOworICAgIGltcC0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShz
ZXJpYWxpemVkQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGltcC0+c2VyaWFs
aXplZFZhbHVlUmV0dXJuUmFpc2VzKGVjKSA/IGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFp
c2VzKGVjKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpIDog
anNOdWxsKCk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKworCisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGltcC0+c2VyaWFsaXplZFZh
bHVlUmV0dXJuTm9SYWlzZSgpID8gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkt
PmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSA6IGpzTnVsbCgp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAppbmRleCAzYjIxYzg1NjAxYzBhMzdiN2NkZmZmMWVlNWZhMzYxNDEyOGE0NjcwLi4w
MWQ3NDQ5MjQyNWRmMWI3ZjY2YWI2MzM1MTI2Y2I5MmYyZmI0ZjExIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtOTQsNyArOTQsMTAgQEAgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2JqTWV0aG9kKEpTQzo6RXhlY1MKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNl
cyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZShKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlND
OjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RP
YmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kY2U4ODQ0YmM5MDc3YTZkNTBmMmU4ZjA4ODIzODliMzIzOTc5MTE2Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UE9ET2JqLmNwcApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNO
dW1iZXJDZWxsLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTVGVzdFBPRE9iaik7CisKKy8qIEhhc2gg
dGFibGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJh
dG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9ET2JqVGFi
bGVWYWx1ZXNbNF0gPQoreworICAgIHsgInJlYWRPbmx5RmxvYXRBdHRyIiwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdFBPRE9ialJlYWRPbmx5RmxvYXRBdHRyKSwgKGludHB0cl90KTAgVEhVTktfR0VO
RVJBVE9SKDApIH0sCisgICAgeyAic3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0UE9ET2JqU3RyaW5n
QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RQT0RPYmpTdHJpbmdBdHRyIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAorICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBSZWFkT25seSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RQT0RPYmpD
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgMCwg
MCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRP
Ugorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9ialRhYmxl
ID0geyA4LCA3LCBKU1Rlc3RQT0RPYmpUYWJsZVZhbHVlcywgMCB9OworLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFU
T1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9S
KGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
UE9ET2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlc1sxXSA9Cit7CisgICAgeyAwLCAwLCAwLCAwIFRI
VU5LX0dFTkVSQVRPUigwKSB9Cit9OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMg
SlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3JUYWJs
ZSA9IHsgMSwgMCwgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworY2xh
c3MgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
eworcHVibGljOgorICAgIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5
U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9Citwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFBPRE9iakNvbnN0cnVjdG9y
IiwgMCwgJkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUsIDAgfTsKKworSlNUZXN0UE9ET2Jq
Q29uc3RydWN0b3I6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0
KEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKGV4
ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK2Jvb2wgSlNU
ZXN0UE9ET2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IsIERP
TU9iamVjdD4oZXhlYywgJkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IsIERPTU9i
amVjdD4oZXhlYywgJkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwor
I2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2Vu
ZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlm
CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJs
ZVZhbHVlc1sxXSA9Cit7CisgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Cit9
OworCisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBI
YXNoVGFibGUgSlNUZXN0UE9ET2JqUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdFBPRE9i
alByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2Jq
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0UE9ET2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdFBP
RE9ialByb3RvdHlwZVRhYmxlLCAwIH07CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmpQcm90b3R5
cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0UE9ET2JqPihleGVjLCBnbG9iYWxP
YmplY3QpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2JqOjpzX2luZm8gPSB7ICJU
ZXN0UE9ET2JqIiwgMCwgJkpTVGVzdFBPRE9ialRhYmxlLCAwIH07CisKK0pTVGVzdFBPRE9iajo6
SlNUZXN0UE9ET2JqKE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBw
ZXI8VGVzdFBPRE9iaj4gPiBpbXBsKQorICAgIDogRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX2ltcGwoaW1wbCkKK3sKK30KKworSlNU
ZXN0UE9ET2JqOjp+SlNUZXN0UE9ET2JqKCkKK3sKKyAgICBmb3JnZXRET01PYmplY3QodGhpcywg
aW1wbCgpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFBPRE9iajo6Y3JlYXRlUHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gbmV3IChleGVjKSBKU1Rlc3RQT0RPYmpQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBKU1Rlc3RQ
T0RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7Cit9CisKK2Jvb2wgSlNUZXN0UE9ET2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBPRE9iaiwg
QmFzZT4oZXhlYywgJkpTVGVzdFBPRE9ialRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworfQorCitib29sIEpTVGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRv
cjxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpSZWFkT25s
eUZsb2F0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50
aWZpZXImKQoreworICAgIEpTVGVzdFBPRE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdFBPRE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFRlc3RQT0RPYmogaW1wKCpjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gIGpzTnVtYmVyKGV4ZWMsIGltcC5yZWFkT25seUZsb2F0QXR0cigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGpzVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBK
U1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09i
amVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0UE9ET2Jq
IGltcCgqY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9ICBqc1N0cmlu
ZyhleGVjLCBpbXAuc3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1Zh
bHVlIGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0UE9ET2JqKiBkb21PYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIHJl
dHVybiBKU1Rlc3RQT0RPYmo6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpOworfQordm9pZCBKU1Rlc3RQT0RPYmo6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIGxvb2t1cFB1dDxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgc2xvdCk7Cit9CisK
K3ZvaWQgc2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdFBPRE9iaiogY2FzdGVk
VGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdFBPRE9iaio+KHRoaXNPYmplY3QpOworICAgIEpTU1ZH
UE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gKiBpbXAgPSBzdGF0aWNfY2FzdDxKU1NWR1BPRFR5
cGVXcmFwcGVyPFRlc3RQT0RPYmo+ICo+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgVGVzdFBP
RE9iaiBwb2RJbXAoKmltcCk7CisgICAgcG9kSW1wLnNldFN0cmluZ0F0dHIodmFsdWVUb1N0cmlu
Z1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKKyAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJ
bXAsIGNhc3RlZFRoaXMpOworfQorCitKU1ZhbHVlIEpTVGVzdFBPRE9iajo6Z2V0Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcj4oZXhlYywg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qIG9iamVjdCwgU1ZH
RWxlbWVudCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1Rl
c3RQT0RPYmosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPihleGVjLCBnbG9iYWxP
YmplY3QsIG9iamVjdCwgY29udGV4dCk7Cit9CitUZXN0UE9ET2JqIHRvVGVzdFBPRE9iaihKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RQT0RP
Ymo6OnNfaW5mbykgPyAoVGVzdFBPRE9iaikgKnN0YXRpY19jYXN0PEpTVGVzdFBPRE9iaio+KGFz
T2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IFRlc3RQT0RPYmooKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RPYmouaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NGU0ZmZlYmE1NDMxYjVjODk4ZjE5NTE5YzU0MjU2OWY4MzZjN2U5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmgKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdFBPRE9i
al9oCisjZGVmaW5lIEpTVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU1NWR1BPRFR5cGVXcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0UE9ET2JqIDog
cHVibGljIERPTU9iamVjdFdpdGhHbG9iYWxQb2ludGVyIHsKKyAgICB0eXBlZGVmIERPTU9iamVj
dFdpdGhHbG9iYWxQb2ludGVyIEJhc2U7CitwdWJsaWM6CisgICAgSlNUZXN0UE9ET2JqKE5vbk51
bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPik7CisgICAgdmlydHVhbCB+SlNU
ZXN0UE9ET2JqKCk7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1
YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2lu
Zm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CisgICAgSlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqIGltcGwoKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SlNTVkdQT0RUeXBl
V3JhcHBlcjxUZXN0UE9ET2JqPiA+IG1faW1wbDsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVz
dFBPRE9iaj4qLCBTVkdFbGVtZW50Kik7CitUZXN0UE9ET2JqIHRvVGVzdFBPRE9iaihKU0M6OkpT
VmFsdWUpOworCitjbGFzcyBKU1Rlc3RQT0RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09i
amVjdFdpdGhHbG9iYWxPYmplY3QgeworICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdFdpdGhHbG9i
YWxPYmplY3QgQmFzZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cisg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255
bW91c1Nsb3RDb3VudCk7CisgICAgfQorICAgIEpTVGVzdFBPRE9ialByb3RvdHlwZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0
dXJlPiBzdHJ1Y3R1cmUpIDogSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpIHsgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gQXR0cmli
dXRlcworCitKU0M6OkpTVmFsdWUganNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdFBPRE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RQT0RPYmpTdHJpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0UE9ET2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaAppbmRleCBkODg2MmRhMTVlYWM0ZTgxYTJlYjExYWJlYTNhMDVkMzNmYjJjMWJiLi43
ODNhMjY3MTFiMmYyNWQ0YWM2ZWYyZjFiYmE4NDc0NGQ3ZDFjZDEwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtOTgsNyArOTgsMTAg
QEAKIC0gKERPTVRlc3RPYmogKilvYmpNZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6
KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRl
c3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpB
cmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93czooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2Jq
ICopb2JqQXJnOwotLSAodm9pZClzZXJpYWxpemVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXpl
ZEFyZzsKKy0gKHZvaWQpc2VyaWFsaXplZFZhbHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6
ZWRBcmc7CistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2U6KE5TU3RyaW5nICopc2VyaWFs
aXplZEFyZzsKKy0gKE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzOworLSAo
TlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlOwogLSAodm9pZCltZXRob2RX
aXRoRXhjZXB0aW9uOwogLSAodm9pZCljdXN0b21NZXRob2Q7CiAtICh2b2lkKWN1c3RvbU1ldGhv
ZFdpdGhBcmdzOihpbnQpaW50QXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihE
T01UZXN0T2JqICopb2JqQXJnOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0T2JqLm1tCmluZGV4IDliYmJmMTQ0YjdlZTY5ZmI5NmE0MGY0MTQ5ZDgwNTk0
Y2VmN2RmYjguLjE5NzlhMzhiY2U5NWZmZjA5NzQ1YzgxYTc3ZGJhZjUzODI0MGI1NjUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAg
LTQ0NSwxMCArNDQ1LDMzIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLSAodm9pZClzZXJp
YWxpemVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZworLSAodm9pZClzZXJpYWxpemVk
VmFsdWVSYWlzZXM6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZwogewogICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWUoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlh
bGl6ZWRBcmcpKSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgSU1Q
TC0+c2VyaWFsaXplZFZhbHVlUmFpc2VzKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSksIGVjKTsKKyAgICBXZWJDb3Jl
OjpyYWlzZU9uRE9NRXJyb3IoZWMpOworfQorCistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZU5vUmFp
c2U6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxp
emVkQXJnKSkpOworfQorCistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
cworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBOU1N0cmluZyAqcmVzdWx0ID0ga2l0KFdU
Rjo6Z2V0UHRyKElNUEwtPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpKTsKKyAgICBX
ZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0g
KE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4ga2l0KFdURjo6Z2V0UHRy
KElNUEwtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSkpOwogfQogCiAtICh2b2lkKW1l
dGhvZFdpdGhFeGNlcHRpb24KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE0NTZhNjZjNzVmOTRiZWIwMTYwYTc3
N2M4YzkwYWQwYjliNzJiMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9i
amVjdC5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJ
T05fTEFURVNUCisKK0BjbGFzcyBOU1N0cmluZzsKKworQGludGVyZmFjZSBET01UZXN0UE9ET2Jq
IDogRE9NT2JqZWN0CistIChmbG9hdClyZWFkT25seUZsb2F0QXR0cjsKKy0gKE5TU3RyaW5nICop
c3RyaW5nQXR0cjsKKy0gKHZvaWQpc2V0U3RyaW5nQXR0cjooTlNTdHJpbmcgKiluZXdTdHJpbmdB
dHRyOworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjViNTFkMzkxNDBmZTY4YTJi
MzQ0MWViYjg0YjAxZTQyZWY0OWQxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRP
TUludGVybmFsLmgiCisKKyNpbXBvcnQgIkRPTVRlc3RQT0RPYmouaCIKKworI2ltcG9ydCAiRE9N
QmxvYkludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFs
LmgiCisjaW1wb3J0ICJET01UZXN0UE9ET2JqSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlv
bkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQg
IktVUkwuaCIKKyNpbXBvcnQgIlRlc3RQT0RPYmouaCIKKyNpbXBvcnQgIlRocmVhZENoZWNrLmgi
CisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0
UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElNUEwgcmVpbnRl
cnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0UE9ET2JqKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50
YXRpb24gRE9NVGVzdFBPRE9iagorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29y
ZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RQT0RPYmogY2xhc3Nd
LCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIElNUEw7CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgZGVsZXRlIElNUEw7Cisg
ICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLSAoZmxvYXQpcmVhZE9ubHlGbG9hdEF0dHIKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElN
UEwtPnJlYWRPbmx5RmxvYXRBdHRyKCk7Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nQXR0cgor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4g
SU1QTC0+c3RyaW5nQXR0cigpOworfQorCistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3RyaW5n
ICopbmV3U3RyaW5nQXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBJTVBMLT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOworfQorCitAZW5k
CisKK1dlYkNvcmU6OlRlc3RQT0RPYmogY29yZShET01UZXN0UE9ET2JqICp3cmFwcGVyKQorewor
ICAgIHJldHVybiB3cmFwcGVyID8gKnJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdFBPRE9i
aio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiBXZWJDb3JlOjpUZXN0UE9ET2JqKCk7Cit9CisKK0RP
TVRlc3RQT0RPYmogKmtpdChXZWJDb3JlOjpUZXN0UE9ET2JqIHZhbHVlKQoreworICAgIHsgRE9N
X0FTU0VSVF9NQUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9u
ZSgpOyB9OworICAgIERPTVRlc3RQT0RPYmogKndyYXBwZXIgPSBbW0RPTVRlc3RQT0RPYmogYWxs
b2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERP
TU9iamVjdEludGVybmFsKj4obmV3IFdlYkNvcmU6OlRlc3RQT0RPYmoodmFsdWUpKTsKKyAgICBy
ZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwuaCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVybmFsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTRjZWIwY2RiM2NkZTNjNDc0YWUxYzRlM2M1NDQ5OTY4YzA5ZmQwYgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9i
akludGVybmFsLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdFBPRE9iai5oPgorCisjaWYgV0VCS0lUX1ZFUlNJT05f
TUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBjbGFzcyBUZXN0UE9ET2JqOworfQorCitXZWJDb3JlOjpUZXN0UE9ET2JqIGNvcmUo
RE9NVGVzdFBPRE9iaiAqKTsKK0RPTVRlc3RQT0RPYmogKmtpdChXZWJDb3JlOjpUZXN0UE9ET2Jq
KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmlu
ZGV4IGVmNGRiMTA2ZjA3NDY2Zjg0MjU5NDE0ZDg5ZDlkMDQ5ZjY5ODQyMjIuLjdmMGMzZmRmOGY4
MGY1NDlhNGYxYzFmNTlkMTk3N2I3ZmMyNTA3NzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC02Miw3ICs2MiwxMSBAQCBtb2R1bGUgdGVzdCB7CiAgICAg
ICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50cz1SYWlzZV0gVGVzdE9iaiBtZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzKGluIERPTVN0cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2JqQXJn
KQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKLSAgICAgICAgdm9pZCBzZXJp
YWxpemVkVmFsdWUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOworICAg
ICAgICAvLyBUZXN0IHZhcmlvdXMgZm9ybXMgb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlCisgICAg
ICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBz
ZXJpYWxpemVkQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXJpYWxp
emVkVmFsdWVOb1JhaXNlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsK
KyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
cygpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbnMK
ICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlk
bCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFkYmMwNWJmYTE5NmNkYTQ4N2I0NDM4ZmU1NWFhYjA4MTAwOGY5ZWQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbApAQCAt
MCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3Rpbmcg
dGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIGFuZCBmb3IgdHJhY2tpbmcKKy8vIGNoYW5nZXMg
aW4gaXRzIG91cHV0LgorbW9kdWxlIHRlc3QgeworICAgIGludGVyZmFjZSBbUE9EVHlwZT1UZXN0
UE9ET2JqXSBUZXN0UE9ET2JqIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0ICAg
ICAgICAgIHJlYWRPbmx5RmxvYXRBdHRyOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc3RyaW5nQXR0cjsKKyAgICB9OworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXgg
NGE1NGFlMzQwOTUzNzQwNDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uY2MwOWQ1ZTZhZWVlMWJl
ZTIzNmI2YzM4OTBjNzIwNjVhZTFiZTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC01NjEsMTggKzU2MSw1OCBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxs
YmFjayhjb25zdCB2OAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAot
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJp
YWxpemVkVmFsdWVSYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewot
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyA9IGZhbHNl
OwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVkQXJnRGlkVGhyb3cp
OwogICAgIGlmIChzZXJpYWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0gICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAg
aW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIGlmIChV
TkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5z
ZXJpYWxpemVkVmFsdWVOb1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhy
b3dpbmcoYXJnc1swXSk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKHNlcmlhbGl6
ZWRBcmcpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
Ymouc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0gaW1w
LT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChVTkxJS0VMWShlYykp
CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKS0+ZGVzZXJp
YWxpemUoKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
LnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbXAtPnNlcmlhbGl6
ZWRWYWx1ZVJldHVybk5vUmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhF
eGNlcHRpb24iKTsKQEAgLTk0Niw3ICs5ODYsMTAgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxs
YmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9kIiwgVGVzdE9iaklu
dGVybmFsOjp2b2lkTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiaW50TWV0aG9kIiwgVGVzdE9iaklu
dGVybmFsOjppbnRNZXRob2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2JqSW50
ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKLSAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RP
YmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZh
bHVlUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFj
a30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwgVGVzdE9iakludGVybmFsOjpzZXJp
YWxpemVkVmFsdWVOb1JhaXNlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxs
YmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwgVGVzdE9iakludGVy
bmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2t9LAogICAgIHsibWV0aG9k
V2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxi
YWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2FsbGJh
Y2t9LAogICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhv
ZFdpdGhBcmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThmNmIwZWVmYmI1YTEx
OTYxNTE0MDYzNjJmNzJlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0UE9ET2Jq
LmgiCisKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0UE9E
T2JqOjppbmZvID0geyBWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RQT0RPYmo6OmRl
cmVmT2JqZWN0LCAwIH07CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwgeworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RQT0RPYmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOworICAgIFRlc3RQT0RP
YmoqIGltcCA9IFY4VGVzdFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0
dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworfQorCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElO
Q19TVEFUUygiRE9NLlRlc3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7CisgICAgVGVzdFBPRE9i
aiogaW1wID0gVjhUZXN0UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1
cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzdHJpbmdB
dHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdFBPRE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0UE9ET2JqKiBp
bXAgPSBWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFY4UGFyYW1l
dGVyPFdpdGhOdWxsQ2hlY2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0cmluZ0F0dHIodik7
CisgICAgcmV0dXJuOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwKKwor
c3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJzW10gPSB7CisgICAg
Ly8gQXR0cmlidXRlICdyZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1
dGUnIEV4dEF0dHI6ICcnKQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBUZXN0UE9ET2JqSW50
ZXJuYWw6OnJlYWRPbmx5RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisg
ICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjog
J0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIiLCBUZXN0UE9ET2Jq
SW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmlu
Z0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3ND
b250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4o
djg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIHY4OjpMb2Nh
bDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVz
YywgIlRlc3RQT0RPYmoiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwg
VjhUZXN0UE9ET2JqOjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RQT0RPYmpBdHRy
cywgc2l6ZW9mKFRlc3RQT0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RPYmpBdHRycyksCisg
ICAgICAgIDAsIDApOworICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisg
ICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOwor
ICAgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0UE9ET2JqOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdDYWNoZSA9IGNyZWF0
ZVJhd1RlbXBsYXRlKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0NhY2hlOworfQorCit2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRUZW1w
bGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RQT0RPYmpDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKEdldFJh
d1RlbXBsYXRlKCkpOworICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsKK30KKworVjhTVkdQ
T0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxW
OFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUlu
dGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9vbCBWOFRlc3RQ
T0RPYmo6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpI
YW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8
VGVzdFBPRE9iaj4qIGltcGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OworICAgIFY4UHJveHkqIHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVj
dE1hcCgpLmdldChpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAg
Z2V0RE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcod3JhcHBlcikpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBp
bXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBpbXBsKQorewor
ICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4
VGVzdFBPRE9iajo6d3JhcChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RPYmo6OmRlcmVmT2Jq
ZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVy
PFRlc3RQT0RPYmo+Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmou
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2MmE3ZWQ5OGYzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
UE9ET2JqLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYg
VjhUZXN0UE9ET2JqX2gKKyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJ
bmZvLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZH
UE9EVHlwZVdyYXBwZXI7CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAg
IHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxh
dGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+
KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+Kik7Cisg
ICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlw
ZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4
RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4qKTsKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0
UE9ET2JqID4gPik7Cit9CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDhlOTE5MjA5MGM2NDZl
NWI1YTRjNDUyNTMwNTg3Mzc2ZTMzM2RkOWIuLmIxZGY2YzIxNTcwMDBhNGI0YzFjYjNkOGQ2ZTFl
NDYzM2IxNzkzMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKQEAgLTEwMjMsMTMgKzEwMjMsMjQgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmoK
IAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRp
ZFRocm93KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2NyaXB0VmFsdWUg
PSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKHNj
cmlwdFZhbHVlLT5tX2RhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcihOT1RfU1VQ
UE9SVEVEX0VSUik7CisgICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUucmVsZWFzZSgpOwog
fQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAgIGJvb2wgZGlk
VGhyb3c7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFs
dWUsIGRpZFRocm93KSk7CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlkVGhyb3cpOworfQor
CitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVXaXRob3V0VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CiB9
CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKFN0cmluZyBkYXRhKQpAQCAtMTA1OCwxNyArMTA2OSwxMiBAQCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7CiB9CiAKLVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7Ci0gICAg
ZGlkVGhyb3cgPSBmYWxzZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNlcmlhbGl6ZXIgc2Vy
aWFsaXplcih3cml0ZXIpOwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKSB7
Ci0gICAgICAgIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAgICBkaWRUaHJv
dyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5nSW1w
bDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIuc2VyaWFsaXplKHZh
bHVlKSkKKyAgICAgICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7
CiB9CiAKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmlu
ZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2NTBlYTUwOGIwMmI0
N2U5ZTBkMi4uYjVmNWY1NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2JlOGM4YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSw2ICs0
OSw3IEBAIHB1YmxpYzoKICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9uIGlzIHN1Y2Nlc3Nm
dWwsIHxkaWRUaHJvd3wgaXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBk
aWRUaHJvdyk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAtNTcsNiArNTgsOCBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CiAKKyAgICBib29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5pc051bGwoKTsgfQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2YWx1ZSAoaW4gdGhl
IGN1cnJlbnQgY29udGV4dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAgICAgLy8gY2FzZSBv
ZiBmYWlsdXJlLgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlhbGl6ZSgpOwpAQCAt
NjgsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFs
dWUoKTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBi
b29sJiBkaWRUaHJvdyk7CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRh
LCBTdHJpbmdEYXRhTW9kZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZl
bnQuY3BwCmluZGV4IGI5YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFjNzlkMTA5YzguLjc5
MmZiMzRkZmI2MDU0NjNkMTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
Y3BwCkBAIC0zNyw4ICszNyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewogfQogICAgIAotdm9p
ZCBQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0
YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBj
YW5jZWxhYmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3Qs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMsIHRydWUpOwogICAg
IGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaApp
bmRleCAyZmI4ZDA2ODViZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIyLi43MTFmMGI1ZGFh
OWI5NzAwOWI5NjFjMWE5YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Q
b3BTdGF0ZUV2ZW50LmgKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2
ZW50KHN0YXRlT2JqZWN0KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9pZCBpbml0UG9wU3Rh
dGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29k
ZSYgZWMpOwogICAgIGJvb2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGVPYmplY3QuZ2V0KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0
ZUV2ZW50LmlkbCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmluZGV4IGFkYzkwNzRl
YzRmZWIwNzAwODc2NzNmNmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdiZDA5YTY1ODVmOWMy
ZjU4MDBlYjMyMGM4MTYzZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aWRsCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0yOSw5ICsyOSw5IEBA
IG1vZHVsZSBldmVudHMgewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdF
X0NQUAogICAgIGludGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lk
IGluaXRQb3BTdGF0ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGVBcmcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBz
dGF0ZUFyZykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59888</attachid>
            <date>2010-06-28 03:24:31 -0700</date>
            <delta_ts>2010-06-29 10:16:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100628112428.patch</filename>
            <type>text/plain</type>
            <size>100155</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2Mzk2YjQ5YTdhYmY2ZjZjMGExODdiYmEzYmIxY2RmZmQxOWVkZDQwLi5jNGEyMjc2
Zjk3N2IxOThmZmIxNjBlZDQ4MTM3YWU1ZDBkMjA5OTZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjUgIFl1em8g
RnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5p
Y2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVv
YmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTM3Y2QyNjc3YTRhYmNmMjkwMDcyNzI1MDQzNWE3ZTg4YWRmNDA2NQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3Rh
dGVldmVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitUaGlzIHRlc3Q6CistIENoZWNr
cyB0aGF0IGluaXRQb3BTdGF0ZUV2ZW50IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBzdGF0ZUFy
ZyBjYW4ndCBiZSBzZXJpYWxpemVkLgorLSBQcmludHMgVEVTVCBDT01QTEVURSB3aGVuIGRvbmUu
CitQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciB1bmRl
ZmluZWQuCitQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZv
ciBlbXB0eSBhcnJheS4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgdGhyZXcgYW4gZXhj
ZXB0aW9uIGR1ZSB0byBhIGN5Y2xlLgorVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMWNhZWQ1YjI0M2Q5NTg4Yjg0M2U2OTEzNTZmYTk2NzM4OTcxYjQyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2lu
aXRwb3BzdGF0ZWV2ZW50Lmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPHNjcmlwdD4KK2Z1bmN0aW9u
IGxvZyh0eHQpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ2dlciIpLmlubmVy
SFRNTCArPSB0eHQgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHN0YXRlUG9wcGVkKCkKK3sKKyAg
ICBldmVudC5pbml0UG9wU3RhdGVFdmVudCgidGVzdCIsIHRydWUsIHRydWUsIHVuZGVmaW5lZCk7
CisgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9u
IGZvciB1bmRlZmluZWQuIik7CisgICAgdmFyIGEgPSB7fTsKKyAgICBldmVudC5pbml0UG9wU3Rh
dGVFdmVudCgidGVzdCIsIHRydWUsIHRydWUsIGEpOworICAgIGxvZygiUEFTUyBzZXJpYWxpemVk
IHNjcmlwdCB2YWx1ZSB3aXRob3V0IGV4Y2VwdGlvbiBmb3IgZW1wdHkgYXJyYXkuIik7CisgICAg
YS5jeWNsZSA9IGE7CisgICAgdHJ5IHsKKyAgICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0
ZXN0IiwgdHJ1ZSwgdHJ1ZSwgYSk7CisgICAgICBsb2coIkZBSUwgc2VyaWFsaXplZCBzY3JpcHQg
dmFsdWUgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuIik7CisgICAg
fSBjYXRjaCAoZXJyKSB7CisgICAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUg
dGhyZXcgYW4gZXhjZXB0aW9uIGR1ZSB0byBhIGN5Y2xlLiIpOworICAgIH0KKyAgICBsb2coIlRF
U1QgQ09NUExFVEUiKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9Cis8L3Nj
cmlwdD4KKzxib2R5IG9ucG9wc3RhdGU9InN0YXRlUG9wcGVkKCk7Ij4KKzxwcmU+CitUaGlzIHRl
c3Q6CistIENoZWNrcyB0aGF0IGluaXRQb3BTdGF0ZUV2ZW50IHRocm93cyBhbiBleGNlcHRpb24g
d2hlbiBzdGF0ZUFyZyBjYW4ndCBiZSBzZXJpYWxpemVkLgorLSBQcmludHMgVEVTVCBDT01QTEVU
RSB3aGVuIGRvbmUuCis8L3ByZT4KKzxwcmUgaWQ9ImxvZ2dlciI+PC9wcmU+Cis8c2NyaXB0Pgor
aGlzdG9yeS5yZXBsYWNlU3RhdGUoIkZpcnN0RW50cnkiLCBudWxsLCAiP0ZpcnN0RW50cnkiKTsK
K2hpc3RvcnkucHVzaFN0YXRlKCJTZWNvbmRFbnRyeSIsIG51bGwsICI/U2Vjb25kRW50cnkiKTsK
K2hpc3RvcnkuYmFjaygpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXpl
ZC1zY3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTBkNzU5ZTIwMWMyZDBmZDdhYjk1YTAzMGZjZDA2MDg1NWFlYzA5NwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1z
Y3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK1Rlc3QgSW5kZXhlZERC
J3MgYWRkIHdpdGggU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAn
b25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlz
IHRydWUKK1BBU1MgJ2Fib3J0JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworb3Bl
blN1Y2Nlc3MKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlz
IHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBl
dmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50
LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0
IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdh
Ym9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRh
cmdldC5ET05FCisKK2RiID0gZXZlbnQucmVzdWx0CitkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVz
dCcpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBp
biByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdy
ZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRs
eS4uLgorCitjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQ
QVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZh
bHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29u
c3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BB
U1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdl
dC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK29iamVjdFN0b3JlID0gZXZlbnQu
cmVzdWx0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFs
aXplZC1zY3JpcHQtdmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lk
Yi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTgzZGJmNjRh
MTE1MDQyMGEyNTk3MjU0ZTRjMWI3ZTI4ZDQ5ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1
bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaWRiLWFkZC1z
ZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVk
LmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwpp
bmRleCA4MDliZGVjYmUzYzBlYmIwYzU3ZmY0ZWJlNjgyMzc1YzFjNjBiZjI3Li45NDA2NGJlYmI2
NDJkNjkxZWU1OWU2MjBiYzExYjUxYzM4Zjk2ODU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTQ2LDYgKzQ2LDE1IEBAIGZ1
bmN0aW9uIHZlcmlmeVJlc3VsdChyZXN1bHQpCiAgICAgZGVidWcoIiIpOwogfQogCisKK2Z1bmN0
aW9uIHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2soKQoreworICAgIHRlc3RGYWlsZWQoIlN1Y2Nl
c3MgZnVuY3Rpb24gY2FsbGVkIHVuZXhwZWN0ZWRseSIpOworICAgIGRlYnVnKCIiKTsKKyAgICB2
ZXJpZnlSZXN1bHQoZXZlbnQpOworICAgIGRvbmUoKTsKK30KKwogZnVuY3Rpb24gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2soKQogewogICAgIHRlc3RGYWlsZWQoIkVycm9yIGZ1bmN0aW9uIGNhbGxl
ZCB1bmV4cGVjdGVkbHk6ICgiICsgZXZlbnQuY29kZSArICIpICIgKyBldmVudC5tZXNzYWdlKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9p
ZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzAzZDkwOTFmNjAxZjQwNzE4MzM2ZjI2ZGU4YTc4NTNiNjY3NzZiYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0
cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzCkBAIC0wLDAgKzEsNTMgQEAKK2Rl
c2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIGFkZCB3aXRoIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBzZXJpYWxpemVkU2NyaXB0VmFs
dWVFeHBlY3RlZEVycm9yQ2FsbGJhY2soKQoreworICAgIGRlYnVnKCJzZXJpYWxpemVkU2NyaXB0
VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2siKTsKKyAgICB2ZXJpZnlFcnJvckV2ZW50KGV2ZW50
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9iamVjdFN0
b3JlU3VjY2VzcygpCit7CisgICAgZGVidWcoImNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyIpOwor
ICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gZXZh
bEFuZExvZygib2JqZWN0U3RvcmUgPSBldmVudC5yZXN1bHQiKTsKKyAgICB2YXIgYSA9IHt9Owor
ICAgIGEuY3ljbGUgPSBhOworICAgIHRyeSB7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdFN0b3Jl
LmFkZChhKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgib2JqU3Rv
cmUuYWRkIHRocmV3IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZXJyKTsKKyAgICB9Cisg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgbm90aWZ5IGRvbmUgYW5kIGNoZWNrIHRoZSBlcnJvciBj
YWxsYmFjayBvbmNlIGFkZCBpcyBpbXBsZW1lbnRlZC4KKyAgICBkb25lKCk7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgIC8vIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIC8vIHJlc3Vs
dC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOworICAgIC8vIHJlc3VsdC5v
bmVycm9yID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlRXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
CitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzIik7Cisg
ICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB2YXIgZGIgPSBldmFsQW5kTG9nKCJk
YiA9IGV2ZW50LnJlc3VsdCIpOworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9i
amVjdFN0b3JlKCd0ZXN0JykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1
bHQub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzOworICAgIHJlc3VsdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0
aW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNz
ID0gb3BlblN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKK30KKwordGVzdCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA2MTI0NzA4ZDI2MGYyNjk5Nzg2Y2E5NDM1YmI0OGFhNTdhM2Qx
YmEyLi4xMDk5YTZmNjJmOWNlNjRhNjZkN2I0ZTllZjAzNzRmMzM2M2RlNmI4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
OSBAQAorMjAxMC0wNi0yMiAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBw
b3J0IGZvciB0aHJvd2luZyBiZWhhdmlvciBvZiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdG8gYmUg
c3BlY2lmaWVkIGluIHRoZSBJREwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MDgzNQorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHRo
ZSBnZW5lcmF0ZWQgYmluZGluZ3Mgd2lsbCBlaXRoZXIgdGhyb3cgYW4gZXhjZXB0aW9uIG9yIGJl
IHNpbGVudAorICAgICAgICB3aGVuIGNyZWF0aW5nIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGJh
c2VkIG9uIHRoZSBjb3JyZXNwb25kaW5nIElETCBkZWZpbml0aW9uLgorICAgICAgICBJdCBhbHNv
IGFkZHMgVGVzdFBPRE9iai5pZGwgdG8gZXhlcmNpc2UgdGhlIGJpbmRpbmcgZ2VuZXJhdG9yIGZv
ciBpbnRlcmZhY2VzIHdpdGggW1BPRFR5cGU9XSBhdHRyaWJ1dGUuCisgICAgICAgIFRlc3RzOiBX
ZWJLaXRUb29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyBzaG91bGQgcGFzcy4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJET01UZXN0T2Jq
OjpzZXJpYWxpemVkVmFsdWVSYWlzZXMpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFs
aXplZFZhbHVlTm9SYWlzZSk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFs
dWVSZXR1cm5SYWlzZXMpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVl
UmV0dXJuTm9SYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpXZWJET01U
ZXN0UE9ET2JqUHJpdmF0ZTo6V2ViRE9NVGVzdFBPRE9ialByaXZhdGUpOgorICAgICAgICAoV2Vi
RE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaik6CisgICAgICAgIChXZWJET01UZXN0UE9E
T2JqOjppbXBsKToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6On5XZWJET01UZXN0UE9ET2Jq
KToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OnJlYWRPbmx5RmxvYXRBdHRyKToKKyAgICAg
ICAgKFdlYkRPTVRlc3RQT0RPYmo6OnN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdFBP
RE9iajo6c2V0U3RyaW5nQXR0cik6CisgICAgICAgICh0b1dlYkNvcmUpOgorICAgICAgICAodG9X
ZWJLaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBP
RE9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFs
aXplZF92YWx1ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxp
emVkX3ZhbHVlX25vX3JhaXNlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFs
aXplZF92YWx1ZV9yZXR1cm5fcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpf
c2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fbm9fcmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9n
ZXRfcmVhZF9vbmx5X2Zsb2F0X2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9v
YmpfZ2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3Nl
dF9zdHJpbmdfYXR0cik6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3Bv
ZF9vYmpfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dl
dF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2luaXQpOgorICAgICAgICAoV2Vi
S2l0Ojp3cmFwVGVzdFBPRE9iaik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWVSZXR1cm5Ob1JhaXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBP
RE9iai5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9ialByb3Rv
dHlwZTo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OkpTVGVzdFBPRE9i
aik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6On5KU1Rlc3RQT0RPYmopOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0UE9ET2JqOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0UE9ET2JqU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RP
YmpDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OnB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RQT0RPYmpTdHJpbmdBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFBPRE9iajo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b1Rlc3RQT0RPYmopOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQT0RPYmo6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQ
T0RPYmo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6
OmltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjbGFzc0lu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpKU1Rlc3RQ
T0RPYmpQcm90b3R5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLm1tOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZVJhaXNlczpdKToK
KyAgICAgICAgKC1bRE9NVGVzdE9iaiBzZXJpYWxpemVkVmFsdWVOb1JhaXNlOl0pOgorICAgICAg
ICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlc10pOgorICAgICAgICAo
LVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VdKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW06IEFkZGVkLgor
ICAgICAgICAoLVtET01UZXN0UE9ET2JqIGRlYWxsb2NdKToKKyAgICAgICAgKC1bRE9NVGVzdFBP
RE9iaiBmaW5hbGl6ZV0pOgorICAgICAgICAoLVtET01UZXN0UE9ET2JqIHJlYWRPbmx5RmxvYXRB
dHRyXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogc3RyaW5nQXR0cl0pOgorICAgICAgICAo
LVtET01UZXN0UE9ET2JqIHNldFN0cmluZ0F0dHI6XSk6CisgICAgICAgIChjb3JlKToKKyAgICAg
ICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBP
RE9iakludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFBPRE9iai5p
ZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVS
YWlzZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlh
bGl6ZWRWYWx1ZU5vUmFpc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50
ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RQT0RPYmpJbnRlcm5hbDo6VjhfVVNFKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RQT0RPYmpJbnRlcm5hbDo6cmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RQT0RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RQT0RPYmpUZW1wbGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6OkdldFJhd1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0UE9ET2JqOjp0b05hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQ
T0RPYmo6Okhhc0luc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6d3Jh
cCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBP
RE9iajo6ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
V2l0aG91dFRocm93aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6c2VyaWFsaXphdGlvbkVycm9yKToKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudCk6Cisg
ICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuaDoKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVu
dC5pZGw6CisKIDIwMTAtMDYtMjggIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuICBBdHRlbXB0IHRvIGZpeCBDaHJvbWl1bSBhbmQgUXQgYnVpbGRl
cnMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5k
ZXggOTBmOGQ3Y2FjZGY3NDJiZDU3MjRmNDliMGUzOGZhZTRjNGQ4YWFkNi4uYzRhYTAxMWZlODBl
YTNlZGI4NmEyZjQ1YzJlM2ZkZDJkNzA4MWExNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTY3LDYgKzk2NywzMiBAQCBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6On5TZXJpYWxpemVkU2NyaXB0VmFsdWUoKQogewogfQogCitQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRo
b3V0VGhyb3dpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0g
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJp
YWxpemUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZTsK
K30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAmZWMpOworfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSogZWMpCit7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gbmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJpYWxpemUoZXhl
YywgdmFsdWUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgKmVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCAqZWMp
OworICAgIH0gZWxzZSB7CisgICAgICAgICplYyA9IDA7CisgICAgfQorICAgIHJldHVybiBzZXJp
YWxpemVkVmFsdWUucmVsZWFzZSgpOworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNv
bnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtOTc5LDcgKzEwMDUsNyBA
QCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaQogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc2VyaWFsaXpl
ZFZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAppbmRleCA5M2JkMGRlOTA4NjRlZTdiZDJkMTkwNGMwZTIxMDAzNmIwODk0MzFjLi5lYTY4OWVl
ZjI5ODVlMmQ0Y2M4ZDJkZDQ4YWU4NTkzMzdhYzEwNjJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTE3NiwxMCArMTc2LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YTo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSkpOwotICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlV2l0aG91dFRo
cm93aW5nKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpOworCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpOworCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUqIGVjKTsKIAogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDlkODBjODM2ZTA3NTg5
MjI2MTJhNzA2YjIzNGJkNTI4MzZlZWExMjUuLjU4MzdjZjc4NjY2ODY2MmRkOTFhYTQ0ZTA1NzBk
M2Q2YTM1YTg0ZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTcxNiwxMyArMTcxNiwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJ
bXAoKmltcCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RU
eXBlIGVxICJmbG9hdCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJ
bXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikg
LiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgInZhbHVlIiwgRkFMU0UpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9kSW1wLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1l
KCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICIp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVU
b05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsIEZBTFNFKSAuICIpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5jb21taXRDaGFuZ2UocG9k
SW1wLCBjYXN0ZWRUaGlzKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpT
VmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiLCBUUlVFKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXkgJHNldHRlckV4cHJlc3Npb25QcmVmaXggPSAkY29kZUdlbmVyYXRv
ci0+U2V0dGVyRXhwcmVzc2lvblByZWZpeChcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUs
ICRhdHRyaWJ1dGUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRl
LT5zZXR0ZXJFeGNlcHRpb25zfTsKQEAgLTE5MTYsNyArMTkxNiw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJlc29sdmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJl
KCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwg
ImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9t
U2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBh
cmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIiwgQHskZnVuY3Rpb24tPnJhaXNl
c0V4Y2VwdGlvbnN9KSAuICI7XG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg
SWYgYSBwYXJhbWV0ZXIgaXMgImFuIGluZGV4IiBhbmQgaXQncyBuZWdhdGl2ZSBpdCBzaG91bGQg
dGhyb3cgYW4gSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgQnV0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgYmluZGluZ3MsIGJlY2F1
c2UgdGhlIHR5cGUgaXMgdW5zaWduZWQgYW5kIHRoZSBmYWN0IHRoYXQgaXQKQEAgLTIzMDIsNiAr
MjMwMiw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIHsKICAgICBteSAkc2lnbmF0dXJlID0gc2hp
ZnQ7CiAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHJhaXNlcyA9IHNoaWZ0OwogCiAg
ICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlw
ZSk7CiAKQEAgLTIzMjcsNyArMjMyOCw4IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAgIGlm
ICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55Iikgewog
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKLSAg
ICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCAkdmFsdWUp
IjsKKyAgICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCAk
dmFsdWUsICZlYykiIGlmICgkcmFpc2VzKTsKKyAgICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhleGVjLCAkdmFsdWUpIjsKICAgICB9CiAK
ICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFBvaW50LmgifSA9IDEgaWYgJHR5cGUgZXEgIlNWR1Bv
aW50IjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4
IGUyNDljYWFhM2RhYWQzOWZiNTdmZGQwNjE3N2QzOTVmNzJiNTE3YTEuLmE2MTIwNGM5ZTkwMWVj
YzA3NWFkYTg3MzIzMmVhMTE5YTQxOTA2YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTE5MCwxNyArMTE5MCwxOSBAQCBFTkQKIAogICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewogICAg
ICAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJO
YW1lfURpZFRocm93ID0gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpIGlm
ICgkcmFpc2VzRXhjZXB0aW9ucyk7CiAgICAgICAgIH0gZWxzaWYgKEJhc2ljVHlwZUNhbkZhaWxD
b252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfU9rO1xuIik7CiAgICAgICAgIH0KIAogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNp
Z25hdHVyZSgkcGFyYW1ldGVyLCAkcGFyYW1JbmRleCkgLiAiICRwYXJhbWV0ZXJOYW1lID0gIik7
CiAKLSAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSIpIHsKKyAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIgJiYgJHJhaXNlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4
XSwgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBpZiAoJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93KVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpO1xuIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhhcmdzWyRw
YXJhbUluZGV4XSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1J
bmRleF0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRl
ck5hbWV9T2siIDogdW5kZWYpIC4gIjtcbiIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCmluZGV4IDY1YmM5ZjM2ZWUzNmUyNDI1
ZTQ2NGU3MGEwZDYwZGJmNTM0OWQzYTUuLmQ4ODE0N2NjYTljYmQ5N2IzM2E1OWY0ODNiMTliZDdm
YjBmYTgwYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKQEAgLTU0MSwxMiArNTQxLDQxIEBAIFdlYkRPTVRlc3RPYmogV2Vi
RE9NVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJE
T01TdHJpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJET01UZXN0T2JqOjpzZXJp
YWxpemVkVmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKQordm9pZCBXZWJE
T01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSYWlzZXMoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJp
YWxpemVkQXJnKQogewogICAgIGlmICghaW1wbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
bXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFs
aXplZEFyZykpLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01F
eGNlcHRpb25Db2RlPihlYykpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRW
YWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKQoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1
ZU5vUmFpc2UoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6
U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0T2Jq
OjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJET01TdHJpbmcgcmVzdWx0ID0gdG9XZWJLaXQoV1RGOjpnZXRQdHIo
aW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKSk7CisgICAgd2ViRE9NUmFp
c2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFs
dWVSZXR1cm5Ob1JhaXNlKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+
c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKSk7CiB9CiAKIHZvaWQgV2ViRE9NVGVzdE9i
ajo6bWV0aG9kV2l0aEV4Y2VwdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCAzM2JjN2ZiYTU5YjIzYmYwYjM5MDczMDYy
MDM4YjU1NWU4MjMwZjU3Li5lZTk2OWRiOGIyOTgyZDFjY2JiNzI2ZDRkYTM1Yzg3M2E2MTdhYzA4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmgKQEAgLTEwMCw3ICsxMDAsMTAgQEAgcHVibGljOgogICAgIFdlYkRPTVRlc3RPYmogb2Jq
TWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNv
bnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0
UmVxdWlyZXNBbGxBcmdzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpOwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxs
QXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVz
dE9iaiYgb2JqQXJnKTsKLSAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJp
bmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGNvbnN0
IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVO
b1JhaXNlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgV2ViRE9NU3Ry
aW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpOworICAgIFdlYkRPTVN0cmluZyBzZXJp
YWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CiAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9u
KCk7CiAgICAgdm9pZCBjdXN0b21NZXRob2QoKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZFdpdGhB
cmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiYzE0ZDhkZjk1NDk4Mzli
MTRiNzc2MDhhMjg2NDRmM2FlZjI1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMDIg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
RE9NVGVzdFBPRE9iai5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlICJXZWJET01TdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IFdlYkRPTVRlc3RQT0RPYmo6
OldlYkRPTVRlc3RQT0RPYmpQcml2YXRlIHsKKyAgICBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZShX
ZWJDb3JlOjpUZXN0UE9ET2JqKiBvYmplY3QgPSAwKQorICAgICAgICA6IGltcGwob2JqZWN0KQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFBPRE9iaj4gaW1wbDsKK307
CisKK1dlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmooKQorICAgIDogV2ViRE9NT2Jq
ZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0UE9ET2JqOjpXZWJET01U
ZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqIGltcGwpCisgICAgOiBXZWJET01PYmplY3Qo
KQorICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZShpbXBsKSkKK3sKK30K
KworV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaihjb25zdCBXZWJET01UZXN0UE9E
T2JqJiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2ltcGwgPSBjb3B5Lmlt
cGwoKSA/IG5ldyBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOworfQor
CitXZWJDb3JlOjpUZXN0UE9ET2JqKiBXZWJET01UZXN0UE9ET2JqOjppbXBsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5pbXBsLmdldCgpIDogMDsKK30KKworV2ViRE9N
VGVzdFBPRE9iajo6fldlYkRPTVRlc3RQT0RPYmooKQoreworICAgIGRlbGV0ZSBtX2ltcGw7Cisg
ICAgbV9pbXBsID0gMDsKK30KKworZmxvYXQgV2ViRE9NVGVzdFBPRE9iajo6cmVhZE9ubHlGbG9h
dEF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBpbXBsKCktPnJlYWRPbmx5RmxvYXRBdHRyKCk7Cit9CisKK1dlYkRPTVN0cmlu
ZyBXZWJET01UZXN0UE9ET2JqOjpzdHJpbmdBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFdlYkNvcmU6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cigpKTsKK30KKwor
dm9pZCBXZWJET01UZXN0UE9ET2JqOjpzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYg
bmV3U3RyaW5nQXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW1wbCgpLT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOworfQorCitXZWJDb3JlOjpU
ZXN0UE9ET2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYgd3JhcHBlcikKK3sK
KyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmogdG9XZWJL
aXQoV2ViQ29yZTo6VGVzdFBPRE9iaiogdmFsdWUpCit7CisgICAgcmV0dXJuIFdlYkRPTVRlc3RQ
T0RPYmoodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk2ZWUwZTk1ZmE1NGEwMTI3ODJm
YTJmZWYyMThmZTk0YTFiYzQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmgKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViRE9NVGVzdFBPRE9ial9oCisjZGVmaW5lIFdlYkRPTVRlc3RQT0RPYmpf
aAorCisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RQT0RPYmo7Cit9OworCisKK2NsYXNz
IFdlYkRPTVRlc3RQT0RPYmogOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBX
ZWJET01UZXN0UE9ET2JqKCk7CisgICAgZXhwbGljaXQgV2ViRE9NVGVzdFBPRE9iaihXZWJDb3Jl
OjpUZXN0UE9ET2JqKik7CisgICAgV2ViRE9NVGVzdFBPRE9iaihjb25zdCBXZWJET01UZXN0UE9E
T2JqJik7CisgICAgfldlYkRPTVRlc3RQT0RPYmooKTsKKworICAgIGZsb2F0IHJlYWRPbmx5Rmxv
YXRBdHRyKCkgY29uc3Q7CisgICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHIoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJik7CisKKyAgICBXZWJDb3Jl
OjpUZXN0UE9ET2JqKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBzdHJ1Y3QgV2Vi
RE9NVGVzdFBPRE9ialByaXZhdGU7CisgICAgV2ViRE9NVGVzdFBPRE9ialByaXZhdGUqIG1faW1w
bDsKK307CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0
UE9ET2JqJik7CitXZWJET01UZXN0UE9ET2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoq
KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCBlZmIzNjJiYmEzZWVkZDNmM2Ex
YThiNGU3YjRlNWU2NzAzMjcwMDY5Li4xYWE3M2JiZDc0NDA1MjNiODI1OGYyOTFjNmE4NTM3Nzkz
YmU5NzhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlRlc3RPYmouaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiZ29i
amVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCkBAIC0xNTUsMTQgKzE1Niw1NyBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2Vi
S2l0RE9NVGVzdE9iaiogcwogfQogCiB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6
ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRf
dmFsdWVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnLCBHRXJyb3IgKiplcnJvcikKIHsKICAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZF9hcmcpOwogICAg
IFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZXJpYWxpemVkX2Fy
ZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7CiAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252
ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb252ZXJ0ZWRfc2VyaWFsaXplZF9h
cmcsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFs
dWVfbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJDb3JlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUo
c2VyaWFsaXplZF9hcmcpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlcmlhbGl6
ZWRfYXJnKTsKKyAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNvbnZlcnRlZF9zZXJp
YWxpemVkX2FyZyk7Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX3JhaXNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2Vi
Q29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOworICAgIHJldHVybiByZXM7
Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Vy
aWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKTsKKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2Ny
aXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiB2
b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDhkY2Q4YzMxZTMzNjNiZTcyNDhhMzc1YjU5NzJhNTE2
OTcwMGMzOTcuLjA4ZDA1NWY4YTcxNjgyMDBmMmNmZDRjNmE1NDkzNGYzMGU3M2IxMGEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oCkBAIC03MSw3ICs3MSwxNiBAQCBXRUJLSVRfQVBJIFdlYktpdERPTVRlc3RP
YmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2Fu
ZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2NoYXIqICBzdHJfYXJnLCBXZWJLaXRE
T01UZXN0T2JqKiAgb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpOwogCiBXRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZyk7Cit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmFpc2VzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJn
LCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKTsKKworV0VCS0lUX0FQ
SSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9z
ZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vy
cm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX25vX3JhaXNl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdF
cnJvciAqKmVycm9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZTNj
ZjZiNzFjNjg5NTY3Y2JiODIyYmZiY2Q5NzRlNmZkNDEzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmou
Y3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01U
ZXN0UE9ET2JqUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRwcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorZ3BvaW50ZXIg
a2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoqIG9iaikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChvYmosIDApOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBET01PYmplY3RDYWNoZTo6
cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdFBPRE9iaihvYmopKTsKK30KKyAgICAKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdCAvLworCitnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9y
ZWFkX29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXMgPSBpdGVtLT5yZWFkT25s
eUZsb2F0QXR0cigpOworICAgIHJldHVybiByZXM7Cit9CisKK2djaGFyKiAKK3dlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX2dldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OlRlc3RQ
T0RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiAgcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOworICAgIHJldHVybiByZXM7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRE
T01UZXN0UE9ET2JqKiBzZWxmLCBnY2hhciogIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U3RyaW5n
IGNvbnZlcnRlZF92YWx1ZSA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKworCitHX0RFRklORV9U
WVBFKFdlYktpdERPTVRlc3RQT0RPYmosIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqLCBXRUJLSVRf
VFlQRV9ET01fT0JKRUNUKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdFBP
RE9iaiogY29yZShXZWJLaXRET01UZXN0UE9ET2JqKiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiogY29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmoqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29y
ZU9iamVjdCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9SRUFEX09OTFlfRkxPQVRf
QVRUUiwKKyAgICBQUk9QX1NUUklOR19BVFRSLAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKKyAgICAK
KyAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgeworICAgICAgICBXZWJDb3JlOjpUZXN0
UE9ET2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFBPRE9iaiAqPihk
b21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAg
ICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZiA9
IFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9i
aiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7
CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNl
dFN0cmluZ0F0dHIoV2ViQ29yZTo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfcG9kX29ial9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXN0UE9E
T2JqKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX1BPRF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3Jl
OjpUZXN0UE9ET2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2gg
KHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfUkVBRF9PTkxZX0ZMT0FUX0FUVFI6CisgICAgewor
ICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5RmxvYXRB
dHRyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRS
OgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRG
OFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cigpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9jbGFzc19pbml0KFdlYktpdERPTVRl
c3RQT0RPYmpDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRfcHJvcGVy
dHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfcG9k
X29ial9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
UkVBRF9PTkxZX0ZMT0FUX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfZmxvYXQoInJlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogbmFtZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdF9wb2Rfb2JqX3JlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtb25seSAgZ2Zsb2F0IFRlc3RQT0RPYmoucmVhZC1vbmx5LWZsb2F0LWF0
dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLUdfTUFYRkxPQVQsIC8qIG1pbiAqLworR19NQVhGTE9BVCwgLyogbWF4ICovCiswLjAs
IC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX1NUUklOR19BVFRSLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygic3RyaW5nLWF0dHIiLCAvKiBuYW1l
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X3BvZF9vYmpfc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVhZC13cml0ZSAgZ2NoYXIqICBUZXN0UE9ET2JqLnN0cmluZy1hdHRyIiwgLyogbG9u
Z2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAv
KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2luaXQoV2ViS2l0RE9NVGVzdFBPRE9iaiog
cmVxdWVzdCkKK3sKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0UE9ET2Jq
KiB3cmFwVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlT2JqZWN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIAorICAgIFdlYktpdERP
TVRlc3RQT0RPYmoqIHdyYXBwZXIgPSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSiwgTlVMTCkpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHdyYXBwZXIsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhh
biB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysg
b2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0
aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAg
ICAqLworCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisgICAgV0VCS0lUX0RPTV9PQkpFQ1Qod3Jh
cHBlciktPmNvcmVPYmplY3QgPSBjb3JlT2JqZWN0OworCisKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NmVhYzNlYzE3MDUxMWU2MWFiNTdmMWY2ZDVlNzQyZDAxYmJhOTEzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
UE9ET2JqLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIFdlYktpdERPTVRlc3RQT0RPYmpfaAorI2RlZmluZSBXZWJLaXRET01UZXN0UE9ET2JqX2gK
KworI2luY2x1ZGUgIndlYmtpdC93ZWJraXRkb21kZWZpbmVzLmgiCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUgIndl
YmtpdC9XZWJLaXRET01PYmplY3QuaCIKKworCitHX0JFR0lOX0RFQ0xTCisjZGVmaW5lIFdFQktJ
VF9UWVBFX0RPTV9URVNUX1BPRF9PQkogICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9v
YmpfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1BPRF9PQkoob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9N
X1RFU1RfUE9EX09CSiwgV2ViS2l0RE9NVGVzdFBPRE9iaikpCisjZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9QT0RfT0JKX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIFdlYktpdERPTVRlc3RQT0RPYmpD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX1BPRF9PQkoob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9E
X09CSikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9QT0RfT0JKX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX1BP
RF9PQkopKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSl9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9Q
T0RfT0JKLCBXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRl
c3RQT0RPYmogeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVRlc3RQT0RPYmpDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0
X3BvZF9vYmpfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X2Rv
bV90ZXN0X3BvZF9vYmpfZ2V0X3JlYWRfb25seV9mbG9hdF9hdHRyKFdlYktpdERPTVRlc3RQT0RP
YmoqIHNlbGYpOworCitXRUJLSVRfQVBJIGdjaGFyKiAKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2Jq
X2dldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9N
VGVzdFBPRE9iaiogc2VsZiwgZ2NoYXIqICB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01UZXN0UE9ET2JqX2ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9ialBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mYzk1ZTcxZDdmZGJmY2I4N2NlZjUwOTg2MTQzZTU1ZDdlYzE3
MzFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXRUJfS0lUX0RPTV9URVNUX1BPRF9PQkpfUFJJ
VkFURV9ICisjZGVmaW5lIFdFQl9LSVRfRE9NX1RFU1RfUE9EX09CSl9QUklWQVRFX0gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIFdlYktp
dERPTVRlc3RQT0RPYmogKgorICAgIHdyYXBUZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmog
KmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqCisgICAgY29yZShXZWJL
aXRET01UZXN0UE9ET2JqICpyZXF1ZXN0KTsKKworICAgIGdwb2ludGVyCisgICAga2l0KFdlYkNv
cmU6OlRlc3RQT0RPYmoqIG5vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdFQl9LSVRfRE9NX1RFU1RfUE9EX09CSl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDM2MDc4MmQ4NjhmNWFk
YjAxMWVjNzMzODA2ZjQyMGExMDNhYTI1ZjUuLmY2ODQ2MDlkZGU4NDE2ZDY4NzM1ZTk5Njc5MmI4
MjdmZTgxODdkNWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50CiAj
ZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzNd
ID0KIHsKICAgICB7ICJ2b2lkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Vm9pZE1ldGhvZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInZv
aWRNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRo
b2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTU0LDcg
KzE1NCwxMCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXNbMzBdID0KICAgICB7ICJvYmpNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnRE
ZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50
cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAotICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAor
ICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKSwgKGludHB0cl90KTEgVEhVTktfR0VO
RVJBVE9SKDApIH0sCisgICAgeyAic2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKSwgKGlu
dHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic2VyaWFsaXplZFZhbHVlUmV0
dXJuTm9SYWlzZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZVJldHVybk5vUmFpc2UpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7
ICJtZXRob2RXaXRoRXhjZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aEV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAg
IHsgImN1c3RvbU1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1l
dGhvZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1l
dGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9k
V2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE3OSw3ICsx
ODIsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGVWYWx1ZXNbMzBdID0KIH07CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0Nf
Q09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgNjks
IDYzLCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05T
VF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzEsIDEy
NywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlw
ZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBA
IC03ODQsMTkgKzc4Nyw2MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2VyaWFsaXplZFZhbHVlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJmVjKTsKKwor
ICAgIGltcC0+c2VyaWFsaXplZFZhbHVlUmFpc2VzKHNlcmlhbGl6ZWRBcmcsIGVjKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OwogCi0gICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5z
ZXJpYWxpemVkVmFsdWVOb1JhaXNlKHNlcmlhbGl6ZWRBcmcpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisKKyAgICBKU0M6OkpTVmFs
dWUgcmVzdWx0ID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpID8gaW1wLT5z
ZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSkgOiBqc051bGwoKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZVJldHVybk5vUmFpc2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVy
aXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworCisKKyAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkgPyBpbXAtPnNlcmlhbGl6
ZWRWYWx1ZVJldHVybk5vUmFpc2UoKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCkpIDoganNOdWxsKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDNiMjFjODU2MDFjMGEzN2I3Y2Rm
ZmYxZWU1ZmEzNjE0MTI4YTQ2NzAuLjAxZDc0NDkyNDI1ZGYxYjdmNjZhYjYzMzUxMjZjYjkyZjJm
YjRmMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CkBAIC05NCw3ICs5NCwxMCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2QoSlNDOjpFeGVjUwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9k
V2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Mo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Mo
SlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2VyaWFsaXplZFZhbHVlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWVOb1JhaXNlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2Uo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0
aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RQT0RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZTg4NDRiYzkwNzdhNmQ1MGYy
ZThmMDg4MjM4OWIzMjM5NzkxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RPYmouY3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3RQT0RPYmouaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgi
CisjaW5jbHVkZSA8cnVudGltZS9KU051bWJlckNlbGwuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlND
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNU
ZXN0UE9ET2JqKTsKKworLyogSGFzaCB0YWJsZSAqLworI2lmIEVOQUJMRShKSVQpCisjZGVmaW5l
IFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQorI2RlZmluZSBU
SFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RQT0RPYmpUYWJsZVZhbHVlc1s0XSA9Cit7CisgICAgeyAicmVhZE9ubHlG
bG9hdEF0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzdHJpbmdBdHRyIiwg
RG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdFBPRE9ialN0
cmluZ0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAiY29uc3RydWN0b3IiLCBEb250
RW51bSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKSwgKGludHB0cl90KTAgVEhVTktfR0VO
RVJBVE9SKDApIH0sCisgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Cit9Owor
CisjdW5kZWYgVEhVTktfR0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNo
VGFibGUgSlNUZXN0UE9ET2JqVGFibGUgPSB7IDgsIDcsIEpTVGVzdFBPRE9ialRhYmxlVmFsdWVz
LCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLworI2lmIEVOQUJMRShKSVQp
CisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQor
I2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisKK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzWzFdID0K
K3sKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBU
SFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rl
c3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rv
clRhYmxlVmFsdWVzLCAwIH07CitjbGFzcyBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgSlNUZXN0UE9ET2JqQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCisgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYs
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpT
dHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291
bnQpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVt
ZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
fTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0UE9ET2JqQ29uc3RydWN0b3IiLCAwLCAmSlNUZXN0UE9ET2JqQ29uc3RydWN0b3JUYWJs
ZSwgMCB9OworCitKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6SlNUZXN0UE9ET2JqQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQor
eworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RQ
T0RPYmpQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKK30KKworYm9vbCBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rl
c3RQT0RPYmpDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmSlNUZXN0UE9ET2JqQ29uc3Ry
dWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RQ
T0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RQ
T0RPYmpDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmSlNUZXN0UE9ET2JqQ29uc3RydWN0
b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKworLyogSGFzaCB0
YWJsZSBmb3IgcHJvdG90eXBlICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VO
RVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVS
QVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdFBPRE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzFdID0KK3sKKyAgICB7IDAsIDAsIDAsIDAg
VEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRp
YyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJs
ZSA9IHsgMSwgMCwgSlNUZXN0UE9ET2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK2NvbnN0
IENsYXNzSW5mbyBKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RQT0RPYmpQ
cm90b3R5cGUiLCAwLCAmSlNUZXN0UE9ET2JqUHJvdG90eXBlVGFibGUsIDAgfTsKKworSlNPYmpl
Y3QqIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3RQT0RPYmo+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rl
c3RQT0RPYmo6OnNfaW5mbyA9IHsgIlRlc3RQT0RPYmoiLCAwLCAmSlNUZXN0UE9ET2JqVGFibGUs
IDAgfTsKKworSlNUZXN0UE9ET2JqOjpKU1Rlc3RQT0RPYmooTm9uTnVsbFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiA+IGltcGwpCisgICAgOiBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1f
aW1wbChpbXBsKQoreworfQorCitKU1Rlc3RQT0RPYmo6On5KU1Rlc3RQT0RPYmooKQoreworICAg
IGZvcmdldERPTU9iamVjdCh0aGlzLCBpbXBsKCkpOworfQorCitKU09iamVjdCogSlNUZXN0UE9E
T2JqOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTVGVzdFBPRE9ialByb3RvdHlw
ZShnbG9iYWxPYmplY3QsIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworYm9vbCBKU1Rlc3RQT0RPYmo6
OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNW
YWx1ZVNsb3Q8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRo
aXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0UE9ET2JqOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFBPRE9iaiwgQmFzZT4oZXhlYywgJkpTVGVz
dFBPRE9ialRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitKU1Zh
bHVlIGpzVGVzdFBPRE9ialJlYWRPbmx5RmxvYXRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0UE9ET2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
KyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdFBPRE9iaiBpbXAoKmNhc3RlZFRoaXMt
PmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSAganNOdW1iZXIoZXhlYywgaW1wLnJlYWRP
bmx5RmxvYXRBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNUZXN0
UE9ET2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0
IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdFBPRE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdFBPRE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFRlc3RQT0RPYmogaW1wKCpjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gIGpzU3RyaW5nKGV4ZWMsIGltcC5zdHJpbmdBdHRyKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNUZXN0UE9ET2JqQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBK
U1Rlc3RQT0RPYmoqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFBPRE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7CisgICAgcmV0dXJuIEpTVGVzdFBPRE9iajo6Z2V0Q29uc3RydWN0b3Io
ZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Cit9Cit2b2lkIEpTVGVzdFBPRE9iajo6
cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgbG9va3VwUHV0PEpTVGVz
dFBPRE9iaiwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgJkpTVGVzdFBPRE9ialRh
YmxlLCB0aGlzLCBzbG90KTsKK30KKwordm9pZCBzZXRKU1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgSlNUZXN0UE9ET2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4o
dGhpc09iamVjdCk7CisgICAgSlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqIGltcCA9
IHN0YXRpY19jYXN0PEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBUZXN0UE9ET2JqIHBvZEltcCgqaW1wKTsKKyAgICBwb2RJbXAuc2V0
U3RyaW5nQXR0cih2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOworICAg
IGltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2FzdGVkVGhpcyk7Cit9CisKK0pTVmFsdWUgSlNU
ZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFBP
RE9iakNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTVkdQT0RUeXBlV3JhcHBlcjxU
ZXN0UE9ET2JqPiogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQoreworICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPEpTVGVzdFBPRE9iaiwgSlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0
UE9ET2JqPiA+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0LCBjb250ZXh0KTsKK30KK1Rlc3RQ
T0RPYmogdG9UZXN0UE9ET2JqKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFs
dWUuaW5oZXJpdHMoJkpTVGVzdFBPRE9iajo6c19pbmZvKSA/IChUZXN0UE9ET2JqKSAqc3RhdGlj
X2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpIDogVGVzdFBPRE9i
aigpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0ZTRmZmViYTU0MzFiNWM4OThmMTk1MTljNTQyNTY5Zjgz
NmM3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RQT0RPYmouaApAQCAtMCwwICsxLDg2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgSlNUZXN0UE9ET2JqX2gKKyNkZWZpbmUgSlNUZXN0UE9ET2JqX2gKKworI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTU1ZHUE9EVHlwZVdyYXBwZXIuaCIK
KyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Lmg+CisjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3RQT0RPYmogOiBwdWJsaWMgRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIg
eworICAgIHR5cGVkZWYgRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIgQmFzZTsKK3B1YmxpYzoK
KyAgICBKU1Rlc3RQT0RPYmooTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBKU0RP
TUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2Jq
PiA+KTsKKyAgICB2aXJ0dWFsIH5KU1Rlc3RQT0RPYmooKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RP
Ymo+ICogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIFJlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4gbV9pbXBsOworcHJv
dGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9Owor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiosIFNWR0VsZW1lbnQqKTsKK1Rlc3RQT0RP
YmogdG9UZXN0UE9ET2JqKEpTQzo6SlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdFBPRE9ialByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CisgICAgdHlwZWRl
ZiBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOworcHVibGljOgorICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9CisgICAgSlNUZXN0
UE9ET2JqUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9uTnVs
bFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkgOiBKU0M6OkpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Citwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3M7Cit9OworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RQT0RPYmpS
ZWFkT25seUZsb2F0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7CitKU0M6OkpTVmFsdWUganNUZXN0UE9ET2JqU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lk
IHNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCmluZGV4IGQ4ODYyZGExNWVhYzRlODFhMmVi
MTFhYmVhM2EwNWQzM2ZiMmMxYmIuLjc4M2EyNjcxMWIyZjI1ZDRhYzZlZjJmMWJiYTg0NzQ0ZDdk
MWNkMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oCkBAIC05OCw3ICs5OCwxMCBAQAogLSAoRE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhB
cmdzOihpbnQpaW50QXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0
T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3M6
KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRl
c3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0
ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7Ci0tICh2b2lkKXNlcmlhbGl6ZWRWYWx1
ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOworLSAodm9pZClzZXJpYWxpemVkVmFsdWVSYWlz
ZXM6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKKy0gKHZvaWQpc2VyaWFsaXplZFZhbHVlTm9S
YWlzZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVk
VmFsdWVSZXR1cm5SYWlzZXM7CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2U7CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRpb247CiAtICh2b2lkKWN1c3RvbU1ldGhv
ZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0
cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0gYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXggOWJiYmYxNDRi
N2VlNjlmYjk2YTQwZjQxNDlkODA1OTRjZWY3ZGZiOC4uMTk3OWEzOGJjZTk1ZmZmMDk3NDVjODFh
NzdkYmFmNTM4MjQwYjU2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQpAQCAtNDQ1LDEwICs0NDUsMzMgQEAKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0tICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVk
QXJnCistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczooTlNTdHJpbmcgKilzZXJpYWxpemVk
QXJnCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElN
UEwtPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoV2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRB
cmcpKSwgZWMpOworICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7Cit9CisKKy0gKHZv
aWQpc2VyaWFsaXplZFZhbHVlTm9SYWlzZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNlcmlh
bGl6ZWRWYWx1ZU5vUmFpc2UoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
V2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7Cit9CisKKy0gKE5TU3RyaW5nICopc2Vy
aWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIE5T
U3RyaW5nICpyZXN1bHQgPSBraXQoV1RGOjpnZXRQdHIoSU1QTC0+c2VyaWFsaXplZFZhbHVlUmV0
dXJuUmFpc2VzKGVjKSkpOworICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5O
b1JhaXNlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlz
ZSgpKSk7CiB9CiAKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MTQ1NmE2NmM3NWY5NGJlYjAxNjBhNzc3YzhjOTBhZDBiOWI3MmIzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLmgKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPFdlYkNvcmUvRE9NT2JqZWN0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhf
QUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKworQGNsYXNzIE5TU3RyaW5nOworCitA
aW50ZXJmYWNlIERPTVRlc3RQT0RPYmogOiBET01PYmplY3QKKy0gKGZsb2F0KXJlYWRPbmx5Rmxv
YXRBdHRyOworLSAoTlNTdHJpbmcgKilzdHJpbmdBdHRyOworLSAodm9pZClzZXRTdHJpbmdBdHRy
OihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHI7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc2NWI1MWQzOTE0MGZlNjhhMmIzNDQxZWJiODRiMDFlNDJlZjQ5ZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmou
bW0KQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiRE9NVGVzdFBP
RE9iai5oIgorCisjaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1J1
bGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RE9NRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0
ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVRlc3RQT0RPYmpJbnRlcm5h
bC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiS1VSTC5oIgorI2ltcG9ydCAiVGVzdFBPRE9iai5oIgor
I2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCisj
aW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDx3dGYvR2V0UHRyLmg+
CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmoqPihf
aW50ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0UE9ET2JqCisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVh
ZChbRE9NVGVzdFBPRE9iaiBjbGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBk
ZWxldGUgSU1QTDsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUK
K3sKKyAgICBkZWxldGUgSU1QTDsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistIChmbG9h
dClyZWFkT25seUZsb2F0QXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKK30KKworLSAo
TlNTdHJpbmcgKilzdHJpbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5zdHJpbmdBdHRyKCk7Cit9CisKKy0gKHZvaWQp
c2V0U3RyaW5nQXR0cjooTlNTdHJpbmcgKiluZXdTdHJpbmdBdHRyCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldFN0cmluZ0F0dHIobmV3
U3RyaW5nQXR0cik7Cit9CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdFBPRE9iaiBjb3JlKERPTVRl
c3RQT0RPYmogKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyAqcmVpbnRlcnByZXRf
Y2FzdDxXZWJDb3JlOjpUZXN0UE9ET2JqKj4od3JhcHBlci0+X2ludGVybmFsKSA6IFdlYkNvcmU6
OlRlc3RQT0RPYmooKTsKK30KKworRE9NVGVzdFBPRE9iaiAqa2l0KFdlYkNvcmU6OlRlc3RQT0RP
YmogdmFsdWUpCit7CisgICAgeyBET01fQVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJl
YWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7IH07CisgICAgRE9NVGVzdFBPRE9iaiAqd3JhcHBl
ciA9IFtbRE9NVGVzdFBPRE9iaiBhbGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5h
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihuZXcgV2ViQ29yZTo6VGVz
dFBPRE9iaih2YWx1ZSkpOworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RP
YmpJbnRlcm5hbC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
UE9ET2JqSW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGNlYjBjZGIzY2RlM2M0NzRhZTFjNGUzYzU0
NDk5NjhjMDlmZDBiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01UZXN0UE9ET2JqLmg+
CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRF
U1QKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFRlc3RQT0RPYmo7Cit9CisKK1dl
YkNvcmU6OlRlc3RQT0RPYmogY29yZShET01UZXN0UE9ET2JqICopOworRE9NVGVzdFBPRE9iaiAq
a2l0KFdlYkNvcmU6OlRlc3RQT0RPYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggZWY0ZGIxMDZmMDc0NjZmODQyNTk0MTRkODlkOWQw
NDlmNjk4NDIyMi4uN2YwYzNmZGY4ZjgwZjU0OWE0ZjFjMWY1OWQxOTc3YjdmYzI1MDc3MyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTYyLDcgKzYyLDEx
IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBU
ZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoaW4gRE9NU3RyaW5nIHN0
ckFyZywgaW4gVGVzdE9iaiBvYmpBcmcpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAotICAgICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgc2VyaWFsaXplZEFyZyk7CisgICAgICAgIC8vIFRlc3QgdmFyaW91cyBmb3JtcyBvZiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUKKyAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVSYWlzZXMoaW4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpIHJhaXNlcyhET01FeGNlcHRpb24p
OworICAgICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoaW4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHNlcmlhbGl6ZWRBcmcpOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2Vy
aWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CiAK
ICAgICAgICAgLy8gRXhjZXB0aW9ucwogICAgICAgICB2b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24o
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFBPRE9iai5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRiYzA1YmZhMTk2Y2RhNDg3YjQ0MzhmZTU1YWFi
MDgxMDA4ZjllZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RQT0RPYmouaWRsCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3Ry
QXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBJ
REwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5kIGZv
ciB0cmFja2luZworLy8gY2hhbmdlcyBpbiBpdHMgb3VwdXQuCittb2R1bGUgdGVzdCB7CisgICAg
aW50ZXJmYWNlIFtQT0RUeXBlPVRlc3RQT0RPYmpdIFRlc3RQT0RPYmogeworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgZmxvYXQgICAgICAgICAgcmVhZE9ubHlGbG9hdEF0dHI7CisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBz
dHJpbmdBdHRyOworICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcAppbmRleCA0YTU0YWUzNDA5NTM3NDA0OWJjYTFlMjE5NTZhYzhkMzhk
ZWIzMTZmLi5jYzA5ZDVlNmFlZWUxYmVlMjM2YjZjMzg5MGM3MjA2NWFlMWJlNjMyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTU2MSwx
OCArNTYxLDU4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93c0NhbGxiYWNrKGNvbnN0IHY4CiAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlh
bGl6ZWRWYWx1ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCitzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxp
emVkVmFsdWUiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZVJh
aXNlcyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgewogICAgIGJvb2wgc2VyaWFs
aXplZEFyZ0RpZFRocm93ID0gZmFsc2U7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMF0s
IHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyk7CiAgICAgaWYgKHNlcmlhbGl6ZWRBcmdEaWRUaHJvdykK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1
ZShzZXJpYWxpemVkQXJnKTsKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhzZXJpYWxp
emVkQXJnLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVk
VmFsdWVOb1JhaXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiKTsKKyAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhhcmdzWzBdKTsKKyAgICBpbXAtPnNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2Uoc2VyaWFsaXplZEFyZyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRW
YWx1ZVJldHVyblJhaXNlc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMiKTsK
KyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiByZXN1bHQgPSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYyk7
CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpLT5kZXNlcmlhbGl6ZSgpOworICAgIH0KKyAgICBmYWlsOgorICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZVJldHVybk5vUmFpc2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIpOwor
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Cisg
ICAgcmV0dXJuIGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpLT5kZXNlcmlhbGl6
ZSgpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoubWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwpAQCAtOTQ2LDcgKzk4NiwxMCBAQCBz
dGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7
InZvaWRNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6OnZvaWRNZXRob2RDYWxsYmFja30sCiAgICAg
eyJpbnRNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrfSwKICAgICB7
Im9iak1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAotICAgIHsi
c2VyaWFsaXplZFZhbHVlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFj
a30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVSYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlh
bGl6ZWRWYWx1ZVJhaXNlc0NhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2Ui
LCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2VDYWxsYmFja30sCisgICAg
eyJzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6
ZWRWYWx1ZVJldHVyblJhaXNlc0NhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRWYWx1ZVJldHVy
bk5vUmFpc2UiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VD
YWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjpt
ZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0
T2JqOjpjdXN0b21NZXRob2RDYWxsYmFja30sCiAgICAgeyJjdXN0b21NZXRob2RXaXRoQXJncyIs
IFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3NDYWxsYmFja30sCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MDcyYzk1NTllOGY2YjBlZWZiYjVhMTE5NjE1MTQwNjM2MmY3MmVmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcApAQCAt
MCwwICsxLDEzOCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJWOFRlc3RQT0RPYmouaCIKKworI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0
ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250
ZXh0LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dy
YXBwZXJUeXBlSW5mbyBWOFRlc3RQT0RPYmo6OmluZm8gPSB7IFY4VGVzdFBPRE9iajo6R2V0VGVt
cGxhdGUsIFY4VGVzdFBPRE9iajo6ZGVyZWZPYmplY3QsIDAgfTsKKworbmFtZXNwYWNlIFRlc3RQ
T0RPYmpJbnRlcm5hbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7
IH0KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seUZsb2F0QXR0ckF0dHJH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFBPRE9iai5yZWFkT25seUZsb2F0QXR0
ci5fZ2V0Iik7CisgICAgVGVzdFBPRE9iaiogaW1wID0gVjhUZXN0UE9ET2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC0+cmVhZE9ubHlG
bG9hdEF0dHIoKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0
ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFBPRE9iai5zdHJpbmdBdHRy
Ll9nZXQiKTsKKyAgICBUZXN0UE9ET2JqKiBpbXAgPSBWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0UE9ET2JqLnN0cmluZ0F0dHIuX3Nl
dCIpOworICAgIFRlc3RQT0RPYmoqIGltcCA9IFY4VGVzdFBPRE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz4gdiA9IHZhbHVlOworICAg
IGltcC0+c2V0U3RyaW5nQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RQT0RPYmpJbnRlcm5hbAorCitzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0
UE9ET2JqQXR0cnNbXSA9IHsKKyAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRPbmx5RmxvYXRBdHRyJyAo
VHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJyZWFkT25seUZs
b2F0QXR0ciIsIFRlc3RQT0RPYmpJbnRlcm5hbDo6cmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVy
LCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3N0cmluZ0F0dHInIChUeXBl
OiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29udmVydE51bGxUb051bGxTdHJpbmcnKQorICAgIHsi
c3RyaW5nQXR0ciIsIFRlc3RQT0RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0ZXIsIFRl
c3RQT0RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywg
c3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAor
fTsKK3N0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJl
VjhUZXN0UE9ET2JqVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGRlc2MpCit7CisgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUg
PSBjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAiVGVzdFBPRE9iaiIsIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RQT0RPYmo6OmludGVybmFsRmllbGRDb3VudCwK
KyAgICAgICAgVGVzdFBPRE9iakF0dHJzLCBzaXplb2YoVGVzdFBPRE9iakF0dHJzKSAvIHNpemVv
ZigqVGVzdFBPRE9iakF0dHJzKSwKKyAgICAgICAgMCwgMCk7CisgICAgCisKKyAgICAvLyBDdXN0
b20gdG9TdHJpbmcgdGVtcGxhdGUKKyAgICBkZXNjLT5TZXQoZ2V0VG9TdHJpbmdOYW1lKCksIGdl
dFRvU3RyaW5nVGVtcGxhdGUoKSk7CisgICAgcmV0dXJuIGRlc2M7Cit9CisKK3Y4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmo6OkdldFJhd1RlbXBsYXRlKCkK
K3sKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVz
dFBPRE9ialJhd0NhY2hlID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKKyAgICByZXR1cm4gVjhUZXN0
UE9ET2JqUmF3Q2FjaGU7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdFBPRE9iakNhY2hlID0gQ29uZmlndXJlVjhU
ZXN0UE9ET2JqVGVtcGxhdGUoR2V0UmF3VGVtcGxhdGUoKSk7CisgICAgcmV0dXJuIFY4VGVzdFBP
RE9iakNhY2hlOworfQorCitWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBWOFRlc3RQ
T0RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qPihv
YmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRl
eCkpOworfQorCitib29sIFY4VGVzdFBPRE9iajo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5j
ZSh2YWx1ZSk7Cit9CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RQT0RPYmo6Ondy
YXAoVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiogaW1wbCkKK3sKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAgICAg
ICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwp
OworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisK
KyAgICBpbXBsLT5yZWYoKTsKKyAgICBnZXRET01PYmplY3RNYXAoKS5zZXQoaW1wbCwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBl
V3JhcHBlcjxUZXN0UE9ET2JqPiA+IGltcGwpCit7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQo
KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFY4U1ZHUE9EVHlwZVdyYXBwZXI8
VGVzdFBPRE9iaj4qIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKKyAgICByZXR1cm4gVjhUZXN0UE9ET2JqOjp3cmFwKGltcGwpOworfQorCit2b2lk
IFY4VGVzdFBPRE9iajo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQoreworICAgIHN0YXRpY19j
YXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qPihvYmplY3QpLT5kZXJlZigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2MzVlMzFiOGE5ZTQzMThkMDUz
Y2UxNTRkMjBkNjYyYTdlZDk4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaApAQCAtMCwwICsxLDUxIEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgorKi8KKworI2lmbmRlZiBWOFRlc3RQT0RPYmpfaAorI2RlZmluZSBWOFRlc3RQT0RP
YmpfaAorCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIK
KyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUE9EVHlwZT4gY2xhc3MgVjhTVkdQT0RUeXBlV3JhcHBlcjsKKworY2xhc3MgVjhUZXN0UE9E
T2JqIHsKKworcHVibGljOgorICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgVjhTVkdQT0RU
eXBlV3JhcHBlcjxUZXN0UE9ET2JqID4qIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4p
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVjhTVkdQT0RUeXBlV3Jh
cHBlcjxUZXN0UE9ET2JqID4qKTsKKyAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7
CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOworICAgIHN0YXRpYyBjb25zdCBpbnQg
aW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDA7Cit9OworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChWOFNWR1BPRFR5cGVXcmFwcGVy
PFRlc3RQT0RPYmogPiopOwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjxW
OFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmogPiA+KTsKK30KKworI2VuZGlmIC8vIFY4VGVz
dFBPRE9ial9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggOGU5MTkyMDkwYzY0NmU1YjVhNGM0NTI1MzA1ODczNzZlMzMzZGQ5Yi4uYjFkZjZj
MjE1NzAwMGE0YjRjMWNiM2Q4ZDZlMWU0NjMzYjE3OTMyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTAyMywxMyArMTAyMywyNCBAQCB2
b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iagogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlLCBib29sJiBkaWRUaHJvdykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzY3JpcHRWYWx1ZSA9IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFs
dWUodmFsdWUpKTsKKyAgICBpZiAoc2NyaXB0VmFsdWUtPm1fZGF0YS5pc051bGwoKSkgeworICAg
ICAgICB0aHJvd0Vycm9yKE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgZGlkVGhyb3cgPSB0
cnVlOworICAgIH0gZWxzZQorICAgICAgICBkaWRUaHJvdyA9IGZhbHNlOworICAgIHJldHVybiBz
Y3JpcHRWYWx1ZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCiB7CiAgICAgYm9vbCBkaWRUaHJvdzsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSh2YWx1ZSwgZGlkVGhyb3cpKTsKKyAgICByZXR1cm4gY3JlYXRl
KHZhbHVlLCBkaWRUaHJvdyk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVk
U2NyaXB0VmFsdWUodmFsdWUpKTsKIH0KIAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoU3RyaW5nIGRhdGEpCkBA
IC0xMDU4LDE3ICsxMDY5LDEyIEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlKCkKIHsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdykKK1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSkKIHsKLSAgICBkaWRUaHJvdyA9IGZhbHNlOwogICAgIFdyaXRlciB3cml0
ZXI7CiAgICAgU2VyaWFsaXplciBzZXJpYWxpemVyKHdyaXRlcik7Ci0gICAgaWYgKCFzZXJpYWxp
emVyLnNlcmlhbGl6ZSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVE
X0VSUik7Ci0gICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2RhdGEgPSBTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0YSgpKTsKKyAgICBpZiAo
c2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKQorICAgICAgICBtX2RhdGEgPSBTdHJpbmdJbXBs
OjphZG9wdCh3cml0ZXIuZGF0YSgpKTsKIH0KIAogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWUoU3RyaW5nIGRhdGEsIFN0cmluZ0RhdGFNb2RlIG1vZGUpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAzNzEwYjVhMjMx
MDVhNmYxNjkzMTY1MGVhNTA4YjAyYjQ3ZTllMGQyLi5iNWY1ZjU0ZGQ5M2RkODhmZjI1NDQ0NWU1
NmE3OTVhNzRjYmU4YzhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIC8vIFY4LiBXaGVuIHNl
cmlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCwgfGRpZFRocm93fCBpcyBmYWxzZS4KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIGRpZFRocm93KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlV2l0aG91dFRo
cm93aW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShTdHJpbmcgZGF0YSk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoU3RyaW5n
IGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3Jl
YXRlKCk7CkBAIC01Nyw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0b1dpcmVTdHJp
bmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAorICAgIGJvb2wgc2VyaWFsaXphdGlvbkVy
cm9yKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlzTnVsbCgpOyB9CisKICAgICAvLyBEZXNlcmlh
bGl6ZXMgdGhlIHZhbHVlIChpbiB0aGUgY3VycmVudCBjb250ZXh0KS4gUmV0dXJucyBhIG51bGwg
dmFsdWUgaW4KICAgICAvLyBjYXNlIG9mIGZhaWx1cmUuCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGRlc2VyaWFsaXplKCk7CkBAIC02OCw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIGJvb2wmIGRpZFRocm93KTsKKyAgICBleHBsaWNpdCBTZXJp
YWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKICAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWUoU3RyaW5nIGRhdGEsIFN0cmluZ0RhdGFNb2RlIG1vZGUpOwogCiAgICAgU3Ry
aW5nIG1fZGF0YTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwIGIv
V2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKaW5kZXggYjlhZDg2MmJjMDI5MzdjNDI5YmYy
MzQ0YTQzYTk4YWM3OWQxMDljOC4uNzkyZmIzNGRmYjYwNTQ2M2QxMzJiNDdkYzM3MTEzOGIxMDRj
NGNhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKQEAgLTM3LDggKzM3LDkgQEAgUG9wU3RhdGVFdmVu
dDo6UG9wU3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVP
YmplY3QpCiB7CiB9CiAgICAgCi12b2lkIFBvcFN0YXRlRXZlbnQ6OmluaXRQb3BTdGF0ZUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQordm9pZCBQ
b3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzdGF0ZU9iamVjdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQVNTRVJU
X1VOVVNFRChlYywgdHJ1ZSk7CiAgICAgaWYgKGRpc3BhdGNoZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oIGIvV2ViQ29y
ZS9kb20vUG9wU3RhdGVFdmVudC5oCmluZGV4IDJmYjhkMDY4NWJmMGUwZDUyMmU0NmIwOGI4YWJh
ZjcyNjNhNGI0MjIuLjcxMWYwYjVkYWE5Yjk3MDA5Yjk2MWMxYTliY2Y3ZjY1MjAyOGY2NzggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Q
b3BTdGF0ZUV2ZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBvcFN0YXRlRXZlbnQoc3RhdGVPYmplY3QpKTsKICAgICB9CiAKLSAgICB2
b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5C
dWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
KTsKKyAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Ym9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgYm9vbCBpc1BvcFN0YXRlRXZlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZU9iamVjdC5nZXQoKTsgfSAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVF
dmVudC5pZGwKaW5kZXggYWRjOTA3NGVjNGZlYjA3MDA4NzY3M2Y2YWM4OGMwMzBhNTg3MjRkMi4u
NmM4NjY1N2UwN2JkMDlhNjU4NWY5YzJmNTgwMGViMzIwYzgxNjNmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVu
dC5pZGwKQEAgLTI5LDkgKzI5LDkgQEAgbW9kdWxlIGV2ZW50cyB7CiAjaWYgIWRlZmluZWQoTEFO
R1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCiAgICAgaW50ZXJmYWNlIFBvcFN0YXRlRXZlbnQg
OiBFdmVudCB7CiAgICAgICAgIHZvaWQgaW5pdFBvcFN0YXRlRXZlbnQoaW4gRE9NU3RyaW5nIHR5
cGVBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnVi
YmxlQXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1
YmJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNl
bGFibGVBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSBzdGF0ZUFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHN0YXRlQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1Y4Q3VzdG9tR2V0dGVyXSBhbnkgc3RhdGU7CiAg
ICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60033</attachid>
            <date>2010-06-29 10:17:05 -0700</date>
            <delta_ts>2010-06-30 05:32:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100629181702.patch</filename>
            <type>text/plain</type>
            <size>104872</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YWQ5ZTgyMjM0NjBjZjY3MTEwZDRhODc2YjAyY2QxOTRmMTBlZTQ4Li43ZWUzNWU3
NTQwZGI3ZGEzMzEwZTI3NGZlNDU4MjY4YTExMTRkOTM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjkgIE1pa2hh
aWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IHRleHQgZXhwZWN0YXRpb25zIHVwZGF0ZSBhZnRlciByNjIxMjEuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0
ZWV2ZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzdjZDI2NzdhNGFiY2YyOTAwNzI3MjUw
NDM1YTdlODhhZGY0MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDcgQEAKK1RoaXMgdGVzdDoKKy0gQ2hlY2tzIHRoYXQgaW5pdFBvcFN0YXRlRXZlbnQgdGhyb3dz
IGFuIGV4Y2VwdGlvbiB3aGVuIHN0YXRlQXJnIGNhbid0IGJlIHNlcmlhbGl6ZWQuCistIFByaW50
cyBURVNUIENPTVBMRVRFIHdoZW4gZG9uZS4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUg
d2l0aG91dCBleGNlcHRpb24gZm9yIHVuZGVmaW5lZC4KK1BBU1Mgc2VyaWFsaXplZCBzY3JpcHQg
dmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIGVtcHR5IGFycmF5LgorUEFTUyBzZXJpYWxpemVk
IHNjcmlwdCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuCitURVNUIENP
TVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9pbml0cG9wc3RhdGVldmVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxY2FlZDViMjQzZDk1ODhi
ODQzZTY5MTM1NmZhOTY3Mzg5NzFiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRtbApAQCAtMCwwICsx
LDQ0IEBACis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IHR4dCArICI8YnI+IjsKK30KKworZnVu
Y3Rpb24gc3RhdGVQb3BwZWQoKQoreworICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0
IiwgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkKTsKKyAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBzY3Jp
cHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIHVuZGVmaW5lZC4iKTsKKyAgICB2YXIgYSA9
IHt9OworICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgYSk7
CisgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9u
IGZvciBlbXB0eSBhcnJheS4iKTsKKyAgICBhLmN5Y2xlID0gYTsKKyAgICB0cnkgeworICAgICAg
ZXZlbnQuaW5pdFBvcFN0YXRlRXZlbnQoInRlc3QiLCB0cnVlLCB0cnVlLCBhKTsKKyAgICAgIGxv
ZygiRkFJTCBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
biBkdWUgdG8gYSBjeWNsZS4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGxvZygiUEFT
UyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3lj
bGUuIik7CisgICAgfQorICAgIGxvZygiVEVTVCBDT01QTEVURSIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPGJvZHkgb25wb3BzdGF0ZT0ic3RhdGVQ
b3BwZWQoKTsiPgorPHByZT4KK1RoaXMgdGVzdDoKKy0gQ2hlY2tzIHRoYXQgaW5pdFBvcFN0YXRl
RXZlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHN0YXRlQXJnIGNhbid0IGJlIHNlcmlhbGl6
ZWQuCistIFByaW50cyBURVNUIENPTVBMRVRFIHdoZW4gZG9uZS4KKzwvcHJlPgorPHByZSBpZD0i
bG9nZ2VyIj48L3ByZT4KKzxzY3JpcHQ+CitoaXN0b3J5LnJlcGxhY2VTdGF0ZSgiRmlyc3RFbnRy
eSIsIG51bGwsICI/Rmlyc3RFbnRyeSIpOworaGlzdG9yeS5wdXNoU3RhdGUoIlNlY29uZEVudHJ5
IiwgbnVsbCwgIj9TZWNvbmRFbnRyeSIpOworaGlzdG9yeS5iYWNrKCk7CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZh
bHVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGQ3NTllMjAxYzJkMGZkN2FiOTVhMDMwZmNk
MDYwODU1YWVjMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw1MCBAQAorVGVzdCBJbmRleGVkREIncyBhZGQgd2l0aCBTZXJpYWxpemVkU2NyaXB0VmFs
dWUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIub3BlbignbmFt
ZScsICdkZXNjcmlwdGlvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQ
QVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBp
cyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hv
dWxkIGZpcmUgc2hvcnRseS4uLgorCitvcGVuU3VjY2VzcworU3VjY2VzcyBldmVudCBmaXJlZDoK
K1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMg
ZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGlu
IGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAn
b25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFy
Z2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworZGIgPSBldmVudC5yZXN1bHQK
K2RiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0JykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0
IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdhYm9ydCcg
aW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitB
biBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2NyZWF0ZU9iamVjdFN0b3JlU3VjY2Vz
cworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQor
UEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlz
IGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNl
ICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1
ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBp
biBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0
IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRP
TkUKKworb2JqZWN0U3RvcmUgPSBldmVudC5yZXN1bHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFhODNkYmY2NGExMTUwNDIwYTI1OTcyNTRlNGMxYjdlMjhkNDlmMTAK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRk
LXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCmluZGV4IDgwOWJkZWNiZTNjMGViYjBjNTdmZjRlYmU2
ODIzNzVjMWM2MGJmMjcuLmRlMzg0YzQ5ZDNlNTcwYWI4MjBjZDBkZGMzZTUyYmRmMzU3ZjQ4YzMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFy
ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJl
ZC5qcwpAQCAtNDYsNiArNDYsMTQgQEAgZnVuY3Rpb24gdmVyaWZ5UmVzdWx0KHJlc3VsdCkKICAg
ICBkZWJ1ZygiIik7CiB9CiAKK2Z1bmN0aW9uIHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2soKQor
eworICAgIHRlc3RGYWlsZWQoIlN1Y2Nlc3MgZnVuY3Rpb24gY2FsbGVkIHVuZXhwZWN0ZWRseSIp
OworICAgIGRlYnVnKCIiKTsKKyAgICB2ZXJpZnlSZXN1bHQoZXZlbnQpOworICAgIGRvbmUoKTsK
K30KKwogZnVuY3Rpb24gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2soKQogewogICAgIHRlc3RGYWls
ZWQoIkVycm9yIGZ1bmN0aW9uIGNhbGxlZCB1bmV4cGVjdGVkbHk6ICgiICsgZXZlbnQuY29kZSAr
ICIpICIgKyBldmVudC5tZXNzYWdlKTsKQEAgLTU0LDMgKzYyLDkgQEAgZnVuY3Rpb24gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2soKQogICAgIGRvbmUoKTsKIH0KIAorZnVuY3Rpb24gY3JlYXRlVW5z
ZXJpYWxpemFibGVWYWx1ZSgpCit7CisJdmFyIGEgPSB7fTsKKwlhLmN5Y2xlID0gYTsKKwlyZXR1
cm4gYTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Njcmlw
dC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQt
dmFsdWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODdlMjY2Y2YwNTQ0YjJhZTJhMGM5MzIxOTE2ZTFmNTQ3M2Nj
MWFmOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Nj
cmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmpzCkBAIC0wLDAgKzEs
NTYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIGFkZCB3aXRoIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBzZXJpYWxpemVk
U2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2soKQoreworICAgIGRlYnVnKCJzZXJpYWxp
emVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2siKTsKKyAgICAvLyBGSVhNRTogZW5z
dXJlIGl0J3MgYSBzZXJpYWxpemF0aW9uIGVycm9yIG9uY2UgYWRkIGlzIGltcGxlbWVudGVkLgor
ICAgIHZlcmlmeUVycm9yRXZlbnQoZXZlbnQpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KworZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzKCkKK3sKKyAgICBkZWJ1ZygiY3Jl
YXRlT2JqZWN0U3RvcmVTdWNjZXNzIik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
KyAgICB2YXIgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGV2ZW50LnJl
c3VsdCIpOworICAgIHZhciBhID0gY3JlYXRlVW5zZXJpYWxpemFibGVWYWx1ZSgpOworICAgIHRy
eSB7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdFN0b3JlLmFkZChhKTsKKyAgICB9IGNhdGNoIChl
cnIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgib2JqU3RvcmUuYWRkIHRocmV3IGFuIHVuZXhwZWN0
ZWQgZXhjZXB0aW9uOiAiICsgZXJyKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBub3RpZnkg
ZG9uZSBhbmQgY2hlY2sgdGhlIGVycm9yIGNhbGxiYWNrIG9uY2UgYWRkIGlzIGltcGxlbWVudGVk
LgorICAgIGRvbmUoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgLy8gdmVyaWZ5UmVz
dWx0KHJlc3VsdCk7CisgICAgLy8gcmVzdWx0Lm9uc3VjY2VzcyA9IHVuZXhwZWN0ZWRTdWNjZXNz
Q2FsbGJhY2s7CisgICAgLy8gcmVzdWx0Lm9uZXJyb3IgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWVF
eHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAg
ICBkZWJ1Zygib3BlblN1Y2Nlc3MiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwor
ICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisgICAgcmVzdWx0
ID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3QnKSIpOworICAgIHZlcmlm
eVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjcmVhdGVPYmplY3RTdG9y
ZVN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
K30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiaW5kZXhl
ZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1
bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBvcGVuU3VjY2VzczsKKyAgICByZXN1bHQub25l
cnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU1OGI4ZmQ0OGJj
MTlmNGZmY2EzZTkwMTQzNmYxZGMyYTE3MDkzYzguLjgyMmY1ZmFkM2I5Mjk5Njg5NGMwZGRjOWRl
ZTdkYTI4NzQ3MDU1MzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDEwLTA2LTIyICBNYXJjdXMgQnVsYWNo
ICA8YnVsYWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRzIHN1cHBvcnQgZm9yIHRocm93aW5nIGJlaGF2aW9yIG9mIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIElETC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODM1CisKKyAgICAgICAg
VGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBiaW5kaW5ncyB3aWxsIGVpdGhl
ciB0aHJvdyBhbiBleGNlcHRpb24gb3IgYmUgc2lsZW50CisgICAgICAgIHdoZW4gY3JlYXRpbmcg
YSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgYmFzZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcgSURMIGRl
ZmluaXRpb24uCisgICAgICAgIEl0IGFsc28gYWRkcyBUZXN0UE9ET2JqLmlkbCB0byBleGVyY2lz
ZSB0aGUgYmluZGluZyBnZW5lcmF0b3IgZm9yIGludGVyZmFjZXMgd2l0aCBbUE9EVHlwZT1dIGF0
dHJpYnV0ZS4KKyAgICAgICAgVGVzdHM6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdz
LXRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyk6CisgICAg
ICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlKToKKyAgICAgICAgKFdl
YkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJE
T01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmpQcml2YXRlOjpXZWJET01UZXN0UE9E
T2JqUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2Jq
KToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OmltcGwpOgorICAgICAgICAoV2ViRE9NVGVz
dFBPRE9iajo6fldlYkRPTVRlc3RQT0RPYmopOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6
cmVhZE9ubHlGbG9hdEF0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6c3RyaW5nQXR0
cik6CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpzZXRTdHJpbmdBdHRyKToKKyAgICAgICAg
KHRvV2ViQ29yZSk6CisgICAgICAgICh0b1dlYktpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMpOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlz
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9yZWFkX29ubHlfZmxvYXRfYXR0cik6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0dHIpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKFdlYktp
dDo6Y29yZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRfcHJvcGVydHkpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9wb2Rfb2JqX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3Bv
ZF9vYmpfaW5pdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0UE9ET2JqKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RQT0RPYmpQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVl
Tm9SYWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNl
cmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmNsYXNz
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpK
U1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpD
b25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFBPRE9iajo6SlNUZXN0UE9ET2JqKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBP
RE9iajo6fkpTVGVzdFBPRE9iaik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmNy
ZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RPYmpSZWFkT25seUZs
b2F0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFBPRE9iajo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFBPRE9i
alN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVz
dFBPRE9iaik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9i
ai5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Y2xhc3NJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQT0RPYmpQcm90b3R5cGU6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQ
T0RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQT0RPYmpQcm90b3R5cGU6OkpTVGVzdFBPRE9ialByb3RvdHlwZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmog
c2VyaWFsaXplZFZhbHVlUmFpc2VzOl0pOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2U6XSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVl
UmV0dXJuUmFpc2VzXSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0
dXJuTm9SYWlzZV0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdFBPRE9iai5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogZGVhbGxv
Y10pOgorICAgICAgICAoLVtET01UZXN0UE9ET2JqIGZpbmFsaXplXSk6CisgICAgICAgICgtW0RP
TVRlc3RQT0RPYmogcmVhZE9ubHlGbG9hdEF0dHJdKToKKyAgICAgICAgKC1bRE9NVGVzdFBPRE9i
aiBzdHJpbmdBdHRyXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogc2V0U3RyaW5nQXR0cjpd
KToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFp
c2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxp
emVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVy
bmFsOjpWOF9VU0UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpyZWFk
T25seUZsb2F0QXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iaklu
dGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0UE9E
T2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBP
RE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpH
ZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6SGFzSW5zdGFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0UE9ET2JqOjp3cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpkZXJlZk9iamVjdCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpzZXJpYWxpemF0aW9uRXJyb3IpOgorICAgICAg
ICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcFN0YXRlRXZl
bnQ6OmluaXRQb3BTdGF0ZUV2ZW50KToKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5oOgor
ICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmlkbDoKKwogMjAxMC0wNi0yOSAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4LiBOb3QgcmV2
aWV3ZC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApp
bmRleCA5MGY4ZDdjYWNkZjc0MmJkNTcyNGY0OWIwZTM4ZmFlNGM0ZDhhYWQ2Li5lNjBlMTdmYWIx
YmVkYTZhZTU0MmRkODI3YWI2NDkzNDQ4NjAxMDRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NjcsMjAgKzk2Nyw0NSBAQCBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6On5TZXJpYWxpemVkU2NyaXB0VmFsdWUoKQogewogfQogCitQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVX
aXRob3V0VGhyb3dpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBu
ZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OnNlcmlh
bGl6ZShleGVjLCB2YWx1ZSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJl
bGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmV0dXJuIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAmZWMpOworfQorCitQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSogZWMp
Cit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0g
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJp
YWxpemUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgKmVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCAqZWMpOworICAgIH0gZWxzZQorICAgICAgICAqZWMgPSAwOworICAgIHJldHVybiBzZXJp
YWxpemVkVmFsdWUucmVsZWFzZSgpOworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNv
bnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMob3JpZ2luQ29udGV4dCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRvSlMoZXhlYywg
YXBpVmFsdWUpOwotICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSk7Cisg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKICAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAotICAgIHJldHVy
biBzZXJpYWxpemVkVmFsdWU7CisKKyAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2Uo
KTsKIH0KIAogSlNWYWx1ZVJlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpT
Q29udGV4dFJlZiBkZXN0aW5hdGlvbkNvbnRleHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDkzYmQwZGU5
MDg2NGVlN2JkMmQxOTA0YzBlMjEwMDM2YjA4OTQzMWMuLmVhNjg5ZWVmMjk4NWUyZDRjYzhkMmRk
NDhhZTg1OTMzN2FjMTA2MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaApAQCAtMTc2LDEwICsxNzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJp
YWxpemUoZXhlYywgdmFsdWUpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVXaXRob3V0VGhyb3dpbmcoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSogZWMpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2
YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggOWQ4MGM4MzZlMDc1ODkyMjYxMmE3MDZiMjM0YmQ1
MjgzNmVlYTEyNS4uZmM0ODYzMzViZmE0MzY1MDQ3MjNiMzRiOTczNTNmYjdkZWY4YmZjZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xNzE2LDEz
ICsxNzE2LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZEltcCgqaW1wKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUgZXEgImZsb2F0Iikg
eyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZEltcCA9ICIgLiBKU1ZhbHVl
VG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBv
ZEltcCA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUi
LCBGQUxTRSkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05h
dGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZElt
cC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgRkFMU0UpIC4gIik7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMp
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsICJ2YWx1ZSIsIFRSVUUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkc2V0dGVyRXhwcmVzc2lvblByZWZpeCA9ICRjb2RlR2VuZXJhdG9yLT5TZXR0ZXJFeHByZXNz
aW9uUHJlZml4KFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlv
bnN9OwpAQCAtMTkxNiw3ICsxOTE2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVz
b2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAi
ICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQo
JGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFt
ZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+
YXJndW1lbnQoJGFyZ3NJbmRleCkiLCBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIC4g
IjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBp
cyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9T
SVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhp
cyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1
bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApAQCAtMjIyNSw3ICsyMjI1LDggQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICJpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMpO1xu
IikgaWYgJHBvZFR5cGU7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVl
IHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRp
bXBsQ2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIE5hdGl2ZVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJGZ1bmN0aW9uU3RyaW5nLCBA
eyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pKSBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwgIiIsICRmdW5j
dGlvblN0cmluZywgImNhc3RlZFRoaXMiKSAuICI7XG4iKSBpZiBub3QgJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiBA
eyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CiAKICAgICAgICAgJGNhbGxXaXRoID0gJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9OwpAQCAt
MjMwMiw2ICsyMzAzLDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogewogICAgIG15ICRzaWduYXR1
cmUgPSBzaGlmdDsKICAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkcmFpc2VzID0gc2hp
ZnQ7CiAKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0
dXJlLT50eXBlKTsKIApAQCAtMjMyNyw3ICsyMzI5LDggQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQog
CiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJh
bnkiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0g
PSAxOwotICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
ICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsICR2YWx1ZSwgJmVjKSIgaWYgKCRyYWlzZXMpOworICAgICAgICByZXR1cm4gIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKGV4ZWMsICR2YWx1ZSkiOwog
ICAgIH0KIAogICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0UG9pbnQuaCJ9ID0gMSBpZiAkdHlwZSBl
cSAiU1ZHUG9pbnQiOwpAQCAtMjQ1Miw2ICsyNDU1LDI2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVl
KSkiOwogfQogCitzdWIgTmF0aXZlU2VyaWFsaXplZFNjcmlwdFZhbHVlVG9KU1ZhbHVlCit7Cisg
ICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15
ICRyYWlzZXMgPSBzaGlmdDsKKworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgICAgbXkgJHJldCA9ICIiOworICAgIGlmICgk
dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55IikgeworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKKyAgICAg
ICAgJHJldCA9ICRyZXQgLiAiICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFNj
cmlwdFZhbHVlID0gJHZhbHVlO1xuIjsKKyAgICAgICAgJHJldCA9ICRyZXQgLiAiICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgICAgICAkcmV0ID0g
JHJldCAuICIgJiYgIWVjIiBpZiAkcmFpc2VzOworICAgICAgICAkcmV0ID0gJHJldCAuICIgPyBz
ZXJpYWxpemVkU2NyaXB0VmFsdWUtPmRlc2VyaWFsaXplZCgpIDoganNOdWxsKCk7XG4iOworICAg
IH0KKworICAgcmV0dXJuICRyZXQ7Cit9CisKIHN1YiBjZWlsaW5nVG9Qb3dlck9mMgogewogICAg
IG15ICgkc2l6ZSkgPSBAXzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCmluZGV4IGUyNDljYWFhM2RhYWQzOWZiNTdmZGQwNjE3N2QzOTVmNzJiNTE3YTEuLmE2
MTIwNGM5ZTkwMWVjYzA3NWFkYTg3MzIzMmVhMTE5YTQxOTA2YzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTE5MCwxNyArMTE5MCwxOSBAQCBF
TkQKIAogICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlIikgewogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgifSA9IDE7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wg
JHtwYXJhbWV0ZXJOYW1lfURpZFRocm93ID0gZmFsc2U7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBm
YWxzZTtcbiIpIGlmICgkcmFpc2VzRXhjZXB0aW9ucyk7CiAgICAgICAgIH0gZWxzaWYgKEJhc2lj
VHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfU9rO1xuIik7CiAgICAg
ICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBHZXROYXRp
dmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyLCAkcGFyYW1JbmRleCkgLiAiICRwYXJhbWV0
ZXJOYW1lID0gIik7CiAKLSAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSIpIHsKKyAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSIgJiYgJHJhaXNlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdz
WyRwYXJhbUluZGV4XSwgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93KTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoJHtwYXJhbWV0ZXJOYW1lfURpZFRo
cm93KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpO1xuIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXIt
PnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJv
d2luZyhhcmdzWyRwYXJhbUluZGV4XSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAi
YXJnc1skcGFyYW1JbmRleF0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8g
ICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIjtcbiIpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCmluZGV4IDY1YmM5
ZjM2ZWUzNmUyNDI1ZTQ2NGU3MGEwZDYwZGJmNTM0OWQzYTUuLmQ4ODE0N2NjYTljYmQ5N2IzM2E1
OWY0ODNiMTliZDdmYjBmYTgwYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKQEAgLTU0MSwxMiArNTQxLDQxIEBAIFdlYkRP
TVRlc3RPYmogV2ViRE9NVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyhjb25zdCBXZWJET01TdHJpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJET01U
ZXN0T2JqOjpzZXJpYWxpemVkVmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJn
KQordm9pZCBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSYWlzZXMoY29uc3QgV2ViRE9N
U3RyaW5nJiBzZXJpYWxpemVkQXJnKQogewogICAgIGlmICghaW1wbCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1
ZVJhaXNlcyhXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpT
dHJpbmcoc2VyaWFsaXplZEFyZykpLCBlYyk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNf
Y2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6
OnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJn
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNl
cmlhbGl6ZWRWYWx1ZU5vUmFpc2UoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7Cit9CisKK1dlYkRPTVN0cmluZyBX
ZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJET01TdHJpbmcgcmVzdWx0ID0gdG9XZWJLaXQo
V1RGOjpnZXRQdHIoaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKSk7Cisg
ICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkRPTVN0cmluZyBXZWJET01UZXN0T2JqOjpz
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0
UHRyKGltcGwoKS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKSk7CiB9CiAKIHZvaWQg
V2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aEV4Y2VwdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCAzM2JjN2ZiYTU5YjIz
YmYwYjM5MDczMDYyMDM4YjU1NWU4MjMwZjU3Li5lZTk2OWRiOGIyOTgyZDFjY2JiNzI2ZDRkYTM1
Yzg3M2E2MTdhYzA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmgKQEAgLTEwMCw3ICsxMDAsMTAgQEAgcHVibGljOgogICAgIFdlYkRP
TVRlc3RPYmogb2JqTWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9i
aiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBj
b25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29u
c3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKLSAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25z
dCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIHZvaWQgc2VyaWFsaXplZFZhbHVl
UmFpc2VzKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJp
YWxpemVkVmFsdWVOb1JhaXNlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7Cisg
ICAgV2ViRE9NU3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpOworICAgIFdlYkRP
TVN0cmluZyBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CiAgICAgdm9pZCBtZXRob2RX
aXRoRXhjZXB0aW9uKCk7CiAgICAgdm9pZCBjdXN0b21NZXRob2QoKTsKICAgICB2b2lkIGN1c3Rv
bU1ldGhvZFdpdGhBcmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBj
b25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiYzE0
ZDhkZjk1NDk4MzliMTRiNzc2MDhhMjg2NDRmM2FlZjI1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAKQEAg
LTAsMCArMSwxMDIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViRE9NVGVzdFBPRE9iai5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlICJX
ZWJET01TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IFdlYkRP
TVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmpQcml2YXRlIHsKKyAgICBXZWJET01UZXN0UE9E
T2JqUHJpdmF0ZShXZWJDb3JlOjpUZXN0UE9ET2JqKiBvYmplY3QgPSAwKQorICAgICAgICA6IGlt
cGwob2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFBPRE9i
aj4gaW1wbDsKK307CisKK1dlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmooKQorICAg
IDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0UE9E
T2JqOjpXZWJET01UZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqIGltcGwpCisgICAgOiBX
ZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZShp
bXBsKSkKK3sKK30KKworV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaihjb25zdCBX
ZWJET01UZXN0UE9ET2JqJiBjb3B5KQorICAgIDogV2ViRE9NT2JqZWN0KCkKK3sKKyAgICBtX2lt
cGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZShjb3B5LmltcGwo
KSkgOiAwOworfQorCitXZWJDb3JlOjpUZXN0UE9ET2JqKiBXZWJET01UZXN0UE9ET2JqOjppbXBs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5pbXBsLmdldCgpIDogMDsK
K30KKworV2ViRE9NVGVzdFBPRE9iajo6fldlYkRPTVRlc3RQT0RPYmooKQoreworICAgIGRlbGV0
ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gMDsKK30KKworZmxvYXQgV2ViRE9NVGVzdFBPRE9iajo6
cmVhZE9ubHlGbG9hdEF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPnJlYWRPbmx5RmxvYXRBdHRyKCk7Cit9CisK
K1dlYkRPTVN0cmluZyBXZWJET01UZXN0UE9ET2JqOjpzdHJpbmdBdHRyKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0
cigpKTsKK30KKwordm9pZCBXZWJET01UZXN0UE9ET2JqOjpzZXRTdHJpbmdBdHRyKGNvbnN0IFdl
YkRPTVN0cmluZyYgbmV3U3RyaW5nQXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOworfQor
CitXZWJDb3JlOjpUZXN0UE9ET2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFBPRE9iaiYg
d3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRlc3RQ
T0RPYmogdG9XZWJLaXQoV2ViQ29yZTo6VGVzdFBPRE9iaiogdmFsdWUpCit7CisgICAgcmV0dXJu
IFdlYkRPTVRlc3RQT0RPYmoodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk2ZWUwZTk1
ZmE1NGEwMTI3ODJmYTJmZWYyMThmZTk0YTFiYzQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdFBPRE9ial9oCisjZGVmaW5lIFdlYkRP
TVRlc3RQT0RPYmpfaAorCisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2Vi
RE9NU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RQT0RPYmo7Cit9
OworCisKK2NsYXNzIFdlYkRPTVRlc3RQT0RPYmogOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICBXZWJET01UZXN0UE9ET2JqKCk7CisgICAgZXhwbGljaXQgV2ViRE9NVGVzdFBP
RE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKik7CisgICAgV2ViRE9NVGVzdFBPRE9iaihjb25zdCBX
ZWJET01UZXN0UE9ET2JqJik7CisgICAgfldlYkRPTVRlc3RQT0RPYmooKTsKKworICAgIGZsb2F0
IHJlYWRPbmx5RmxvYXRBdHRyKCkgY29uc3Q7CisgICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHIo
KSBjb25zdDsKKyAgICB2b2lkIHNldFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJik7CisK
KyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBpbXBsKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICBzdHJ1Y3QgV2ViRE9NVGVzdFBPRE9ialByaXZhdGU7CisgICAgV2ViRE9NVGVzdFBPRE9ialBy
aXZhdGUqIG1faW1wbDsKK307CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIHRvV2ViQ29yZShjb25z
dCBXZWJET01UZXN0UE9ET2JqJik7CitXZWJET01UZXN0UE9ET2JqIHRvV2ViS2l0KFdlYkNvcmU6
OlRlc3RQT0RPYmoqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCA1YzkzNWM0
ODEwNWRkNjM0MzJkZTRhNWNmZGMyYzdjMzkwYzAxOTAyLi42MzdlOGNmMmEwOWYzMjAwOWE4YTU1
YmRmN2NhYzlkNjc1M2E1ODJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1ZGUgIldlYktpdERPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKQEAgLTE2
NCw3ICsxNjUsNyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2Fs
bF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogcwogfQogCiB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnLCBHRXJyb3Ig
KiplcnJvcikKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKQEAgLTE3Miw3ICsxNzMsNTMgQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVNlcmlhbGl6ZWQKICAgICBnX3JldHVybl9pZl9mYWlsKHNlcmlhbGl6ZWRfYXJnKTsKICAg
ICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9h
cmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKLSAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWUoY29u
dmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoY29udmVydGVkX3NlcmlhbGl6ZWRf
YXJnLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3Zh
bHVlX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VyaWFsaXplZF9hcmcpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSAqIGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2Fy
Zyk7CisgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAg
IGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsK
K30KKworV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IEdFcnJvciAqKmVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlz
ZXMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHJlcyA9IHN0
YXRpY19jYXN0PFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogPihXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSkpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJu
X25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSk7CisgICAgV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiA+KFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CisgICAgcmV0
dXJuIHJlczsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCA4ZGNkOGMzMWUzMzYzYmU3
MjQ4YTM3NWI1OTcyYTUxNjk3MDBjMzk3Li4wOGQwNTVmOGE3MTY4MjAwZjJjZmQ0YzZhNTQ5MzRm
MzBlNzNiMTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzEsNyArNzEsMTYgQEAgV0VCS0lUX0FQ
SSBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1
aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdjaGFyKiAg
c3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogIG9ial9hcmcsIEdFcnJvciAqKmVycm9yKTsKIAog
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2Vy
aWFsaXplZF9hcmcpOword2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNl
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUq
ICBzZXJpYWxpemVkX2FyZywgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9ub19yYWlzZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2Fy
Zyk7CisKK1dFQktJVF9BUEkgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAKK3dlYmtp
dF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1cm5fcmFpc2VzKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKKworV0VCS0lUX0FQSSBXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVl
X3JldHVybl9ub19yYWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAogV0VCS0lUX0FQSSB2
b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mMzRkOTM5NmJmZjQ1Zjc5MDNlN2FlMzg0NjA0ZTQ1Y2RkMTIxNDg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0UE9ET2JqLmNwcApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgor
I2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0
L1dlYktpdERPTVRlc3RQT0RPYmouaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFBP
RE9ialByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSAid2Vi
a2l0cHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2dwb2ludGVyIGtpdChX
ZWJDb3JlOjpUZXN0UE9ET2JqKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2Jq
LCAwKTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gRE9NT2JqZWN0Q2FjaGU6OnB1dChv
YmosIFdlYktpdDo6d3JhcFRlc3RQT0RPYmoob2JqKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQgLy8KKworZ2Zsb2F0Cit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfcmVhZF9v
bmx5X2Zsb2F0X2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Zsb2F0IHJlcyA9IGl0ZW0tPnJlYWRPbmx5RmxvYXRBdHRyKCk7CisgICAg
cmV0dXJuIHJlczsKK30KKworZ2NoYXIqIAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3N0
cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiAgcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRy
KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2Jq
X3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmLCBnY2hhciogIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0UE9ET2JqLCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29i
aiwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNv
cmU6OlRlc3RQT0RPYmoqIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9iaiogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYkNvcmU6OlRlc3RQ
T0RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0UE9ET2JqKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVBRF9P
TkxZX0ZMT0FUX0FUVFIsCisgICAgUFJPUF9TVFJJTkdfQVRUUiwKK307CisKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCk7CisgICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2Vi
Q29yZTo6VGVzdFBPRE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQ
T0RPYmogKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2JqZWN0LT5kZXJl
ZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOworICAgIH0KKwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmID0gV0VC
S0lUX0RPTV9URVNUX1BPRF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBj
b3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAg
ICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0U3Ry
aW5nQXR0cihXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9w
b2Rfb2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmID0gV0VCS0lU
X0RPTV9URVNUX1BPRF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3Jl
U2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBj
YXNlIFBST1BfUkVBRF9PTkxZX0ZMT0FUX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Nl
dF9mbG9hdCh2YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+
c3RyaW5nQXR0cigpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfcG9kX29ial9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisKKyAgICBp
ZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdFBPRE9iakNs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9w
cm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0
X3BvZF9vYmpfY29uc3RydWN0ZWQ7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfUkVBRF9PTkxZX0ZMT0FUX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoInJlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogbmFtZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGVzdF9wb2Rfb2JqX3JlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogc2hvcnQgZGVzY3Jp
cHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlYWQtb25seSAgZ2Zsb2F0IFRlc3RQT0RPYmoucmVhZC1vbmx5LWZsb2F0
LWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhl
cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLUdfTUFYRkxPQVQsIC8qIG1pbiAqLworR19NQVhGTE9BVCwgLyogbWF4ICovCisw
LjAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUk9QX1NUUklOR19BVFRSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygic3RyaW5nLWF0dHIiLCAvKiBu
YW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0ZXN0X3BvZF9vYmpfc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlv
biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVhZC13cml0ZSAgZ2NoYXIqICBUZXN0UE9ET2JqLnN0cmluZy1hdHRyIiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIi
LCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2luaXQoV2ViS2l0RE9NVGVzdFBPRE9i
aiogcmVxdWVzdCkKK3sKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0UE9E
T2JqKiB3cmFwVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlT2JqZWN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2Fs
bCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2Ug
Y2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0
IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRj
aGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0
dXJuICBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X1RFU1RfUE9EX09CSiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZWFjM2VjMTcwNTEx
ZTYxYWI1N2YxZjZkNWU3NDJkMDFiYmE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouaApAQCAtMCww
ICsxLDYwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVz
dFBPRE9ial9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RQT0RPYmpfaAorCisjaW5jbHVkZSAid2Vi
a2l0L3dlYmtpdGRvbWRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9i
amVjdC5oIgorCisKK0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
UE9EX09CSiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKLCBX
ZWJLaXRET01UZXN0UE9ET2JqKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1BPRF9PQkpfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfRE9NX1RFU1RfUE9EX09CSiwgV2ViS2l0RE9NVGVzdFBPRE9iakNsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1RFU1RfUE9EX09CSihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19URVNUX1BPRF9PQkpfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSikpCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9QT0RfT0JKX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIFdlYktpdERP
TVRlc3RQT0RPYmpDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdFBPRE9iaiB7CisgICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
VGVzdFBPRE9iakNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfdHlw
ZSAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9n
ZXRfcmVhZF9vbmx5X2Zsb2F0X2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZik7CisKK1dF
QktJVF9BUEkgZ2NoYXIqIAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fdGVzdF9wb2Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxm
LCBnY2hhciogIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RQT0RPYmpfaCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZjOTVlNzFkN2ZkYmZjYjg3Y2VmNTA5ODYxNDNlNTVkN2VjMTczMWYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RQT0RPYmpQcml2YXRlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIFdFQl9LSVRfRE9NX1RFU1RfUE9EX09CSl9QUklWQVRFX0gKKyNkZWZpbmUg
V0VCX0tJVF9ET01fVEVTVF9QT0RfT0JKX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSAiVGVz
dFBPRE9iai5oIgorbmFtZXNwYWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9NVGVzdFBPRE9iaiAq
CisgICAgd3JhcFRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiAqY29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICoKKyAgICBjb3JlKFdlYktpdERPTVRlc3RQT0RPYmog
KnJlcXVlc3QpOworCisgICAgZ3BvaW50ZXIKKyAgICBraXQoV2ViQ29yZTo6VGVzdFBPRE9iaiog
bm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01f
VEVTVF9QT0RfT0JKX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMzYwNzgyZDg2OGY1YWRiMDExZWM3MzM4MDZmNDIw
YTEwM2FhMjVmNS4uZmUzNmU1ZjM4Zjk2OGE4ZmM0MDIwYWVhMjdkYmVjMTkxNDljZmFkZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0x
NDQsNyArMTQ0LDcgQEAgYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VO
RVJBVE9SKGdlbmVyYXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMzBdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szM10gPQogewogICAgIHsgInZv
aWRNZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKSwgKGlu
dHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhvZFdpdGhBcmdz
IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKSwgKGlu
dHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNTQsNyArMTU0LDEwIEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0g
PQogICAgIHsgIm9iak1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
ICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9u
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyksIChpbnRwdHJfdCkyIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Mi
LCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdz
QW5kVGhyb3dzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAic2Vy
aWFsaXplZFZhbHVlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic2VyaWFsaXpl
ZFZhbHVlUmFpc2VzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlUmFpc2VzKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic2Vy
aWFsaXplZFZhbHVlTm9SYWlzZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlh
bGl6ZWRWYWx1ZU5vUmFpc2UpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAg
ICB7ICJzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMpLCAoaW50cHRyX3QpMCBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSks
IChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhFeGNl
cHRpb24iLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
KSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAiY3VzdG9tTWV0aG9k
IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKSwgKGludHB0cl90
KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyksIChpbnRw
dHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMTc5LDcgKzE4Miw3IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0gPQog
fTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUg
SGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyA2OSwgNjMsIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNo
VGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzMSwgMTI3LCBKU1Rlc3RPYmpQcm90
b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RPYmpQcm90b3R5cGVU
YWJsZSwgMCB9OwogCiBKU09iamVjdCogSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTc4NCwxOSArNzg3LDY0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFs
dWVSYWlzZXMoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RP
Ymo6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAmZWMpOworCisgICAgaW1wLT5zZXJpYWxp
emVkVmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZVdpdGhvdXRUaHJvd2luZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAKLSAgICBpbXAtPnNl
cmlhbGl6ZWRWYWx1ZShzZXJpYWxpemVkQXJnKTsKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZU5v
UmFpc2Uoc2VyaWFsaXplZEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2Vy
aWFsaXplZFNjcmlwdFZhbHVlID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMp
OworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUgJiYgIWVj
ID8gc2VyaWFsaXplZFNjcmlwdFZhbHVlLT5kZXNlcmlhbGl6ZWQoKSA6IGpzTnVsbCgpOworICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisKKwor
ICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFNjcmlwdFZhbHVlID0gaW1wLT5z
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9
IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA/IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS0+ZGVzZXJpYWxp
emVkKCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggM2IyMWM4NTYwMWMwYTM3YjdjZGZmZjFlZTVm
YTM2MTQxMjhhNDY3MC4uMDFkNzQ0OTI0MjVkZjFiN2Y2NmFiNjMzNTEyNmNiOTJmMmZiNGYxMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTk0
LDcgKzk0LDEwIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZChKU0M6OkV4ZWNTCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJn
cyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhKU0M6OkV4
ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6OkV4
ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZU5v
UmFpc2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZShKU0M6OkV4
ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhK
U0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNlODg0NGJjOTA3N2E2ZDUwZjJlOGYwODgy
Mzg5YjMyMzk3OTExNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFBPRE9i
ai5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTTnVtYmVyQ2VsbC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RQT0RP
YmopOworCisvKiBIYXNoIHRhYmxlICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktf
R0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dF
TkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdFBPRE9ialRhYmxlVmFsdWVzWzRdID0KK3sKKyAgICB7ICJyZWFkT25seUZsb2F0QXR0
ciIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0ciksIChpbnRw
dHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInN0cmluZ0F0dHIiLCBEb250RGVs
ZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdFBPRE9ialN0cmluZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0
ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0UE9ET2JqQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1Io
MCkgfSwKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRl
ZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RQT0RPYmpUYWJsZSA9IHsgOCwgNywgSlNUZXN0UE9ET2JqVGFibGVWYWx1ZXMsIDAgfTsK
Ky8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZp
bmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5l
IFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQoreworICAg
IHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dF
TkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9i
akNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGVW
YWx1ZXMsIDAgfTsKK2NsYXNzIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7Cisg
ICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitj
b25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RQ
T0RPYmpDb25zdHJ1Y3RvciIsIDAsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCAwIH07
CisKK0pTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01D
b25zdHJ1Y3Rvck9iamVjdChKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFBPRE9ialBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworfQorCitib29sIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBPRE9i
akNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdFBPRE9iakNv
bnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFBPRE9iakNv
bnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxl
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1Io
Z2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdl
bmVyYXRvcikKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9E
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVOS19H
RU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19D
T05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9ialByb3RvdHlwZVRhYmxlID0geyAx
LCAwLCBKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFBPRE9ialByb3RvdHlw
ZSIsIDAsICZKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OworCitKU09iamVjdCogSlNU
ZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFBPRE9i
aj4oZXhlYywgZ2xvYmFsT2JqZWN0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9i
ajo6c19pbmZvID0geyAiVGVzdFBPRE9iaiIsIDAsICZKU1Rlc3RQT0RPYmpUYWJsZSwgMCB9Owor
CitKU1Rlc3RQT0RPYmo6OkpTVGVzdFBPRE9iaihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxK
U1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4gaW1wbCkKKyAgICA6IERPTU9iamVjdFdp
dGhHbG9iYWxQb2ludGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pbXBsKGlt
cGwpCit7Cit9CisKK0pTVGVzdFBPRE9iajo6fkpTVGVzdFBPRE9iaigpCit7CisgICAgZm9yZ2V0
RE9NT2JqZWN0KHRoaXMsIGltcGwoKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmo6OmNy
ZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNUZXN0UE9ET2JqUHJvdG90eXBlKGdsb2Jh
bE9iamVjdCwgSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29sIEpTVGVzdFBPRE9iajo6Z2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xv
dDxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgcHJv
cGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0
aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCAmSlNUZXN0UE9ET2Jq
VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNU
ZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RC
YXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0UE9ET2JqIGltcCgqY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9ICBqc051bWJlcihleGVjLCBpbXAucmVhZE9ubHlGbG9h
dEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRp
ZmllciYpCit7CisgICAgSlNUZXN0UE9ET2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgVGVzdFBPRE9iaiBpbXAoKmNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAganNTdHJpbmcoZXhlYywgaW1wLnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdFBP
RE9iaiogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKK30KK3ZvaWQgSlNUZXN0UE9ET2JqOjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0UE9ET2Jq
LCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRo
aXMsIHNsb3QpOworfQorCit2b2lkIHNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rl
c3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPih0aGlzT2Jq
ZWN0KTsKKyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ICogaW1wID0gc3RhdGlj
X2Nhc3Q8SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIFRlc3RQT0RPYmogcG9kSW1wKCppbXApOworICAgIHBvZEltcC5zZXRTdHJpbmdB
dHRyKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wLT5j
b21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RQT0RP
Ymo6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0UE9ET2JqQ29u
c3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RP
Ymo+KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGdldERPTU9i
amVjdFdyYXBwZXI8SlNUZXN0UE9ET2JqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+
ID4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGNvbnRleHQpOworfQorVGVzdFBPRE9iaiB0
b1Rlc3RQT0RPYmooSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhl
cml0cygmSlNUZXN0UE9ET2JqOjpzX2luZm8pID8gKFRlc3RQT0RPYmopICpzdGF0aWNfY2FzdDxK
U1Rlc3RQT0RPYmoqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiBUZXN0UE9ET2JqKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2Jq
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTRlNGZmZWJhNTQzMWI1Yzg5OGYxOTUxOWM1NDI1NjlmODM2YzdlOQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBPRE9iai5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBKU1Rlc3RQT0RPYmpfaAorI2RlZmluZSBKU1Rlc3RQT0RPYmpfaAorCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgorI2luY2x1
ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdFdpdGhHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTVGVzdFBPRE9iaiA6IHB1YmxpYyBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciB7CisgICAg
dHlwZWRlZiBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciBCYXNlOworcHVibGljOgorICAgIEpT
VGVzdFBPRE9iaihOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4pOwor
ICAgIHZpcnR1YWwgfkpTVGVzdFBPRE9iaigpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gKiBp
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVm
UHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBtX2ltcGw7Citwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU1NWR1BP
RFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiwgU1ZHRWxlbWVudCopOworVGVzdFBPRE9iaiB0b1Rl
c3RQT0RPYmooSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0UE9ET2JqUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEpTQzo6
SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOworICAgIH0KKyAgICBKU1Rlc3RQT0RPYmpQ
cm90b3R5cGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFzc1Jl
ZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0dXJlKSA6IEpTQzo6SlNPYmplY3RXaXRoR2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
K307CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9ialJlYWRPbmx5
RmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNU
ZXN0UE9ET2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXggZDg4NjJkYTE1ZWFjNGU4MWEyZWIxMWFiZWEz
YTA1ZDMzZmIyYzFiYi4uNzgzYTI2NzExYjJmMjVkNGFjNmVmMmYxYmJhODQ3NDRkN2QxY2QxMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2Jq
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgK
QEAgLTk4LDcgKzk4LDEwIEBACiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kV2l0aEFyZ3M6KGlu
dClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilv
YmpBcmc7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnczooTlNTdHJp
bmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAq
KW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9i
akFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0
cmluZyAqKXNlcmlhbGl6ZWRBcmc7CistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczooTlNT
dHJpbmcgKilzZXJpYWxpemVkQXJnOworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNlOihO
U1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJl
dHVyblJhaXNlczsKKy0gKE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZTsK
IC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAo
dm9pZCljdXN0b21NZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICop
c3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2OWZi
OTZhNDBmNDE0OWQ4MDU5NGNlZjdkZmI4Li4xOTc5YTM4YmNlOTVmZmYwOTc0NWM4MWE3N2RiYWY1
MzgyNDBiNTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmoubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tCkBAIC00NDUsMTAgKzQ0NSwzMyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKKy0g
KHZvaWQpc2VyaWFsaXplZFZhbHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKIHsK
ICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2Vy
aWFsaXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNv
cmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIElNUEwtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhXZWJDb3JlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpLCBl
Yyk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKK30KKworLSAodm9pZClzZXJp
YWxpemVkVmFsdWVOb1JhaXNlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2VyaWFsaXplZFZh
bHVlTm9SYWlzZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3Jl
OjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVk
VmFsdWVSZXR1cm5SYWlzZXMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTlNTdHJpbmcg
KnJlc3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlz
ZXMoZWMpKSk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJu
IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsK
IH0KIAogLSAodm9pZCltZXRob2RXaXRoRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNDU2YTY2
Yzc1Zjk0YmViMDE2MGE3NzdjOGM5MGFkMGI5YjcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaApAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VE
ID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitAY2xhc3MgTlNTdHJpbmc7CisKK0BpbnRlcmZh
Y2UgRE9NVGVzdFBPRE9iaiA6IERPTU9iamVjdAorLSAoZmxvYXQpcmVhZE9ubHlGbG9hdEF0dHI7
CistIChOU1N0cmluZyAqKXN0cmluZ0F0dHI7CistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3Ry
aW5nICopbmV3U3RyaW5nQXR0cjsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW0gYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY1
YjUxZDM5MTQwZmU2OGEyYjM0NDFlYmI4NGIwMWU0MmVmNDlkMQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbQpAQCAt
MCwwICsxLDk4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0UE9ET2JqLmgi
CisKKyNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01DU1NWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01FdmVu
dEludGVybmFsLmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0
eWxlU2hlZXRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVzdFBPRE9iakludGVybmFsLmgiCisj
aW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmgiCisjaW1wb3J0ICJLVVJMLmgiCisjaW1wb3J0ICJUZXN0UE9ET2JqLmgiCisjaW1wb3J0
ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQg
IldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2Rl
ZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdFBPRE9iaio+KF9pbnRlcm5h
bCkKKworQGltcGxlbWVudGF0aW9uIERPTVRlc3RQT0RPYmoKKworLSAodm9pZClkZWFsbG9jCit7
CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtET01U
ZXN0UE9ET2JqIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBJ
TVBMOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAg
IGRlbGV0ZSBJTVBMOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0gKGZsb2F0KXJlYWRP
bmx5RmxvYXRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIHJldHVybiBJTVBMLT5yZWFkT25seUZsb2F0QXR0cigpOworfQorCistIChOU1N0cmlu
ZyAqKXN0cmluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgcmV0dXJuIElNUEwtPnN0cmluZ0F0dHIoKTsKK30KKworLSAodm9pZClzZXRTdHJp
bmdBdHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdB
dHRyKTsKK30KKworQGVuZAorCitXZWJDb3JlOjpUZXN0UE9ET2JqIGNvcmUoRE9NVGVzdFBPRE9i
aiAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/ICpyZWludGVycHJldF9jYXN0PFdl
YkNvcmU6OlRlc3RQT0RPYmoqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogV2ViQ29yZTo6VGVzdFBP
RE9iaigpOworfQorCitET01UZXN0UE9ET2JqICpraXQoV2ViQ29yZTo6VGVzdFBPRE9iaiB2YWx1
ZSkKK3sKKyAgICB7IERPTV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xh
dGlvbkNoZWNrUm91bmRPbmUoKTsgfTsKKyAgICBET01UZXN0UE9ET2JqICp3cmFwcGVyID0gW1tE
T01UZXN0UE9ET2JqIGFsbG9jXSBfaW5pdF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVp
bnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KG5ldyBXZWJDb3JlOjpUZXN0UE9ET2Jq
KHZhbHVlKSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVy
bmFsLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmpJ
bnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0Y2ViMGNkYjNjZGUzYzQ3NGFlMWM0ZTNjNTQ0OTk2OGMw
OWZkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RQT0RPYmpJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RQT0RPYmouaD4KKworI2lm
IFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgVGVzdFBPRE9iajsKK30KKworV2ViQ29yZTo6
VGVzdFBPRE9iaiBjb3JlKERPTVRlc3RQT0RPYmogKik7CitET01UZXN0UE9ET2JqICpraXQoV2Vi
Q29yZTo6VGVzdFBPRE9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAppbmRleCBlZjRkYjEwNmYwNzQ2NmY4NDI1OTQxNGQ4OWQ5ZDA0OWY2OTg0
MjIyLi4zN2Q1MThlZjEyYjg1NmU2Mjk3YmVmNWUwODZjMTE2ZmY5MjU2YmRkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMSw3ICsxLDcgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFy
Zywgd2l0aCBvciB3aXRob3V0CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1l
dDoKICAqCkBAIC0xMCwxMiArMTAsOSBAQAogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQogICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKQEAgLTYyLDcgKzU5LDExIEBAIG1v
ZHVsZSB0ZXN0IHsKICAgICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBUZXN0T2Jq
IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoaW4gRE9NU3RyaW5nIHN0ckFyZywg
aW4gVGVzdE9iaiBvYmpBcmcpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAot
ICAgICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2Vy
aWFsaXplZEFyZyk7CisgICAgICAgIC8vIFRlc3QgdmFyaW91cyBmb3JtcyBvZiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUuCisgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAg
ICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVOb1JhaXNlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6
ZWRWYWx1ZVJldHVyblJhaXNlcygpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogCiAgICAg
ICAgIC8vIEV4Y2VwdGlvbnMKICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0UE9ET2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQ
T0RPYmouaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNmM0YWQ1NDE3N2Y5Yzg0NmU1OGFhNDEwOWZlMzA0NDM4
ODY3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0UE9ET2JqLmlkbApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURMIGZp
bGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIGFuZCBmb3IgdHJh
Y2tpbmcKKy8vIGNoYW5nZXMgaW4gaXRzIG91cHV0LgorbW9kdWxlIHRlc3QgeworICAgIGludGVy
ZmFjZSBbUE9EVHlwZT1UZXN0UE9ET2JqXSBUZXN0UE9ET2JqIHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGZsb2F0ICAgICAgICAgIHJlYWRPbmx5RmxvYXRBdHRyOworICAgICAgICBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc3RyaW5nQXR0cjsKKyAg
ICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAKaW5kZXggNGE1NGFlMzQwOTUzNzQwNDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uY2MwOWQ1
ZTZhZWVlMWJlZTIzNmI2YzM4OTBjNzIwNjVhZTFiZTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC01NjEsMTggKzU2MSw1OCBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRU
aHJvd3NDYWxsYmFjayhjb25zdCB2OAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQogewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRUaHJv
dyA9IGZhbHNlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRB
cmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVkQXJn
RGlkVGhyb3cpOwogICAgIGlmIChzZXJpYWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFy
Zyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOwor
ICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9
CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlzZUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5zZXJpYWxpemVkVmFsdWVOb1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVX
aXRob3V0VGhyb3dpbmcoYXJnc1swXSk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNl
KHNlcmlhbGl6ZWRBcmcpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlz
ZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVz
dWx0ID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChVTkxJ
S0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KS0+ZGVzZXJpYWxpemUoKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwor
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbXAt
PnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1l
dGhvZFdpdGhFeGNlcHRpb24iKTsKQEAgLTk0Niw3ICs5ODYsMTAgQEAgc3RhdGljIGNvbnN0IEJh
dGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9kIiwg
VGVzdE9iakludGVybmFsOjp2b2lkTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiaW50TWV0aG9kIiwg
VGVzdE9iakludGVybmFsOjppbnRNZXRob2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2QiLCBU
ZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKLSAgICB7InNlcmlhbGl6ZWRWYWx1
ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsic2Vy
aWFsaXplZFZhbHVlUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlz
ZXNDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwgVGVzdE9iakludGVy
bmFsOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZh
bHVlUmV0dXJuUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXNDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwgVGVz
dE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2t9LAogICAg
IHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2Vw
dGlvbkNhbGxiYWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0
aG9kQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1
c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThmNmIw
ZWVmYmI1YTExOTYxNTE0MDYzNjJmNzJlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzggQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhU
ZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8g
VjhUZXN0UE9ET2JqOjppbmZvID0geyBWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RQ
T0RPYmo6OmRlcmVmT2JqZWN0LCAwIH07CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwg
eworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RQT0RPYmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOworICAg
IFRlc3RQT0RPYmoqIGltcCA9IFY4VGVzdFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOwor
fQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQor
eworICAgIElOQ19TVEFUUygiRE9NLlRlc3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7CisgICAg
VGVzdFBPRE9iaiogaW1wID0gVjhUZXN0UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9p
ZCBzdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdFBPRE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0
UE9ET2JqKiBpbXAgPSBWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAg
IFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hlY2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0cmlu
Z0F0dHIodik7CisgICAgcmV0dXJuOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2JqSW50
ZXJuYWwKKworc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJzW10g
PSB7CisgICAgLy8gQXR0cmlidXRlICdyZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFkb25s
eSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBUZXN0
UE9ET2JqSW50ZXJuYWw6OnJlYWRPbmx5RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJ0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIiLCBU
ZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50ZXJu
YWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4
OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRl
bXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAg
IHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVt
cGxhdGUoZGVzYywgIlRlc3RQT0RPYmoiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4oKSwgVjhUZXN0UE9ET2JqOjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RQ
T0RPYmpBdHRycywgc2l6ZW9mKFRlc3RQT0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RPYmpB
dHRycyksCisgICAgICAgIDAsIDApOworICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRl
bXBsYXRlCisgICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBs
YXRlKCkpOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdDYWNo
ZSA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0NhY2hl
OworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2Jq
OjpHZXRUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBWOFRlc3RQT0RPYmpDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBs
YXRlKEdldFJhd1RlbXBsYXRlKCkpOworICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsKK30K
KworVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQb2lu
dGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9v
bCBWOFRlc3RQT0RPYmo6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQor
CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9EVHlw
ZVdyYXBwZXI8VGVzdFBPRE9iaj4qIGltcGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyOworICAgIFY4UHJveHkqIHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9IGdl
dERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVm
KCk7CisgICAgZ2V0RE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBP
RE9iaj4gPiBpbXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBp
bXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAg
cmV0dXJuIFY4VGVzdFBPRE9iajo6d3JhcChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RPYmo6
OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5
cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RQT0RPYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2MmE3
ZWQ5OGYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0UE9ET2JqLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisK
KyNpZm5kZWYgVjhUZXN0UE9ET2JqX2gKKyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV3Jh
cHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNs
YXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXI7CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVz
dFBPRE9iaiA+KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9i
aiA+Kik7CisgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBX
cmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRD
b3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4q
KTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBlV3Jh
cHBlcjxUZXN0UE9ET2JqID4gPik7Cit9CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDhlOTE5
MjA5MGM2NDZlNWI1YTRjNDUyNTMwNTg3Mzc2ZTMzM2RkOWIuLmIxZGY2YzIxNTcwMDBhNGI0YzFj
YjNkOGQ2ZTFlNDYzM2IxNzkzMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEwMjMsMTMgKzEwMjMsMjQgQEAgdm9pZCBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmoKIAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlk
VGhyb3cpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUo
dmFsdWUsIGRpZFRocm93KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Ny
aXB0VmFsdWUgPSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7Cisg
ICAgaWYgKHNjcmlwdFZhbHVlLT5tX2RhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dFcnJv
cihOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUucmVs
ZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAg
IGJvb2wgZGlkVGhyb3c7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0
VmFsdWUodmFsdWUsIGRpZFRocm93KSk7CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlkVGhy
b3cpOworfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZh
bHVlKSk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKFN0cmluZyBkYXRhKQpAQCAtMTA1OCwxNyArMTA2
OSwxMiBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7
CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
CiB7Ci0gICAgZGlkVGhyb3cgPSBmYWxzZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNlcmlh
bGl6ZXIgc2VyaWFsaXplcih3cml0ZXIpOwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxpemUo
dmFsdWUpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAg
ICBkaWRUaHJvdyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhID0g
U3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIuc2Vy
aWFsaXplKHZhbHVlKSkKKyAgICAgICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVy
LmRhdGEoKSk7CiB9CiAKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2NTBl
YTUwOGIwMmI0N2U5ZTBkMi4uYjVmNWY1NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2JlOGM4
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9uIGlz
IHN1Y2Nlc3NmdWwsIHxkaWRUaHJvd3wgaXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
LCBib29sJiBkaWRUaHJvdyk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAtNTcs
NiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBib29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5pc051bGwoKTsgfQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2YWx1
ZSAoaW4gdGhlIGN1cnJlbnQgY29udGV4dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAgICAg
Ly8gY2FzZSBvZiBmYWlsdXJlLgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlhbGl6
ZSgpOwpAQCAtNjgsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWUoKTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6
VmFsdWU+LCBib29sJiBkaWRUaHJvdyk7CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0
cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1Bv
cFN0YXRlRXZlbnQuY3BwCmluZGV4IGI5YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFjNzlk
MTA5YzguLjc5MmZiMzRkZmI2MDU0NjNkMTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuY3BwCkBAIC0zNyw4ICszNyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZl
bnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewogfQog
ICAgIAotdm9pZCBQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVudDo6
aW5pdFBvcFN0YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJs
ZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3Rh
dGVPYmplY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMsIHRy
dWUpOwogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRl
RXZlbnQuaAppbmRleCAyZmI4ZDA2ODViZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIyLi43
MTFmMGI1ZGFhOWI5NzAwOWI5NjFjMWE5YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5o
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
b3BTdGF0ZUV2ZW50KHN0YXRlT2JqZWN0KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9wU3Rh
dGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9pZCBp
bml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxl
LCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhj
ZXB0aW9uQ29kZSYgZWMpOwogICAgIGJvb2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Qb3BTdGF0ZUV2ZW50LmlkbCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmluZGV4
IGFkYzkwNzRlYzRmZWIwNzAwODc2NzNmNmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdiZDA5
YTY1ODVmOWMyZjU4MDBlYjMyMGM4MTYzZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0yOSw5
ICsyOSw5IEBAIG1vZHVsZSBldmVudHMgewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwg
IUxBTkdVQUdFX0NQUAogICAgIGludGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAg
ICAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3Rh
dGVBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBzdGF0ZUFyZykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60111</attachid>
            <date>2010-06-30 05:32:54 -0700</date>
            <delta_ts>2010-07-01 06:56:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100630133252.patch</filename>
            <type>text/plain</type>
            <size>105787</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MWZiYWUxYzc5MjA5YjBiMDk4YTM3MGJlMTM4MzhhMGM5ZGZjOWRhLi41YWNhNjNk
NGM5ZGUyZGJkZjQ5NjYzMDU1ZWU0Nzc5ZmMwMDhhYzQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDYtMjkgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5p
dHBvcHN0YXRlZXZlbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3Rh
dGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Mzdj
ZDI2NzdhNGFiY2YyOTAwNzI3MjUwNDM1YTdlODhhZGY0MDY1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1RoaXMgdGVzdDoKKy0gQ2hlY2tzIHRoYXQgaW5p
dFBvcFN0YXRlRXZlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHN0YXRlQXJnIGNhbid0IGJl
IHNlcmlhbGl6ZWQuCistIFByaW50cyBURVNUIENPTVBMRVRFIHdoZW4gZG9uZS4KK1BBU1Mgc2Vy
aWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIHVuZGVmaW5lZC4KK1BB
U1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIGVtcHR5IGFy
cmF5LgorUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB0aHJldyBhbiBleGNlcHRpb24gZHVl
IHRvIGEgY3ljbGUuCitURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjMxY2FlZDViMjQzZDk1ODhiODQzZTY5MTM1NmZhOTY3Mzg5NzFiNDIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRl
ZXZlbnQuaHRtbApAQCAtMCwwICsxLDQ0IEBACis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHR4dCkK
K3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IHR4
dCArICI8YnI+IjsKK30KKworZnVuY3Rpb24gc3RhdGVQb3BwZWQoKQoreworICAgIGV2ZW50Lmlu
aXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwgdW5kZWZpbmVkKTsKKyAgICBsb2co
IlBBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIHVuZGVm
aW5lZC4iKTsKKyAgICB2YXIgYSA9IHt9OworICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0
ZXN0IiwgdHJ1ZSwgdHJ1ZSwgYSk7CisgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZh
bHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciBlbXB0eSBhcnJheS4iKTsKKyAgICBhLmN5Y2xlID0g
YTsKKyAgICB0cnkgeworICAgICAgZXZlbnQuaW5pdFBvcFN0YXRlRXZlbnQoInRlc3QiLCB0cnVl
LCB0cnVlLCBhKTsKKyAgICAgIGxvZygiRkFJTCBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSBkaWQg
bm90IHRocm93IGFuIGV4Y2VwdGlvbiBkdWUgdG8gYSBjeWNsZS4iKTsKKyAgICB9IGNhdGNoIChl
cnIpIHsKKyAgICAgIGxvZygiUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB0aHJldyBhbiBl
eGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuIik7CisgICAgfQorICAgIGxvZygiVEVTVCBDT01QTEVU
RSIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPGJv
ZHkgb25wb3BzdGF0ZT0ic3RhdGVQb3BwZWQoKTsiPgorPHByZT4KK1RoaXMgdGVzdDoKKy0gQ2hl
Y2tzIHRoYXQgaW5pdFBvcFN0YXRlRXZlbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHN0YXRl
QXJnIGNhbid0IGJlIHNlcmlhbGl6ZWQuCistIFByaW50cyBURVNUIENPTVBMRVRFIHdoZW4gZG9u
ZS4KKzwvcHJlPgorPHByZSBpZD0ibG9nZ2VyIj48L3ByZT4KKzxzY3JpcHQ+CitoaXN0b3J5LnJl
cGxhY2VTdGF0ZSgiRmlyc3RFbnRyeSIsIG51bGwsICI/Rmlyc3RFbnRyeSIpOworaGlzdG9yeS5w
dXNoU3RhdGUoIlNlY29uZEVudHJ5IiwgbnVsbCwgIj9TZWNvbmRFbnRyeSIpOworaGlzdG9yeS5i
YWNrKCk7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12
YWx1ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRk
LXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGQ3NTll
MjAxYzJkMGZkN2FiOTVhMDMwZmNkMDYwODU1YWVjMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MCBAQAorVGVzdCBJbmRleGVkREIncyBhZGQgd2l0
aCBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitpbmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpCitQQVNTICdvbnN1Y2Nlc3Mn
IGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFT
UyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQg
aXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitvcGVuU3VjY2Vzcwor
U3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFT
UyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZh
bHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9
IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQor
UEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBl
dmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlz
IHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUK
KworZGIgPSBldmVudC5yZXN1bHQKK2RiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0JykKK1BBU1Mg
J29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBp
cyB0cnVlCitQQVNTICdhYm9ydCcgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUn
IGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2Ny
ZWF0ZU9iamVjdFN0b3JlU3VjY2VzcworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3Vs
dCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1Mg
J21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRy
dWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBp
biBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlz
IHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlT
dGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3Rh
dGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworb2JqZWN0U3RvcmUgPSBldmVudC5yZXN1bHQKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlw
dC12YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJp
YWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhODNkYmY2NGExMTUwNDIwYTI1
OTcyNTRlNGMxYjdlMjhkNDlmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCmluZGV4IDgwOWJk
ZWNiZTNjMGViYjBjNTdmZjRlYmU2ODIzNzVjMWM2MGJmMjcuLmRlMzg0YzQ5ZDNlNTcwYWI4MjBj
ZDBkZGMzZTUyYmRmMzU3ZjQ4YzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwpAQCAtNDYsNiArNDYsMTQgQEAgZnVuY3Rpb24gdmVy
aWZ5UmVzdWx0KHJlc3VsdCkKICAgICBkZWJ1ZygiIik7CiB9CiAKK2Z1bmN0aW9uIHVuZXhwZWN0
ZWRTdWNjZXNzQ2FsbGJhY2soKQoreworICAgIHRlc3RGYWlsZWQoIlN1Y2Nlc3MgZnVuY3Rpb24g
Y2FsbGVkIHVuZXhwZWN0ZWRseSIpOworICAgIGRlYnVnKCIiKTsKKyAgICB2ZXJpZnlSZXN1bHQo
ZXZlbnQpOworICAgIGRvbmUoKTsKK30KKwogZnVuY3Rpb24gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2soKQogewogICAgIHRlc3RGYWlsZWQoIkVycm9yIGZ1bmN0aW9uIGNhbGxlZCB1bmV4cGVjdGVk
bHk6ICgiICsgZXZlbnQuY29kZSArICIpICIgKyBldmVudC5tZXNzYWdlKTsKQEAgLTU0LDMgKzYy
LDkgQEAgZnVuY3Rpb24gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2soKQogICAgIGRvbmUoKTsKIH0K
IAorZnVuY3Rpb24gY3JlYXRlVW5zZXJpYWxpemFibGVWYWx1ZSgpCit7CisJdmFyIGEgPSB7fTsK
KwlhLmN5Y2xlID0gYTsKKwlyZXR1cm4gYTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZh
bHVlLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1h
ZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdlMjY2Y2YwNTQ0YjJh
ZTJhMGM5MzIxOTE2ZTFmNTQ3M2NjMWFmOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzCkBAIC0wLDAgKzEsNTYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidz
IGFkZCB3aXRoIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CitmdW5jdGlvbiBzZXJpYWxpemVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2soKQor
eworICAgIGRlYnVnKCJzZXJpYWxpemVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2si
KTsKKyAgICAvLyBGSVhNRTogZW5zdXJlIGl0J3MgYSBzZXJpYWxpemF0aW9uIGVycm9yIG9uY2Ug
YWRkIGlzIGltcGxlbWVudGVkLgorICAgIHZlcmlmeUVycm9yRXZlbnQoZXZlbnQpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNz
KCkKK3sKKyAgICBkZWJ1ZygiY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzIik7CisgICAgdmVyaWZ5
U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJv
YmplY3RTdG9yZSA9IGV2ZW50LnJlc3VsdCIpOworICAgIHZhciBhID0gY3JlYXRlVW5zZXJpYWxp
emFibGVWYWx1ZSgpOworICAgIHRyeSB7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdFN0b3JlLmFk
ZChhKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgib2JqU3RvcmUu
YWRkIHRocmV3IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZXJyKTsKKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhN
RTogcmVtb3ZlIHRoZSBub3RpZnkgZG9uZSBhbmQgY2hlY2sgdGhlIGVycm9yIGNhbGxiYWNrIG9u
Y2UgYWRkIGlzIGltcGxlbWVudGVkLgorICAgIGRvbmUoKTsKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgLy8gdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgLy8gcmVzdWx0Lm9uc3VjY2Vz
cyA9IHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgLy8gcmVzdWx0Lm9uZXJyb3IgPSBz
ZXJpYWxpemVkU2NyaXB0VmFsdWVFeHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IG9wZW5TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygib3BlblN1Y2Nlc3MiKTsKKyAgICB2ZXJpZnlT
dWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQu
cmVzdWx0Iik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUo
J3Rlc3QnKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVzdWx0
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKSIpOwor
ICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBvcGVuU3Vj
Y2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
Cit0ZXN0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDRlYTg2ZTc5NzIwN2U1NjhkYTY2YmI1YjgwYTAwMzczOGI2Yzc1ZTYuLmIyZTU3
ZjUwYmI5OGJkNzdmMGQwOGYyYTUzNDM3OGM2NTNjZjcyYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDEw
LTA2LTIyICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBvcnQgZm9yIHRo
cm93aW5nIGJlaGF2aW9yIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0byBiZSBzcGVjaWZpZWQg
aW4gdGhlIElETC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwODM1CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRl
ZCBiaW5kaW5ncyB3aWxsIGVpdGhlciB0aHJvdyBhbiBleGNlcHRpb24gb3IgYmUgc2lsZW50Cisg
ICAgICAgIHdoZW4gY3JlYXRpbmcgYSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgYmFzZWQgb24gdGhl
IGNvcnJlc3BvbmRpbmcgSURMIGRlZmluaXRpb24uCisgICAgICAgIEl0IGFsc28gYWRkcyBUZXN0
UE9ET2JqLmlkbCB0byBleGVyY2lzZSB0aGUgYmluZGluZyBnZW5lcmF0b3IgZm9yIGludGVyZmFj
ZXMgd2l0aCBbUE9EVHlwZT1dIGF0dHJpYnV0ZS4KKyAgICAgICAgVGVzdHM6IFdlYktpdFRvb2xz
L1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzIHNob3VsZCBwYXNzLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6
ZWRWYWx1ZVJhaXNlcyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVO
b1JhaXNlKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlcyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1Jh
aXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmou
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmpQ
cml2YXRlOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZSk6CisgICAgICAgIChXZWJET01UZXN0UE9E
T2JqOjpXZWJET01UZXN0UE9ET2JqKToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RPYmo6OmltcGwp
OgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6fldlYkRPTVRlc3RQT0RPYmopOgorICAgICAg
ICAoV2ViRE9NVGVzdFBPRE9iajo6cmVhZE9ubHlGbG9hdEF0dHIpOgorICAgICAgICAoV2ViRE9N
VGVzdFBPRE9iajo6c3RyaW5nQXR0cik6CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpzZXRT
dHJpbmdBdHRyKToKKyAgICAgICAgKHRvV2ViQ29yZSk6CisgICAgICAgICh0b1dlYktpdCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVl
X3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVf
bm9fcmFpc2UpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVl
X3JldHVybl9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVk
X3ZhbHVlX3JldHVybl9ub19yYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6a2l0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9yZWFkX29u
bHlfZmxvYXRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3Ry
aW5nX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19h
dHRyKToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
cG9kX29ial9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRf
cHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfaW5pdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0UE9ET2JqKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFs
aXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVy
bk5vUmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9E
T2JqQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RP
YmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFBPRE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxm
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6SlNUZXN0UE9ET2JqKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6fkpTVGVzdFBPRE9iaik6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQT0RPYmo6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RQT0RPYmo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQ
T0RPYmpTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFBPRE9iakNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvVGVzdFBPRE9iaik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFBPRE9iajo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6aW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OmNsYXNzSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5cGU6OkpTVGVzdFBPRE9ialByb3Rv
dHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06Cisg
ICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmFpc2VzOl0pOgorICAgICAgICAo
LVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2U6XSk6CisgICAgICAgICgtW0RPTVRl
c3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzXSk6CisgICAgICAgICgtW0RPTVRlc3RP
Ymogc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZV0pOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbTogQWRkZWQuCisgICAgICAgICgt
W0RPTVRlc3RQT0RPYmogZGVhbGxvY10pOgorICAgICAgICAoLVtET01UZXN0UE9ET2JqIGZpbmFs
aXplXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogcmVhZE9ubHlGbG9hdEF0dHJdKToKKyAg
ICAgICAgKC1bRE9NVGVzdFBPRE9iaiBzdHJpbmdBdHRyXSk6CisgICAgICAgICgtW0RPTVRlc3RQ
T0RPYmogc2V0U3RyaW5nQXR0cjpdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoa2l0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJu
YWwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbDogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVl
Tm9SYWlzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2Vy
aWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdFBPRE9iakludGVybmFsOjpWOF9VU0UpOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dFBPRE9iakludGVybmFsOjpyZWFkT25seUZsb2F0QXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6R2V0UmF3VGVtcGxhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RQT0RPYmo6OnRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6SGFz
SW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjp3cmFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpkZXJl
Zk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9i
ai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhy
b3dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpzZXJpYWxp
emF0aW9uRXJyb3IpOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvcFN0YXRlRXZlbnQ6OmluaXRQb3BTdGF0ZUV2ZW50KToKKyAgICAgICAgKiBk
b20vUG9wU3RhdGVFdmVudC5oOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmlkbDoKKwog
MjAxMC0wNi0zMCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCA5MGY4ZDdjYWNkZjc0MmJkNTcyNGY0OWIwZTM4ZmFlNGM0ZDhh
YWQ2Li5lNjBlMTdmYWIxYmVkYTZhZTU0MmRkODI3YWI2NDkzNDQ4NjAxMDRjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NjcsMjAgKzk2
Nyw0NSBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6On5TZXJpYWxpemVkU2NyaXB0VmFsdWUoKQog
ewogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZURhdGE6OnNlcmlhbGl6ZShleGVjLCB2YWx1ZSkpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gc2Vy
aWFsaXplZFZhbHVlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAmZWMpOwor
fQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSogZWMpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0
VmFsdWVEYXRhOjpzZXJpYWxpemUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgKmVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCAqZWMpOworICAgIH0gZWxzZQorICAgICAgICAqZWMgPSAwOwor
ICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpOworfQorCiBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250
ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMob3JpZ2luQ29udGV4dCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHRvSlMoZXhlYywgYXBpVmFsdWUpOwotICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShl
eGVjLCB2YWx1ZSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXpl
ZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgIAotICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWU7CisKKyAgICByZXR1cm4gc2VyaWFsaXpl
ZFZhbHVlLnJlbGVhc2UoKTsKIH0KIAogSlNWYWx1ZVJlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiBkZXN0aW5hdGlvbkNvbnRleHQsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
CmluZGV4IDkzYmQwZGU5MDg2NGVlN2JkMmQxOTA0YzBlMjEwMDM2YjA4OTQzMWMuLmVhNjg5ZWVm
Mjk4NWUyZDRjYzhkMmRkNDhhZTg1OTMzN2FjMTA2MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtMTc2LDEwICsxNzYsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0
VmFsdWVEYXRhOjpzZXJpYWxpemUoZXhlYywgdmFsdWUpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVXaXRob3V0VGhy
b3dpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSk7CisKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSk7CisKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSogZWMpOwogCiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJl
ZiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggOWQ4MGM4MzZlMDc1ODky
MjYxMmE3MDZiMjM0YmQ1MjgzNmVlYTEyNS4uYjFjMWRkNjQ3N2UzNzJlNmMwYzAzZDQ4YjQ5MWY1
YjlhNjcxYmRjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCkBAIC0xNzE2LDEzICsxNzE2LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIHBvZElt
cCgqaW1wKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5
cGUgZXEgImZsb2F0IikgeyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHBvZElt
cCA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAu
ICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHBvZEltcCA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAidmFsdWUiLCBGQUxTRSkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUo
IiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpIC4gIik7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHBvZEltcC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgRkFMU0UpIC4gIik7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAtPmNvbW1pdENoYW5nZShwb2RJ
bXAsIGNhc3RlZFRoaXMpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNW
YWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsIFRSVUUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBteSAkc2V0dGVyRXhwcmVzc2lvblByZWZpeCA9ICRjb2RlR2VuZXJhdG9y
LT5TZXR0ZXJFeHByZXNzaW9uUHJlZml4KFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwg
JGF0dHJpYnV0ZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUt
PnNldHRlckV4Y2VwdGlvbnN9OwpAQCAtMTkxNiw3ICsxOTE2LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUo
JHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAi
ZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21T
aWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFy
YW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiLCBAeyRmdW5jdGlvbi0+cmFpc2Vz
RXhjZXB0aW9uc30pIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJ
ZiBhIHBhcmFtZXRlciBpcyAiYW4gaW5kZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0
aHJvdyBhbiBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBCdXQgdGhpcyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVz
ZSB0aGUgdHlwZSBpcyB1bnNpZ25lZCBhbmQgdGhlIGZhY3QgdGhhdCBpdApAQCAtMTkyOCw2ICsx
OTI4LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlw
ZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0
aW9uc30pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKGVjKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAg
JGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CkBAIC0yMjI1LDcgKzIyMzEs
OCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImltcC0+Y29tbWl0Q2hhbmdlKHBvZEltcCwgY2Fz
dGVkVGhpcyk7XG4iKSBpZiAkcG9kVHlwZTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJK
U0M6OkpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZSwgMSwgJGltcGxDbGFzc05hbWUsICIiLCAkZnVuY3Rpb25TdHJpbmcsICJjYXN0ZWRUaGlz
IikgLiAiO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gTmF0aXZlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkZnVuY3Rp
b25TdHJpbmcsIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkpIGlmICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIg
LiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbXBsQ2xhc3NOYW1l
LCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpIGlmIG5vdCAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKIAogICAgICAgICAkY2Fs
bFdpdGggPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxX
aXRoIn07CkBAIC0yMzAyLDYgKzIzMDksNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiB7CiAgICAg
bXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwogICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15ICRy
YWlzZXMgPSBzaGlmdDsKIAogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRzaWduYXR1cmUtPnR5cGUpOwogCkBAIC0yMzI3LDcgKzIzMzUsOCBAQCBzdWIgSlNWYWx1
ZVRvTmF0aXZlCiAKICAgICBpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3Ig
JHR5cGUgZXEgImFueSIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgJHZhbHVlLCAmZWMpIiBpZiAoJHJhaXNlcyk7CisgICAgICAgIHJl
dHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoZXhlYywg
JHZhbHVlKSI7CiAgICAgfQogCiAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRQb2ludC5oIn0gPSAx
IGlmICR0eXBlIGVxICJTVkdQb2ludCI7CkBAIC0yNDUyLDYgKzI0NjEsMjYgQEAgc3ViIE5hdGl2
ZVRvSlNWYWx1ZQogICAgIHJldHVybiAidG9KUyhleGVjLCAkZ2xvYmFsT2JqZWN0LCBXVEY6Omdl
dFB0cigkdmFsdWUpKSI7CiB9CiAKK3N1YiBOYXRpdmVTZXJpYWxpemVkU2NyaXB0VmFsdWVUb0pT
VmFsdWUKK3sKKyAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hp
ZnQ7CisgICAgbXkgJHJhaXNlcyA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICBteSAkcmV0ID0gIiI7
CisgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJh
bnkiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0g
PSAxOworICAgICAgICAkcmV0ID0gJHJldCAuICIgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBz
ZXJpYWxpemVkU2NyaXB0VmFsdWUgPSAkdmFsdWU7XG4iOworICAgICAgICAkcmV0ID0gJHJldCAu
ICIgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7CisgICAg
ICAgICRyZXQgPSAkcmV0IC4gIiAmJiAhZWMiIGlmICRyYWlzZXM7CisgICAgICAgICRyZXQgPSAk
cmV0IC4gIiA/IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS0+ZGVzZXJpYWxpemVkKCkgOiBqc051bGwo
KTtcbiI7CisgICAgfQorCisgICByZXR1cm4gJHJldDsKK30KKwogc3ViIGNlaWxpbmdUb1Bvd2Vy
T2YyCiB7CiAgICAgbXkgKCRzaXplKSA9IEBfOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZTI0OWNhYWEzZGFhZDM5ZmI1N2ZkZDA2MTc3ZDM5NWY3
MmI1MTdhMS4uYTYxMjA0YzllOTAxZWNjMDc1YWRhODczMjMyZWExMTlhNDE5MDZjNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMTkwLDE3ICsx
MTkwLDE5IEBAIEVORAogCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1E
aWRUaHJvdyA9IGZhbHNlO1xuIikgaWYgKCRyYWlzZXNFeGNlcHRpb25zKTsKICAgICAgICAgfSBl
bHNpZiAoQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7
XG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
IiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIsICRwYXJhbUluZGV4KSAu
ICIgJHBhcmFtZXRlck5hbWUgPSAiKTsKIAotICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBl
cSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlw
ZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkcmFpc2VzRXhjZXB0aW9ucykgewogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICgke3BhcmFtZXRl
ck5hbWV9RGlkVGhyb3cpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgfSBlbHNpZiAo
JHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
V2l0aG91dFRocm93aW5nKGFyZ3NbJHBhcmFtSW5kZXhdKTtcbiIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgSlNWYWx1ZVRvTmF0aXZlKCRw
YXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBh
cmFtZXRlcikgPyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1bmRlZikgLiAiO1xuIik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAK
aW5kZXggNjViYzlmMzZlZTM2ZTI0MjVlNDY0ZTcwYTBkNjBkYmY1MzQ5ZDNhNS4uZDg4MTQ3Y2Nh
OWNiZDk3YjMzYTU5ZjQ4M2IxOWJkN2ZiMGZhODBjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApAQCAtNTQxLDEyICs1NDEs
NDEgQEAgV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjptZXRob2RUaGF0UmVxdWlyZXNBbGxB
cmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNl
cmlhbGl6ZWRBcmcpCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhj
b25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCiB7CiAgICAgaWYgKCFpbXBsKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJn
KSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2Vy
aWFsaXplZFZhbHVlUmFpc2VzKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSksIGVjKTsKKyAgICB3ZWJET01SYWlzZUVy
cm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisKK3ZvaWQgV2Vi
RE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb25zdCBXZWJET01TdHJpbmcmIHNl
cmlhbGl6ZWRBcmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGltcGwoKS0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKK30KKworV2Vi
RE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkRPTVN0cmluZyByZXN1bHQg
PSB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
cyhlYykpKTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlv
bkNvZGU+KGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRP
TVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gdG9XZWJL
aXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsK
IH0KIAogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDMz
YmM3ZmJhNTliMjNiZjBiMzkwNzMwNjIwMzhiNTU1ZTgyMzBmNTcuLmVlOTY5ZGI4YjI5ODJkMWNj
YmI3MjZkNGRhMzVjODczYTYxN2FjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtMTAwLDcgKzEwMCwxMCBAQCBwdWJsaWM6
CiAgICAgV2ViRE9NVGVzdE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBX
ZWJET01UZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9i
aiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYg
c3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgc2VyaWFsaXpl
ZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJp
YWxpemVkVmFsdWVSYWlzZXMoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAg
ICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxp
emVkQXJnKTsKKyAgICBXZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCk7
CisgICAgV2ViRE9NU3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKTsKICAgICB2
b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAg
IHZvaWQgY3VzdG9tTWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2JjMTRkOGRmOTU0OTgzOWIxNGI3NzYwOGEyODY0NGYzYWVmMjUwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9E
T2JqLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJET01UZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgor
I2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitz
dHJ1Y3QgV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9ialByaXZhdGUgeworICAgIFdl
YkRPTVRlc3RQT0RPYmpQcml2YXRlKFdlYkNvcmU6OlRlc3RQT0RPYmoqIG9iamVjdCA9IDApCisg
ICAgICAgIDogaW1wbChvYmplY3QpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3Jl
OjpUZXN0UE9ET2JqPiBpbXBsOworfTsKKworV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBP
RE9iaigpCisgICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKDApCit7Cit9CisKK1dl
YkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiogaW1w
bCkKKyAgICA6IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RQT0RP
YmpQcml2YXRlKGltcGwpKQoreworfQorCitXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9E
T2JqKGNvbnN0IFdlYkRPTVRlc3RQT0RPYmomIGNvcHkpCisgICAgOiBXZWJET01PYmplY3QoKQor
eworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRl
KGNvcHkuaW1wbCgpKSA6IDA7Cit9CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIFdlYkRPTVRlc3RQ
T0RPYmo6OmltcGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwu
Z2V0KCkgOiAwOworfQorCitXZWJET01UZXN0UE9ET2JqOjp+V2ViRE9NVGVzdFBPRE9iaigpCit7
CisgICAgZGVsZXRlIG1faW1wbDsKKyAgICBtX2ltcGwgPSAwOworfQorCitmbG9hdCBXZWJET01U
ZXN0UE9ET2JqOjpyZWFkT25seUZsb2F0QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+cmVhZE9ubHlGbG9hdEF0
dHIoKTsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RQT0RPYmo6OnN0cmluZ0F0dHIoKSBj
b25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RyaW5nJj4oaW1wbCgp
LT5zdHJpbmdBdHRyKCkpOworfQorCit2b2lkIFdlYkRPTVRlc3RQT0RPYmo6OnNldFN0cmluZ0F0
dHIoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRyKQoreworICAgIGlmICghaW1wbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFN0cmluZ0F0dHIobmV3U3RyaW5n
QXR0cik7Cit9CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01U
ZXN0UE9ET2JqJiB3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKK30KKwor
V2ViRE9NVGVzdFBPRE9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0UE9ET2JqKiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gV2ViRE9NVGVzdFBPRE9iaih2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jOTZlZTBlOTVmYTU0YTAxMjc4MmZhMmZlZjIxOGZlOTRhMWJjNDY4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmou
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0UE9ET2JqX2gKKyNk
ZWZpbmUgV2ViRE9NVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNp
bmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVz
dFBPRE9iajsKK307CisKKworY2xhc3MgV2ViRE9NVGVzdFBPRE9iaiA6IHB1YmxpYyBXZWJET01P
YmplY3QgeworcHVibGljOgorICAgIFdlYkRPTVRlc3RQT0RPYmooKTsKKyAgICBleHBsaWNpdCBX
ZWJET01UZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqKTsKKyAgICBXZWJET01UZXN0UE9E
T2JqKGNvbnN0IFdlYkRPTVRlc3RQT0RPYmomKTsKKyAgICB+V2ViRE9NVGVzdFBPRE9iaigpOwor
CisgICAgZmxvYXQgcmVhZE9ubHlGbG9hdEF0dHIoKSBjb25zdDsKKyAgICBXZWJET01TdHJpbmcg
c3RyaW5nQXR0cigpIGNvbnN0OworICAgIHZvaWQgc2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01T
dHJpbmcmKTsKKworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGltcGwoKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIHN0cnVjdCBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZTsKKyAgICBXZWJET01U
ZXN0UE9ET2JqUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdFBPRE9iaiogdG9X
ZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RQT0RPYmomKTsKK1dlYkRPTVRlc3RQT0RPYmogdG9XZWJL
aXQoV2ViQ29yZTo6VGVzdFBPRE9iaiopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmlu
ZGV4IDVjOTM1YzQ4MTA1ZGQ2MzQzMmRlNGE1Y2ZkYzJjN2MzOTBjMDE5MDIuLjYzN2U4Y2YyYTA5
ZjMyMDA5YThhNTViZGY3Y2FjOWQ2NzUzYTU4MmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NQmluZGluZy5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgpAQCAtMTY0LDcgKzE2NSw3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRf
cmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzCiB9CiAKIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZykK
K3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yYWlzZXMoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9h
cmcsIEdFcnJvciAqKmVycm9yKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpAQCAtMTcyLDcgKzE3Myw1MyBA
QCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXpl
ZF9hcmcpOwogICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9z
ZXJpYWxpemVkX2FyZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwotICAgIGl0ZW0tPnNlcmlhbGl6
ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb252ZXJ0ZWRf
c2VyaWFsaXplZF9hcmcsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
cmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnID0gV2ViS2l0Ojpjb3JlKHNl
cmlhbGl6ZWRfYXJnKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVk
X2FyZyk7CisgICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb252ZXJ0ZWRfc2VyaWFs
aXplZF9hcmcpOworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0
X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlcmlhbGl6ZWRWYWx1
ZVJldHVyblJhaXNlcyhlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOworICAgICAgICBXZWJDb3JlOjpnZXRFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiAgcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiA+KFdl
YktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiAKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92
YWx1ZV9yZXR1cm5fbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKTsK
KyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
KTsKKyAgICByZXR1cm4gcmVzOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDhkY2Q4
YzMxZTMzNjNiZTcyNDhhMzc1YjU5NzJhNTE2OTcwMGMzOTcuLjA4ZDA1NWY4YTcxNjgyMDBmMmNm
ZDRjNmE1NDkzNGYzMGU3M2IxMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC03MSw3ICs3MSwxNiBA
QCBXRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2NoYXIqICBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiAgb2JqX2FyZywgR0Vycm9yICoq
ZXJyb3IpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXpl
ZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUqICBzZXJpYWxpemVkX2FyZyk7Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRf
dmFsdWVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNl
cmlhbGl6ZWRfYXJnKTsKKworV0VCS0lUX0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nlcmlh
bGl6ZWRfdmFsdWVfcmV0dXJuX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiBX
RUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9u
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQ
T0RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNGQ5Mzk2YmZmNDVmNzkwM2U3YWUzODQ2MDRlNDVjZGQx
MjE0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIldlYktpdERPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNp
bmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorZ3Bv
aW50ZXIga2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoqIG9iaikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChvYmosIDApOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBET01PYmplY3RD
YWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdFBPRE9iaihvYmopKTsKK30KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdCAvLworCitnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2Jq
X2dldF9yZWFkX29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+cmVhZE9ubHlGbG9hdEF0
dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9k
X29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqICByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYsIGdj
aGFyKiAgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdlYkNvcmU6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVl
KTsKK30KKworCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RQT0RPYmosIHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViQ29yZTo6VGVzdFBPRE9iaiogY29yZShXZWJLaXRET01UZXN0UE9ET2JqKiByZXF1
ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2Vi
Q29yZTo6VGVzdFBPRE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQ
T0RPYmoqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVj
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9SRUFEX09OTFlfRkxPQVRfQVRUUiwKKyAgICBQUk9QX1NUUklOR19BVFRSLAorfTsKKwor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KTsKKyAgICAKKyAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewor
ICAgICAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdFBPRE9iaiAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVP
YmplY3QtPmRlcmVmKCk7CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7
CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X3BvZF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9p
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERPTVRlc3RQT0RPYmoq
IHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihvYmplY3QpOworICAgIFdlYkNvcmU6OlRl
c3RQT0RPYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVT
ZWxmLT5zZXRTdHJpbmdBdHRyKFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERPTVRlc3RQT0RPYmoqIHNl
bGYgPSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSihvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RQ
T0RPYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJvcF9p
ZCkgeworICAgIGNhc2UgUFJPUF9SRUFEX09OTFlfRkxPQVRfQVRUUjoKKyAgICB7CisgICAgICAg
IGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+cmVhZE9ubHlGbG9hdEF0dHIoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6CisgICAg
eworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5n
KGNvcmVTZWxmLT5zdHJpbmdBdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkK
K3sKKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV90ZXN0X3BvZF9vYmpfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfY2xhc3NfaW5pdChXZWJLaXRET01U
ZXN0UE9ET2JqQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2ZpbmFsaXplOworICAgIGdvYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3Bv
ZF9vYmpfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJr
aXRfZG9tX3Rlc3RfcG9kX29ial9jb25zdHJ1Y3RlZDsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9SRUFEX09OTFlfRkxPQVRfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgicmVhZC1vbmx5LWZsb2F0LWF0dHIi
LCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0ZXN0X3BvZF9vYmpfcmVhZC1vbmx5LWZsb2F0LWF0dHIiLCAvKiBz
aG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnZmxvYXQgVGVzdFBPRE9iai5yZWFk
LW9ubHktZmxvYXQtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwgLyogbWluICovCitHX01BWEZMT0FULCAv
KiBtYXggKi8KKzAuMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSU5HX0FUVFIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJpbmct
YXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRlc3RfcG9kX29ial9zdHJpbmctYXR0ciIsIC8qIHNob3J0
IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnY2hhciogIFRlc3RQT0RPYmouc3RyaW5n
LWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhl
cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiIsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfaW5pdChXZWJLaXRE
T01UZXN0UE9ET2JqKiByZXF1ZXN0KQoreworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTVRlc3RQT0RPYmoqIHdyYXBUZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVP
YmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAg
ICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIg
YmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2Nh
dGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQor
ICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7
CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZl
YWMzZWMxNzA1MTFlNjFhYjU3ZjFmNmQ1ZTc0MmQwMWJiYTkxMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9i
ai5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBX
ZWJLaXRET01UZXN0UE9ET2JqX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdFBPRE9ial9oCisKKyNp
bmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKyNpbmNsdWRlICJ3ZWJraXQv
V2ViS2l0RE9NT2JqZWN0LmgiCisKKworR19CRUdJTl9ERUNMUworI2RlZmluZSBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9QT0RfT0JKICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNU
X1BPRF9PQkosIFdlYktpdERPTVRlc3RQT0RPYmopKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
UE9EX09CSl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKLCBXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkop
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfUE9EX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JK
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1BPRF9PQkpfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09C
SiwgV2ViS2l0RE9NVGVzdFBPRE9iakNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXN0UE9E
T2JqIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdGVz
dF9wb2Rfb2JqX2dldF9yZWFkX29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBz
ZWxmKTsKKworV0VCS0lUX0FQSSBnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RQ
T0RPYmoqIHNlbGYsIGdjaGFyKiAgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NVGVzdFBPRE9ial9oICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmM5NWU3MWQ3ZmRiZmNiODdjZWY1MDk4NjE0M2U1NWQ3ZWMxNzMxZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9QT0RfT0JKX1BSSVZBVEVf
SAorI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX1BPRF9PQkpfUFJJVkFURV9ICisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlICJUZXN0UE9ET2JqLmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01U
ZXN0UE9ET2JqICoKKyAgICB3cmFwVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqICpjb3Jl
T2JqZWN0KTsKKworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKgorICAgIGNvcmUoV2ViS2l0RE9N
VGVzdFBPRE9iaiAqcmVxdWVzdCk7CisKKyAgICBncG9pbnRlcgorICAgIGtpdChXZWJDb3JlOjpU
ZXN0UE9ET2JqKiBub2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBX
RUJfS0lUX0RPTV9URVNUX1BPRF9PQkpfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCAzNjA3ODJkODY4ZjVhZGIwMTFl
YzczMzgwNmY0MjBhMTAzYWEyNWY1Li5mMzE2OWY3NTJjZjYyZTAzN2FhZWI5NzMxNDNkMDc3YzU0
MWE0YWM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudAogI2RlZmlu
ZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0gPQorc3RhdGljIGNv
bnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMzXSA9CiB7
CiAgICAgeyAidm9pZE1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRN
ZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ2b2lkTWV0
aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0
aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE1NCw3ICsxNTQs
MTAgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
VmFsdWVzWzMwXSA9CiAgICAgeyAib2JqTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MiLCBEb250RGVsZXRl
IHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKSwgKGludHB0cl90
KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93cyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
LSAgICB7ICJzZXJpYWxpemVkVmFsdWUiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWUpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7
ICJzZXJpYWxpemVkVmFsdWVSYWlzZXMiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWVSYWlzZXMpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
KyAgICB7ICJzZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyksIChpbnRwdHJf
dCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1
cm5Ob1JhaXNlKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0
aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJj
dXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2Qp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2RX
aXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhB
cmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNzksNyArMTgyLDcg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFs
dWVzWzMwXSA9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNU
X0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDY5LCA2Mywg
SlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFT
SFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTMxLCAxMjcsIEpT
VGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9i
alByb3RvdHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNl
bGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNzg0
LDE5ICs3ODcsNjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNl
cmlhbGl6ZWRWYWx1ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJp
dHMoJkpTVGVzdE9iajo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYyk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogCi0gICAgaW1wLT5zZXJp
YWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlz
ZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZU5vUmFpc2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJv
d2luZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1
ZU5vUmFpc2Uoc2VyaWFsaXplZEFyZyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Cisg
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
c2VyaWFsaXplZFNjcmlwdFZhbHVlID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMo
ZWMpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUgJiYg
IWVjID8gc2VyaWFsaXplZFNjcmlwdFZhbHVlLT5kZXNlcmlhbGl6ZWQoKSA6IGpzTnVsbCgpOwor
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Cisg
ICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisK
KworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFNjcmlwdFZhbHVlID0gaW1w
LT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA/IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS0+ZGVzZXJp
YWxpemVkKCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggM2IyMWM4NTYwMWMwYTM3YjdjZGZmZjFl
ZTVmYTM2MTQxMjhhNDY3MC4uMDFkNzQ0OTI0MjVkZjFiN2Y2NmFiNjMzNTEyNmNiOTJmMmZiNGYx
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAg
LTk0LDcgKzk0LDEwIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZChKU0M6OkV4ZWNTCiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRo
QXJncyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6
OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
ZXJpYWxpemVkVmFsdWVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZU5vUmFpc2UoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
cyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZShKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJn
cyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNlODg0NGJjOTA3N2E2ZDUwZjJlOGYw
ODgyMzg5YjMyMzk3OTExNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFBP
RE9iai5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNp
bmNsdWRlIDxydW50aW1lL0pTTnVtYmVyQ2VsbC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RQ
T0RPYmopOworCisvKiBIYXNoIHRhYmxlICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhV
TktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5L
X0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdFBPRE9ialRhYmxlVmFsdWVzWzRdID0KK3sKKyAgICB7ICJyZWFkT25seUZsb2F0
QXR0ciIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0ciksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInN0cmluZ0F0dHIiLCBEb250
RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdFBPRE9ialN0cmluZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0UE9ET2JqU3RyaW5n
QXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVt
IHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0UE9ET2JqQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1
bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJs
ZSBKU1Rlc3RQT0RPYmpUYWJsZSA9IHsgOCwgNywgSlNUZXN0UE9ET2JqVGFibGVWYWx1ZXMsIDAg
fTsKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNk
ZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVm
aW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQorewor
ICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5L
X0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBP
RE9iakNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFi
bGVWYWx1ZXMsIDAgfTsKK2NsYXNzIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7
CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9Owor
Citjb25zdCBDbGFzc0luZm8gSlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3RQT0RPYmpDb25zdHJ1Y3RvciIsIDAsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCAw
IH07CisKK0pTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBE
T01Db25zdHJ1Y3Rvck9iamVjdChKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFBPRE9i
alByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworfQorCitib29sIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBP
RE9iakNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rv
clRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdFBPRE9i
akNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFBPRE9i
akNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCisvKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFU
T1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9S
KGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
UE9ET2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVO
S19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpT
Q19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9ialByb3RvdHlwZVRhYmxlID0g
eyAxLCAwLCBKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFBPRE9ialByb3Rv
dHlwZSIsIDAsICZKU1Rlc3RQT0RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OworCitKU09iamVjdCog
SlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFBP
RE9iaj4oZXhlYywgZ2xvYmFsT2JqZWN0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBP
RE9iajo6c19pbmZvID0geyAiVGVzdFBPRE9iaiIsIDAsICZKU1Rlc3RQT0RPYmpUYWJsZSwgMCB9
OworCitKU1Rlc3RQT0RPYmo6OkpTVGVzdFBPRE9iaihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4gaW1wbCkKKyAgICA6IERPTU9iamVj
dFdpdGhHbG9iYWxQb2ludGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pbXBs
KGltcGwpCit7Cit9CisKK0pTVGVzdFBPRE9iajo6fkpTVGVzdFBPRE9iaigpCit7CisgICAgZm9y
Z2V0RE9NT2JqZWN0KHRoaXMsIGltcGwoKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmo6
OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNUZXN0UE9ET2JqUHJvdG90eXBlKGds
b2JhbE9iamVjdCwgSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29sIEpTVGVzdFBPRE9iajo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVl
U2xvdDxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RQT0RPYmo6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCAmSlNUZXN0UE9E
T2JqVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUg
anNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNs
b3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0UE9ET2JqIGltcCgqY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9ICBqc051bWJlcihleGVjLCBpbXAucmVhZE9ubHlG
bG9hdEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RP
YmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0UE9ET2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7CisgICAgVGVzdFBPRE9iaiBpbXAoKmNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSAganNTdHJpbmcoZXhlYywgaW1wLnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVz
dFBPRE9iaiogZG9tT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3RvcihleGVj
LCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKK30KK3ZvaWQgSlNUZXN0UE9ET2JqOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0UE9E
T2JqLCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0UE9ET2JqVGFibGUs
IHRoaXMsIHNsb3QpOworfQorCit2b2lkIHNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBK
U1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPih0aGlz
T2JqZWN0KTsKKyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ICogaW1wID0gc3Rh
dGljX2Nhc3Q8SlNTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOworICAgIFRlc3RQT0RPYmogcG9kSW1wKCppbXApOworICAgIHBvZEltcC5zZXRTdHJp
bmdBdHRyKHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7CisgICAgaW1w
LT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RQ
T0RPYmo6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0UE9ET2Jq
Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQ
T0RPYmo+KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGdldERP
TU9iamVjdFdyYXBwZXI8SlNUZXN0UE9ET2JqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RP
Ymo+ID4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGNvbnRleHQpOworfQorVGVzdFBPRE9i
aiB0b1Rlc3RQT0RPYmooSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5p
bmhlcml0cygmSlNUZXN0UE9ET2JqOjpzX2luZm8pID8gKFRlc3RQT0RPYmopICpzdGF0aWNfY2Fz
dDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiBUZXN0UE9ET2JqKCk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9E
T2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTRlNGZmZWJhNTQzMWI1Yzg5OGYxOTUxOWM1NDI1NjlmODM2Yzdl
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiBKU1Rlc3RQT0RPYmpfaAorI2RlZmluZSBKU1Rlc3RQT0RPYmpfaAorCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgorI2lu
Y2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdFdpdGhHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEpTVGVzdFBPRE9iaiA6IHB1YmxpYyBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciB7Cisg
ICAgdHlwZWRlZiBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciBCYXNlOworcHVibGljOgorICAg
IEpTVGVzdFBPRE9iaihOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4p
OworICAgIHZpcnR1YWwgfkpTVGVzdFBPRE9iaigpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0
eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4g
KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBtX2ltcGw7Citwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU1NW
R1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiwgU1ZHRWxlbWVudCopOworVGVzdFBPRE9iaiB0
b1Rlc3RQT0RPYmooSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0UE9ET2JqUHJvdG90eXBl
IDogcHVibGljIEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEpT
Qzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOworICAgIH0KKyAgICBKU1Rlc3RQT0RP
YmpQcm90b3R5cGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0dXJlKSA6IEpTQzo6SlNPYmplY3RXaXRoR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKK307CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9ialJlYWRP
bmx5RmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0
SlNUZXN0UE9ET2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXggZDg4NjJkYTE1ZWFjNGU4MWEyZWIxMWFi
ZWEzYTA1ZDMzZmIyYzFiYi4uNzgzYTI2NzExYjJmMjVkNGFjNmVmMmYxYmJhODQ3NDRkN2QxY2Qx
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2Jq
LmgKQEAgLTk4LDcgKzk4LDEwIEBACiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kV2l0aEFyZ3M6
KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmog
KilvYmpBcmc7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnczooTlNT
dHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9i
aiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJn
IG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihO
U1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7CistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczoo
TlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNl
OihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1
ZVJldHVyblJhaXNlczsKKy0gKE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlz
ZTsKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwog
LSAodm9pZCljdXN0b21NZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5n
ICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2
OWZiOTZhNDBmNDE0OWQ4MDU5NGNlZjdkZmI4Li4xOTc5YTM4YmNlOTVmZmYwOTc0NWM4MWE3N2Ri
YWY1MzgyNDBiNTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmoubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLm1tCkBAIC00NDUsMTAgKzQ0NSwzMyBAQAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcK
Ky0gKHZvaWQpc2VyaWFsaXplZFZhbHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+
c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdl
YkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIElNUEwtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykp
LCBlYyk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKK30KKworLSAodm9pZClz
ZXJpYWxpemVkVmFsdWVOb1JhaXNlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2VyaWFsaXpl
ZFZhbHVlTm9SYWlzZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJD
b3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxp
emVkVmFsdWVSZXR1cm5SYWlzZXMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTlNTdHJp
bmcgKnJlc3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXMoZWMpKSk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFp
c2UKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0
dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkp
KTsKIH0KIAogLSAodm9pZCltZXRob2RXaXRoRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNDU2
YTY2Yzc1Zjk0YmViMDE2MGE3NzdjOGM5MGFkMGI5YjcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaApAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExP
V0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitAY2xhc3MgTlNTdHJpbmc7CisKK0BpbnRl
cmZhY2UgRE9NVGVzdFBPRE9iaiA6IERPTU9iamVjdAorLSAoZmxvYXQpcmVhZE9ubHlGbG9hdEF0
dHI7CistIChOU1N0cmluZyAqKXN0cmluZ0F0dHI7CistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5T
U3RyaW5nICopbmV3U3RyaW5nQXR0cjsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW0gYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzY1YjUxZDM5MTQwZmU2OGEyYjM0NDFlYmI4NGIwMWU0MmVmNDlkMQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbQpA
QCAtMCwwICsxLDk4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0UE9ET2Jq
LmgiCisKKyNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUlu
dGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01F
dmVudEludGVybmFsLmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRP
TVN0eWxlU2hlZXRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVzdFBPRE9iakludGVybmFsLmgi
CisjaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmgiCisjaW1wb3J0ICJLVVJMLmgiCisjaW1wb3J0ICJUZXN0UE9ET2JqLmgiCisjaW1w
b3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBv
cnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKwor
I2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdFBPRE9iaio+KF9pbnRl
cm5hbCkKKworQGltcGxlbWVudGF0aW9uIERPTVRlc3RQT0RPYmoKKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtE
T01UZXN0UE9ET2JqIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0
ZSBJTVBMOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQorewor
ICAgIGRlbGV0ZSBJTVBMOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0gKGZsb2F0KXJl
YWRPbmx5RmxvYXRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHJldHVybiBJTVBMLT5yZWFkT25seUZsb2F0QXR0cigpOworfQorCistIChOU1N0
cmluZyAqKXN0cmluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnN0cmluZ0F0dHIoKTsKK30KKworLSAodm9pZClzZXRT
dHJpbmdBdHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0U3RyaW5nQXR0cihuZXdTdHJp
bmdBdHRyKTsKK30KKworQGVuZAorCitXZWJDb3JlOjpUZXN0UE9ET2JqIGNvcmUoRE9NVGVzdFBP
RE9iaiAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/ICpyZWludGVycHJldF9jYXN0
PFdlYkNvcmU6OlRlc3RQT0RPYmoqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogV2ViQ29yZTo6VGVz
dFBPRE9iaigpOworfQorCitET01UZXN0UE9ET2JqICpraXQoV2ViQ29yZTo6VGVzdFBPRE9iaiB2
YWx1ZSkKK3sKKyAgICB7IERPTV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZp
b2xhdGlvbkNoZWNrUm91bmRPbmUoKTsgfTsKKyAgICBET01UZXN0UE9ET2JqICp3cmFwcGVyID0g
W1tET01UZXN0UE9ET2JqIGFsbG9jXSBfaW5pdF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0g
cmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KG5ldyBXZWJDb3JlOjpUZXN0UE9E
T2JqKHZhbHVlKSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iaklu
dGVybmFsLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RP
YmpJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0Y2ViMGNkYjNjZGUzYzQ3NGFlMWM0ZTNjNTQ0OTk2
OGMwOWZkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RQT0RPYmpJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RQT0RPYmouaD4KKwor
I2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgVGVzdFBPRE9iajsKK30KKworV2ViQ29y
ZTo6VGVzdFBPRE9iaiBjb3JlKERPTVRlc3RQT0RPYmogKik7CitET01UZXN0UE9ET2JqICpraXQo
V2ViQ29yZTo6VGVzdFBPRE9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0T2JqLmlkbAppbmRleCBlZjRkYjEwNmYwNzQ2NmY4NDI1OTQxNGQ4OWQ5ZDA0OWY2
OTg0MjIyLi4zN2Q1MThlZjEyYjg1NmU2Mjk3YmVmNWUwODZjMTE2ZmY5MjU2YmRkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMSw3ICsxLDcgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0
ckFyZywgd2l0aCBvciB3aXRob3V0CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJl
IG1ldDoKICAqCkBAIC0xMCwxMiArMTAsOSBAQAogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQogICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKQEAgLTYyLDcgKzU5LDExIEBA
IG1vZHVsZSB0ZXN0IHsKICAgICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBUZXN0
T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoaW4gRE9NU3RyaW5nIHN0ckFy
ZywgaW4gVGVzdE9iaiBvYmpBcmcpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
IAotICAgICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
c2VyaWFsaXplZEFyZyk7CisgICAgICAgIC8vIFRlc3QgdmFyaW91cyBmb3JtcyBvZiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUuCisgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGluIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVOb1JhaXNlKGluIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlh
bGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogCiAg
ICAgICAgIC8vIEV4Y2VwdGlvbnMKICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0UE9ET2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RQT0RPYmouaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNmM0YWQ1NDE3N2Y5Yzg0NmU1OGFhNDEwOWZlMzA0
NDM4ODY3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0UE9ET2JqLmlkbApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFy
ZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURM
IGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIGFuZCBmb3Ig
dHJhY2tpbmcKKy8vIGNoYW5nZXMgaW4gaXRzIG91cHV0LgorbW9kdWxlIHRlc3QgeworICAgIGlu
dGVyZmFjZSBbUE9EVHlwZT1UZXN0UE9ET2JqXSBUZXN0UE9ET2JqIHsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIGZsb2F0ICAgICAgICAgIHJlYWRPbmx5RmxvYXRBdHRyOworICAgICAgICBh
dHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc3RyaW5nQXR0cjsK
KyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKaW5kZXggNGE1NGFlMzQwOTUzNzQwNDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uY2Mw
OWQ1ZTZhZWVlMWJlZTIzNmI2YzM4OTBjNzIwNjVhZTFiZTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC01NjEsMTggKzU2MSw1OCBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3NDYWxsYmFjayhjb25zdCB2OAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRU
aHJvdyA9IGZhbHNlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVk
QXJnRGlkVGhyb3cpOwogICAgIGlmIChzZXJpYWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXpl
ZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMp
OworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlz
ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVOb1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGVXaXRob3V0VGhyb3dpbmcoYXJnc1swXSk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1Jh
aXNlKHNlcmlhbGl6ZWRBcmcpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
K30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cmVzdWx0ID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChV
TkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKS0+ZGVzZXJpYWxpemUoKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1Jh
aXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBp
bXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwog
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
Lm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKQEAgLTk0Niw3ICs5ODYsMTAgQEAgc3RhdGljIGNvbnN0
IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9k
IiwgVGVzdE9iakludGVybmFsOjp2b2lkTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiaW50TWV0aG9k
IiwgVGVzdE9iakludGVybmFsOjppbnRNZXRob2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2Qi
LCBUZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKLSAgICB7InNlcmlhbGl6ZWRW
YWx1ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsi
c2VyaWFsaXplZFZhbHVlUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVS
YWlzZXNDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwgVGVzdE9iaklu
dGVybmFsOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXpl
ZFZhbHVlUmV0dXJuUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1
cm5SYWlzZXNDYWxsYmFja30sCisgICAgeyJzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwg
VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2t9LAog
ICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4
Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9t
TWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6
OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThm
NmIwZWVmYmI1YTExOTYxNTE0MDYzNjJmNzJlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzgg
QEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VjhUZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUlu
Zm8gVjhUZXN0UE9ET2JqOjppbmZvID0geyBWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRl
c3RQT0RPYmo6OmRlcmVmT2JqZWN0LCAwIH07CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJu
YWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorewor
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RQT0RPYmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOwor
ICAgIFRlc3RQT0RPYmoqIGltcCA9IFY4VGVzdFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkp
OworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7Cisg
ICAgVGVzdFBPRE9iaiogaW1wID0gVjhUZXN0UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMg
dm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFBPRE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBU
ZXN0UE9ET2JqKiBpbXAgPSBWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwor
ICAgIFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hlY2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0
cmluZ0F0dHIodik7CisgICAgcmV0dXJuOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2Jq
SW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJz
W10gPSB7CisgICAgLy8gQXR0cmlidXRlICdyZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFk
b25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBU
ZXN0UE9ET2JqSW50ZXJuYWw6OnJlYWRPbmx5RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBu
byBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBz
dGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0
YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0
ZScgRXh0QXR0cjogJ0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIi
LCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50
ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9i
alRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQorewor
ICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJl
VGVtcGxhdGUoZGVzYywgIlRlc3RQT0RPYmoiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhUZXN0UE9ET2JqOjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRl
c3RQT0RPYmpBdHRycywgc2l6ZW9mKFRlc3RQT0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RP
YmpBdHRycyksCisgICAgICAgIDAsIDApOworICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5n
IHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1Rl
bXBsYXRlKCkpOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdD
YWNoZSA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0Nh
Y2hlOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9E
T2JqOjpHZXRUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRl
bXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOworICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsK
K30KKworVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQ
b2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKwor
Ym9vbCBWOFRlc3RQT0RPYmo6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOwor
fQorCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9E
VHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qIGltcGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyOworICAgIFY4UHJveHkqIHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9
IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdy
YXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAo
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+
cmVmKCk7CisgICAgZ2V0RE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVz
dFBPRE9iaj4gPiBpbXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+
KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Cisg
ICAgcmV0dXJuIFY4VGVzdFBPRE9iajo6d3JhcChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RP
Ymo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BP
RFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2
MmE3ZWQ5OGYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0UE9ET2JqLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyov
CisKKyNpZm5kZWYgVjhUZXN0UE9ET2JqX2gKKyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAi
V3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+
IGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXI7CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpOworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
R2V0UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8
VGVzdFBPRE9iaiA+KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBP
RE9iaiA+Kik7CisgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRp
YyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmll
bGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2Jq
ID4qKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBl
V3JhcHBlcjxUZXN0UE9ET2JqID4gPik7Cit9CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDhl
OTE5MjA5MGM2NDZlNWI1YTRjNDUyNTMwNTg3Mzc2ZTMzM2RkOWIuLmIxZGY2YzIxNTcwMDBhNGI0
YzFjYjNkOGQ2ZTFlNDYzM2IxNzkzMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEwMjMsMTMgKzEwMjMsMjQgQEAgdm9pZCBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmoKIAogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYg
ZGlkVGhyb3cpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFs
dWUodmFsdWUsIGRpZFRocm93KSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c2NyaXB0VmFsdWUgPSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7
CisgICAgaWYgKHNjcmlwdFZhbHVlLT5tX2RhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dF
cnJvcihOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZGlkVGhyb3cgPSBmYWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUu
cmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewog
ICAgIGJvb2wgZGlkVGhyb3c7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlk
VGhyb3cpOworfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KHZhbHVlKSk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKFN0cmluZyBkYXRhKQpAQCAtMTA1OCwxNyAr
MTA2OSwxMiBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgp
CiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpCiB7Ci0gICAgZGlkVGhyb3cgPSBmYWxzZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNl
cmlhbGl6ZXIgc2VyaWFsaXplcih3cml0ZXIpOwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxp
emUodmFsdWUpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAg
ICAgICBkaWRUaHJvdyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRh
ID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIu
c2VyaWFsaXplKHZhbHVlKSkKKyAgICAgICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3Jp
dGVyLmRhdGEoKSk7CiB9CiAKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2
NTBlYTUwOGIwMmI0N2U5ZTBkMi4uYjVmNWY1NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2Jl
OGM4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9u
IGlzIHN1Y2Nlc3NmdWwsIHxkaWRUaHJvd3wgaXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlLCBib29sJiBkaWRUaHJvdyk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAt
NTcsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBib29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5pc051bGwoKTsgfQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2
YWx1ZSAoaW4gdGhlIGN1cnJlbnQgY29udGV4dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAg
ICAgLy8gY2FzZSBvZiBmYWlsdXJlLgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlh
bGl6ZSgpOwpAQCAtNjgsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoKTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2
ODo6VmFsdWU+LCBib29sJiBkaWRUaHJvdyk7CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9kZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9t
L1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IGI5YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFj
NzlkMTA5YzguLjc5MmZiMzRkZmI2MDU0NjNkMTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Bv
cFN0YXRlRXZlbnQuY3BwCkBAIC0zNyw4ICszNyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRl
RXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewog
fQogICAgIAotdm9pZCBQb3BTdGF0ZUV2ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVu
dDo6aW5pdFBvcFN0YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1
YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c3RhdGVPYmplY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMs
IHRydWUpOwogICAgIGlmIChkaXNwYXRjaGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuaAppbmRleCAyZmI4ZDA2ODViZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIy
Li43MTFmMGI1ZGFhOWI5NzAwOWI5NjFjMWE5YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVu
dC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQb3BTdGF0ZUV2ZW50KHN0YXRlT2JqZWN0KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9w
U3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9p
ZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
RXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIGJvb2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmlu
ZGV4IGFkYzkwNzRlYzRmZWIwNzAwODc2NzNmNmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdi
ZDA5YTY1ODVmOWMyZjU4MDBlYjMyMGM4MTYzZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bv
cFN0YXRlRXZlbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0y
OSw5ICsyOSw5IEBAIG1vZHVsZSBldmVudHMgewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkg
fHwgIUxBTkdVQUdFX0NQUAogICAgIGludGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewog
ICAgICAgICB2b2lkIGluaXRQb3BTdGF0ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
c3RhdGVBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSBzdGF0ZUFyZykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60241</attachid>
            <date>2010-07-01 06:56:10 -0700</date>
            <delta_ts>2010-07-28 04:29:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100701145606.patch</filename>
            <type>text/plain</type>
            <size>105703</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmZDY2YWE3Zjc5OTNkMzJhNjJkZTg2NjczYjVhMmQyMDZjYmE1ZDIxLi44ZGU0Y2I2
ZmQwZDBjYzlmZjVjNGZlOWM0NzBlZjcwODZmYTBmYzcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDctMDEgIFNhdGlz
aCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkzN2NkMjY3N2E0YWJjZjI5MDA3MjcyNTA0MzVhN2U4OGFkZjQwNjUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRl
ZXZlbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGhpcyB0ZXN0OgorLSBDaGVja3Mg
dGhhdCBpbml0UG9wU3RhdGVFdmVudCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gc3RhdGVBcmcg
Y2FuJ3QgYmUgc2VyaWFsaXplZC4KKy0gUHJpbnRzIFRFU1QgQ09NUExFVEUgd2hlbiBkb25lLgor
UEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB3aXRob3V0IGV4Y2VwdGlvbiBmb3IgdW5kZWZp
bmVkLgorUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB3aXRob3V0IGV4Y2VwdGlvbiBmb3Ig
ZW1wdHkgYXJyYXkuCitQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHRocmV3IGFuIGV4Y2Vw
dGlvbiBkdWUgdG8gYSBjeWNsZS4KK1RFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzFjYWVkNWIyNDNkOTU4OGI4NDNlNjkxMzU2ZmE5NjczODk3MWI0MgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0
cG9wc3RhdGVldmVudC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzxzY3JpcHQ+CitmdW5jdGlvbiBs
b2codHh0KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhU
TUwgKz0gdHh0ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBzdGF0ZVBvcHBlZCgpCit7CisgICAg
ZXZlbnQuaW5pdFBvcFN0YXRlRXZlbnQoInRlc3QiLCB0cnVlLCB0cnVlLCB1bmRlZmluZWQpOwor
ICAgIGxvZygiUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB3aXRob3V0IGV4Y2VwdGlvbiBm
b3IgdW5kZWZpbmVkLiIpOworICAgIHZhciBhID0ge307CisgICAgZXZlbnQuaW5pdFBvcFN0YXRl
RXZlbnQoInRlc3QiLCB0cnVlLCB0cnVlLCBhKTsKKyAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBz
Y3JpcHQgdmFsdWUgd2l0aG91dCBleGNlcHRpb24gZm9yIGVtcHR5IGFycmF5LiIpOworICAgIGEu
Y3ljbGUgPSBhOworICAgIHRyeSB7CisgICAgICBldmVudC5pbml0UG9wU3RhdGVFdmVudCgidGVz
dCIsIHRydWUsIHRydWUsIGEpOworICAgICAgbG9nKCJGQUlMIHNlcmlhbGl6ZWQgc2NyaXB0IHZh
bHVlIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGR1ZSB0byBhIGN5Y2xlLiIpOworICAgIH0g
Y2F0Y2ggKGVycikgeworICAgICAgbG9nKCJQQVNTIHNlcmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHRo
cmV3IGFuIGV4Y2VwdGlvbiBkdWUgdG8gYSBjeWNsZS4iKTsKKyAgICB9CisgICAgbG9nKCJURVNU
IENPTVBMRVRFIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorPC9zY3Jp
cHQ+Cis8Ym9keSBvbnBvcHN0YXRlPSJzdGF0ZVBvcHBlZCgpOyI+Cis8cHJlPgorVGhpcyB0ZXN0
OgorLSBDaGVja3MgdGhhdCBpbml0UG9wU3RhdGVFdmVudCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdo
ZW4gc3RhdGVBcmcgY2FuJ3QgYmUgc2VyaWFsaXplZC4KKy0gUHJpbnRzIFRFU1QgQ09NUExFVEUg
d2hlbiBkb25lLgorPC9wcmU+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPHNjcmlwdD4KK2hp
c3RvcnkucmVwbGFjZVN0YXRlKCJGaXJzdEVudHJ5IiwgbnVsbCwgIj9GaXJzdEVudHJ5Iik7Cito
aXN0b3J5LnB1c2hTdGF0ZSgiU2Vjb25kRW50cnkiLCBudWxsLCAiP1NlY29uZEVudHJ5Iik7Cito
aXN0b3J5LmJhY2soKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwZDc1OWUyMDFjMmQwZmQ3YWI5NWEwMzBmY2QwNjA4NTVhZWMwOTcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUwIEBACitUZXN0IEluZGV4ZWREQidz
IGFkZCB3aXRoIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2luZGV4ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0aW9uJykKK1BBU1MgJ29u
c3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0
cnVlCitQQVNTICdhYm9ydCcgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGlu
IHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK29wZW5T
dWNjZXNzCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0
cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZl
bnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5z
b3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBp
cyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnYWJv
cnQnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50
YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJn
ZXQuRE9ORQorCitkYiA9IGV2ZW50LnJlc3VsdAorZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3Qn
KQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4g
cmVzdWx0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVh
ZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHku
Li4KKworY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFT
UyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxz
ZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZl
bnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1
Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50
YXJnZXQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
ICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQu
cmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCitvYmplY3RTdG9yZSA9IGV2ZW50LnJl
c3VsdAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGItYWRkLXNlcmlhbGl6
ZWQtc2NyaXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGIt
YWRkLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE4M2RiZjY0YTEx
NTA0MjBhMjU5NzI1NGU0YzFiN2UyOGQ0OWYxMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRt
bApAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5j
dGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2lkYi1hZGQtc2Vy
aWFsaXplZC1zY3JpcHQtdmFsdWUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5q
cyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9zaGFyZWQuanMKaW5k
ZXggODA5YmRlY2JlM2MwZWJiMGM1N2ZmNGViZTY4MjM3NWMxYzYwYmYyNy4uZGUzODRjNDlkM2U1
NzBhYjgyMGNkMGRkYzNlNTJiZGYzNTdmNDhjMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzCkBAIC00Niw2ICs0NiwxNCBAQCBmdW5j
dGlvbiB2ZXJpZnlSZXN1bHQocmVzdWx0KQogICAgIGRlYnVnKCIiKTsKIH0KIAorZnVuY3Rpb24g
dW5leHBlY3RlZFN1Y2Nlc3NDYWxsYmFjaygpCit7CisgICAgdGVzdEZhaWxlZCgiU3VjY2VzcyBm
dW5jdGlvbiBjYWxsZWQgdW5leHBlY3RlZGx5Iik7CisgICAgZGVidWcoIiIpOworICAgIHZlcmlm
eVJlc3VsdChldmVudCk7CisgICAgZG9uZSgpOworfQorCiBmdW5jdGlvbiB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjaygpCiB7CiAgICAgdGVzdEZhaWxlZCgiRXJyb3IgZnVuY3Rpb24gY2FsbGVkIHVu
ZXhwZWN0ZWRseTogKCIgKyBldmVudC5jb2RlICsgIikgIiArIGV2ZW50Lm1lc3NhZ2UpOwpAQCAt
NTQsMyArNjIsOSBAQCBmdW5jdGlvbiB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaygpCiAgICAgZG9u
ZSgpOwogfQogCitmdW5jdGlvbiBjcmVhdGVVbnNlcmlhbGl6YWJsZVZhbHVlKCkKK3sKKwl2YXIg
YSA9IHt9OworCWEuY3ljbGUgPSBhOworCXJldHVybiBhOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXplZC1z
Y3JpcHQtdmFsdWUuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVz
dHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2UyNjZj
ZjA1NDRiMmFlMmEwYzkzMjE5MTZlMWY1NDczY2MxYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1hZGQtc2VyaWFsaXpl
ZC1zY3JpcHQtdmFsdWUuanMKQEAgLTAsMCArMSw1NiBAQAorZGVzY3JpcHRpb24oIlRlc3QgSW5k
ZXhlZERCJ3MgYWRkIHdpdGggU2VyaWFsaXplZFNjcmlwdFZhbHVlLiIpOworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK2Z1bmN0aW9uIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JDYWxs
YmFjaygpCit7CisgICAgZGVidWcoInNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JD
YWxsYmFjayIpOworICAgIC8vIEZJWE1FOiBlbnN1cmUgaXQncyBhIHNlcmlhbGl6YXRpb24gZXJy
b3Igb25jZSBhZGQgaXMgaW1wbGVtZW50ZWQuCisgICAgdmVyaWZ5RXJyb3JFdmVudChldmVudCk7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9y
ZVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MiKTsKKyAg
ICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHZhciBvYmplY3RTdG9yZSA9IGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlID0gZXZlbnQucmVzdWx0Iik7CisgICAgdmFyIGEgPSBjcmVhdGVV
bnNlcmlhbGl6YWJsZVZhbHVlKCk7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0
U3RvcmUuYWRkKGEpOworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICB0ZXN0RmFpbGVkKCJv
YmpTdG9yZS5hZGQgdGhyZXcgYW4gdW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBlcnIpOworICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhlIG5vdGlmeSBkb25lIGFuZCBjaGVjayB0aGUgZXJyb3IgY2Fs
bGJhY2sgb25jZSBhZGQgaXMgaW1wbGVtZW50ZWQuCisgICAgZG9uZSgpOworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAvLyB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICAvLyByZXN1bHQu
b25zdWNjZXNzID0gdW5leHBlY3RlZFN1Y2Nlc3NDYWxsYmFjazsKKyAgICAvLyByZXN1bHQub25l
cnJvciA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJvcGVuU3VjY2VzcyIpOworICAg
IHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgdmFyIGRiID0gZXZhbEFuZExvZygiZGIg
PSBldmVudC5yZXN1bHQiKTsKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmpl
Y3RTdG9yZSgndGVzdCcpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0
Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICByZXN1bHQgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlv
bicpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IG9wZW5TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMWFhNTE2ZjZlZDk2MGVjNjk5MDAzODA5Yzc5MzU3ZGVkNmU4NWY3
OC4uOGYzZjAxODkxMDJkMDAyMjlhNzUxNWY2MzMwNzliNDQzY2EyYWRiZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzkg
QEAKKzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9y
dCBmb3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNw
ZWNpZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUg
Z2VuZXJhdGVkIGJpbmRpbmdzIHdpbGwgZWl0aGVyIHRocm93IGFuIGV4Y2VwdGlvbiBvciBiZSBz
aWxlbnQKKyAgICAgICAgd2hlbiBjcmVhdGluZyBhIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBiYXNl
ZCBvbiB0aGUgY29ycmVzcG9uZGluZyBJREwgZGVmaW5pdGlvbi4KKyAgICAgICAgSXQgYWxzbyBh
ZGRzIFRlc3RQT0RPYmouaWRsIHRvIGV4ZXJjaXNlIHRoZSBiaW5kaW5nIGdlbmVyYXRvciBmb3Ig
aW50ZXJmYWNlcyB3aXRoIFtQT0RUeXBlPV0gYXR0cmlidXRlLgorICAgICAgICBUZXN0czogV2Vi
S2l0VG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6
c2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UpOgorICAgICAgICAoV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVl
UmV0dXJuUmFpc2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJl
dHVybk5vUmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dFBPRE9iai5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVz
dFBPRE9ialByaXZhdGU6OldlYkRPTVRlc3RQT0RPYmpQcml2YXRlKToKKyAgICAgICAgKFdlYkRP
TVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmopOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9i
ajo6aW1wbCk6CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjp+V2ViRE9NVGVzdFBPRE9iaik6
CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpyZWFkT25seUZsb2F0QXR0cik6CisgICAgICAg
IChXZWJET01UZXN0UE9ET2JqOjpzdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkRPTVRlc3RQT0RP
Ymo6OnNldFN0cmluZ0F0dHIpOgorICAgICAgICAodG9XZWJDb3JlKToKKyAgICAgICAgKHRvV2Vi
S2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RP
YmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6
ZWRfdmFsdWVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXpl
ZF92YWx1ZV9ub19yYWlzZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6
ZWRfdmFsdWVfcmV0dXJuX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
cmlhbGl6ZWRfdmFsdWVfcmV0dXJuX25vX3JhaXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0
X3JlYWRfb25seV9mbG9hdF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2Jq
X2dldF9zdHJpbmdfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9zZXRf
c3RyaW5nX2F0dHIpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9wb2Rfb2JqX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRf
cHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9pbml0KToKKyAgICAgICAgKFdlYktp
dDo6d3JhcFRlc3RQT0RPYmopOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RQT0RPYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TZXJpYWxpemVkVmFsdWVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZh
bHVlUmV0dXJuTm9SYWlzZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQT0RP
YmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdFBPRE9iakNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5
cGU6OnNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpKU1Rlc3RQT0RPYmop
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjp+SlNUZXN0UE9ET2JqKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFBPRE9ialJlYWRPbmx5RmxvYXRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdFBPRE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0UE9ET2Jq
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQT0RPYmo6OmdldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXN0UE9ET2JqKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0UE9ET2JqOjpjbGFzc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9E
T2JqOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpp
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9ialByb3RvdHlwZTo6Y2xhc3NJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9ialByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9ialByb3RvdHlwZTo6SlNUZXN0UE9E
T2JqUHJvdG90eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9i
ai5tbToKKyAgICAgICAgKC1bRE9NVGVzdE9iaiBzZXJpYWxpemVkVmFsdWVSYWlzZXM6XSk6Cisg
ICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlTm9SYWlzZTpdKToKKyAgICAgICAg
KC1bRE9NVGVzdE9iaiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNdKToKKyAgICAgICAgKC1b
RE9NVGVzdE9iaiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlXSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tOiBBZGRlZC4KKyAg
ICAgICAgKC1bRE9NVGVzdFBPRE9iaiBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RP
YmogZmluYWxpemVdKToKKyAgICAgICAgKC1bRE9NVGVzdFBPRE9iaiByZWFkT25seUZsb2F0QXR0
cl0pOgorICAgICAgICAoLVtET01UZXN0UE9ET2JqIHN0cmluZ0F0dHJdKToKKyAgICAgICAgKC1b
RE9NVGVzdFBPRE9iaiBzZXRTdHJpbmdBdHRyOl0pOgorICAgICAgICAoY29yZSk6CisgICAgICAg
IChraXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RP
YmpJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRs
OiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmFp
c2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxp
emVkVmFsdWVOb1JhaXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVy
bmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6OlY4X1VTRSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6OnJlYWRPbmx5RmxvYXRBdHRyQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RQT0RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJlVjhUZXN0UE9ET2JqVGVtcGxhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdFBPRE9iajo6dG9OYXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9E
T2JqOjpIYXNJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6OndyYXAp
OgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RP
Ymo6OmRlcmVmT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdp
dGhvdXRUaHJvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnNlcmlhbGl6YXRpb25FcnJvcik6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQpOgorICAg
ICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50Lmg6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQu
aWRsOgorCiAyMDEwLTA3LTAxICBBbnR0aSBLb2l2aXN0byAgPGtvaXZpc3RvQGlraS5maT4KIAog
ICAgICAgICBSZXZlcnQgYWNjaWRlbnRhbCBjb21taXQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOTBmOGQ3Y2FjZGY3NDJiZDU3MjRmNDli
MGUzOGZhZTRjNGQ4YWFkNi4uZTYwZTE3ZmFiMWJlZGE2YWU1NDJkZDgyN2FiNjQ5MzQ0ODYwMTA0
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApA
QCAtOTY3LDIwICs5NjcsNDUgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp+U2VyaWFsaXplZFNj
cmlwdFZhbHVlKCkKIHsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRocm93aW5nKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJpYWxpemUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2
YWx1ZSwgJmVjKTsKK30KKworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUqIGVjKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICplYyA9IE5PVF9TVVBQT1JURURfRVJS
OworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgKmVjKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgKmVjID0gMDsKKyAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKTsKK30KKwog
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKG9yaWdpbkNvbnRleHQpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIGFwaVZhbHVlKTsKLSAgICBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgdmFsdWUpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IHZhbHVlKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNl
cHRpb24oKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlOworCisgICAgcmV0
dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7CiB9CiAKIEpTVmFsdWVSZWYgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYgZGVzdGluYXRpb25Db250ZXh0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAppbmRleCA5M2JkMGRlOTA4NjRlZTdiZDJkMTkwNGMwZTIxMDAzNmIwODk0
MzFjLi5lYTYxMjc2Y2E4M2ViMjAwZmJlZDVlYWFiOTEwMjQ4YzBhMjhjN2EyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTE3NiwxMCArMTc2LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVh
dGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXplKGV4ZWMsIHZhbHVlKSkpOwotICAgICAg
ICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3Jl
YXRlV2l0aG91dFRocm93aW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIEV4Y2VwdGlvbkNvZGUqKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCmluZGV4IDlkODBjODM2ZTA3NTg5MjI2MTJhNzA2YjIzNGJkNTI4MzZlZWEx
MjUuLmVjNTA5YzMyOGQ1YjY4ZmNmN2VkNjkwNGQyNjE2YTgzYWY2ODYyMGEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTcxNiwxMyArMTcxNiwx
MyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJbXAoKmltcCk7XG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlIGVxICJmbG9hdCIpIHsgIyBTcGVj
aWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikgLiAiO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAgPSAi
IC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgRkFMU0Up
IC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cG9kSW1wLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXAuc2V0JGlt
cGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsICJ2YWx1ZSIsIEZBTFNFKSAuICIpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0ZWRUaGlzKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsICJ2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAi
dmFsdWUiLCBUUlVFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNldHRl
ckV4cHJlc3Npb25QcmVmaXggPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvblByZWZp
eChcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKQEAg
LTE5MTYsNyArMTkxNiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29sdmVyID0g
Y3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9
ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5k
ZXgpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4g
IiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpIiwgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSAuICI7XG4iKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYSBwYXJhbWV0ZXIgaXMgImFuIGlu
ZGV4IiBhbmQgaXQncyBuZWdhdGl2ZSBpdCBzaG91bGQgdGhyb3cgYW4gSU5ERVhfU0laRV9FUlIg
ZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnV0IHRoaXMgbmVlZHMg
dG8gYmUgZG9uZSBpbiB0aGUgYmluZGluZ3MsIGJlY2F1c2UgdGhlIHR5cGUgaXMgdW5zaWduZWQg
YW5kIHRoZSBmYWN0IHRoYXQgaXQKQEAgLTE5MjgsNiArMTkyOCwxMiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIgJiYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChlYykge1xuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAi
IGlmICRwYXJhbUluZGV4OwpAQCAtMjIyNSw3ICsyMjMxLDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICJpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMpO1xuIikgaWYgJHBvZFR5
cGU7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIg
LiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbXBsQ2xhc3NOYW1l
LCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICBt
eSAkaXNTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUg
ZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3IgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUg
ZXEgImFueSIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIE5hdGl2ZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZVRvSlNWYWx1ZSgkZnVuY3Rpb25TdHJpbmcsIEB7JGZ1bmN0aW9uLT5y
YWlzZXNFeGNlcHRpb25zfSkpIGlmICRpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSByZXN1bHQg
PSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNz
TmFtZSwgIiIsICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXMiKSAuICI7XG4iKSBpZiBub3Qg
JGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskZnVuY3Rpb24tPnJh
aXNlc0V4Y2VwdGlvbnN9OwogCiAgICAgICAgICRjYWxsV2l0aCA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKQEAgLTIzMDIsNiArMjMxMCw3
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIHsKICAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CiAg
ICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHJhaXNlcyA9IHNoaWZ0OwogCiAgICAgbXkg
JHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CiAK
QEAgLTIzMjcsNyArMjMzNiw4IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAgIGlmICgkdHlw
ZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55IikgewogICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKLSAgICAgICAg
cmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCAkdmFsdWUpIjsKKyAg
ICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCAkdmFsdWUs
ICZlYykiIGlmICgkcmFpc2VzKTsKKyAgICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhleGVjLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICAk
aW1wbEluY2x1ZGVzeyJGbG9hdFBvaW50LmgifSA9IDEgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsK
QEAgLTI0NTIsNiArMjQ2MiwyMSBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgcmV0dXJuICJ0
b0pTKGV4ZWMsICRnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCR2YWx1ZSkpIjsKIH0KIAorc3Vi
IE5hdGl2ZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVRvSlNWYWx1ZQoreworICAgIG15ICR2YWx1ZSA9
IHNoaWZ0OworICAgIG15ICRyYWlzZXMgPSBzaGlmdDsKKworICAgICRpbXBsSW5jbHVkZXN7IlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOworICAgIG15ICRyZXQgPSAiIjsKKyAgICAkcmV0
ID0gJHJldCAuICIgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSA9ICR2YWx1ZTtcbiI7CisgICAgJHJldCA9ICRyZXQgLiAiICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSAiOworICAgICRyZXQgPSAkcmV0IC4gIiBlYyA/IGpzVW5kZWZpbmVk
KCkgOiAiIGlmICRyYWlzZXM7CisgICAgJHJldCA9ICRyZXQgLiAiIHNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSA/IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS0+ZGVzZXJpYWxpemVkKCkgOiBqc051bGwoKTtc
biI7CisKKyAgICByZXR1cm4gJHJldDsKK30KKwogc3ViIGNlaWxpbmdUb1Bvd2VyT2YyCiB7CiAg
ICAgbXkgKCRzaXplKSA9IEBfOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KaW5kZXggZTI0OWNhYWEzZGFhZDM5ZmI1N2ZkZDA2MTc3ZDM5NWY3MmI1MTdhMS4u
YTYxMjA0YzllOTAxZWNjMDc1YWRhODczMjMyZWExMTlhNDE5MDZjNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMTkwLDE3ICsxMTkwLDE5IEBA
IEVORAogCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUiKSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCJ9ID0gMTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9v
bCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9
IGZhbHNlO1xuIikgaWYgKCRyYWlzZXNFeGNlcHRpb25zKTsKICAgICAgICAgfSBlbHNpZiAoQmFz
aWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9T2s7XG4iKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdldE5h
dGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIsICRwYXJhbUluZGV4KSAuICIgJHBhcmFt
ZXRlck5hbWUgPSAiKTsKIAotICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkcmFpc2VzRXhjZXB0aW9ucykgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFy
Z3NbJHBhcmFtSW5kZXhdLCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlk
VGhyb3cpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRl
ci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgeworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91dFRo
cm93aW5nKGFyZ3NbJHBhcmFtSW5kZXhdKTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIs
ICJhcmdzWyRwYXJhbUluZGV4XSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikg
PyAgIiR7cGFyYW1ldGVyTmFtZX1PayIgOiB1bmRlZikgLiAiO1xuIik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKaW5kZXggNjVi
YzlmMzZlZTM2ZTI0MjVlNDY0ZTcwYTBkNjBkYmY1MzQ5ZDNhNS4uZDg4MTQ3Y2NhOWNiZDk3YjMz
YTU5ZjQ4M2IxOWJkN2ZiMGZhODBjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApAQCAtNTQxLDEyICs1NDEsNDEgQEAgV2Vi
RE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhy
b3dzKGNvbnN0IFdlYkRPTVN0cmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkRP
TVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRB
cmcpCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb25zdCBXZWJE
T01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCiB7CiAgICAgaWYgKCFpbXBsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGltcGwoKS0+c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2VyaWFsaXplZFZh
bHVlUmFpc2VzKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6
OlN0cmluZyhzZXJpYWxpemVkQXJnKSksIGVjKTsKKyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRp
Y19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9i
ajo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRB
cmcpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+
c2VyaWFsaXplZFZhbHVlTm9SYWlzZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKK30KKworV2ViRE9NU3RyaW5n
IFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpCit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkRPTVN0cmluZyByZXN1bHQgPSB0b1dlYktp
dChXVEY6OmdldFB0cihpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhlYykpKTsK
KyAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVj
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6
OnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKQoreworICAgIGlmICghaW1wbCgpKQorICAg
ICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpn
ZXRQdHIoaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogdm9p
ZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDMzYmM3ZmJhNTli
MjNiZjBiMzkwNzMwNjIwMzhiNTU1ZTgyMzBmNTcuLmVlOTY5ZGI4YjI5ODJkMWNjYmI3MjZkNGRh
MzVjODczYTYxN2FjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaApAQCAtMTAwLDcgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgV2Vi
RE9NVGVzdE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJp
bmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBXZWJET01UZXN0
T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcs
IGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RU
aGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBj
b25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNv
bnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJpYWxpemVkVmFs
dWVSYWlzZXMoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICB2b2lkIHNl
cmlhbGl6ZWRWYWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsK
KyAgICBXZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCk7CisgICAgV2Vi
RE9NU3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKTsKICAgICB2b2lkIG1ldGhv
ZFdpdGhFeGNlcHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3Vz
dG9tTWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcs
IGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Jj
MTRkOGRmOTU0OTgzOWIxNGI3NzYwOGEyODY0NGYzYWVmMjUwNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcApA
QCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJET01UZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUg
IldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2Vi
RE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9ialByaXZhdGUgeworICAgIFdlYkRPTVRlc3RQ
T0RPYmpQcml2YXRlKFdlYkNvcmU6OlRlc3RQT0RPYmoqIG9iamVjdCA9IDApCisgICAgICAgIDog
aW1wbChvYmplY3QpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0UE9E
T2JqPiBpbXBsOworfTsKKworV2ViRE9NVGVzdFBPRE9iajo6V2ViRE9NVGVzdFBPRE9iaigpCisg
ICAgOiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKDApCit7Cit9CisKK1dlYkRPTVRlc3RQ
T0RPYmo6OldlYkRPTVRlc3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiogaW1wbCkKKyAgICA6
IFdlYkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRl
KGltcGwpKQoreworfQorCitXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqKGNvbnN0
IFdlYkRPTVRlc3RQT0RPYmomIGNvcHkpCisgICAgOiBXZWJET01PYmplY3QoKQoreworICAgIG1f
aW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRlKGNvcHkuaW1w
bCgpKSA6IDA7Cit9CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIFdlYkRPTVRlc3RQT0RPYmo6Omlt
cGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAw
OworfQorCitXZWJET01UZXN0UE9ET2JqOjp+V2ViRE9NVGVzdFBPRE9iaigpCit7CisgICAgZGVs
ZXRlIG1faW1wbDsKKyAgICBtX2ltcGwgPSAwOworfQorCitmbG9hdCBXZWJET01UZXN0UE9ET2Jq
OjpyZWFkT25seUZsb2F0QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKK30K
KworV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RQT0RPYmo6OnN0cmluZ0F0dHIoKSBjb25zdAorewor
ICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RyaW5nJj4oaW1wbCgpLT5zdHJpbmdB
dHRyKCkpOworfQorCit2b2lkIFdlYkRPTVRlc3RQT0RPYmo6OnNldFN0cmluZ0F0dHIoY29uc3Qg
V2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRyKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFN0cmluZ0F0dHIobmV3U3RyaW5nQXR0cik7Cit9
CisKK1dlYkNvcmU6OlRlc3RQT0RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0UE9ET2Jq
JiB3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKK30KKworV2ViRE9NVGVz
dFBPRE9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0UE9ET2JqKiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gV2ViRE9NVGVzdFBPRE9iaih2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTZlZTBl
OTVmYTU0YTAxMjc4MmZhMmZlZjIxOGZlOTRhMWJjNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouaApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0UE9ET2JqX2gKKyNkZWZpbmUgV2Vi
RE9NVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNpbmNsdWRlIDxX
ZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdFBPRE9iajsK
K307CisKKworY2xhc3MgV2ViRE9NVGVzdFBPRE9iaiA6IHB1YmxpYyBXZWJET01PYmplY3Qgewor
cHVibGljOgorICAgIFdlYkRPTVRlc3RQT0RPYmooKTsKKyAgICBleHBsaWNpdCBXZWJET01UZXN0
UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqKTsKKyAgICBXZWJET01UZXN0UE9ET2JqKGNvbnN0
IFdlYkRPTVRlc3RQT0RPYmomKTsKKyAgICB+V2ViRE9NVGVzdFBPRE9iaigpOworCisgICAgZmxv
YXQgcmVhZE9ubHlGbG9hdEF0dHIoKSBjb25zdDsKKyAgICBXZWJET01TdHJpbmcgc3RyaW5nQXR0
cigpIGNvbnN0OworICAgIHZvaWQgc2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmKTsK
KworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGltcGwoKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHN0cnVjdCBXZWJET01UZXN0UE9ET2JqUHJpdmF0ZTsKKyAgICBXZWJET01UZXN0UE9ET2Jq
UHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdFBPRE9iaiogdG9XZWJDb3JlKGNv
bnN0IFdlYkRPTVRlc3RQT0RPYmomKTsKK1dlYkRPTVRlc3RQT0RPYmogdG9XZWJLaXQoV2ViQ29y
ZTo6VGVzdFBPRE9iaiopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDVjOTM1
YzQ4MTA1ZGQ2MzQzMmRlNGE1Y2ZkYzJjN2MzOTBjMDE5MDIuLjYzN2U4Y2YyYTA5ZjMyMDA5YThh
NTViZGY3Y2FjOWQ2NzUzYTU4MmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9N
QmluZGluZy5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgpAQCAt
MTY0LDcgKzE2NSw3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNf
YWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzCiB9CiAKIHZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZykKK3dlYmtpdF9k
b21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcsIEdFcnJv
ciAqKmVycm9yKQogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpAQCAtMTcyLDcgKzE3Myw1MyBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZF9hcmcpOwog
ICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZXJpYWxpemVk
X2FyZyA9IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShj
b252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhjb252ZXJ0ZWRfc2VyaWFsaXpl
ZF9hcmcsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYzsKKyAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uKGVjLCBlY2Rlc2MpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRf
dmFsdWVfbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZXJpYWxpemVkX2FyZyk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnID0gV2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRf
YXJnKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7Cisg
ICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcp
OworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlcyhlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjOworICAgICAgICBXZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24oZWMsIGVjZGVzYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgcmVzID0g
c3RhdGljX2Nhc3Q8V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiA+KFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiAKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1
cm5fbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpKTsKKyAgICBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gcmVzOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDhkY2Q4YzMxZTMzNjNi
ZTcyNDhhMzc1YjU5NzJhNTE2OTcwMGMzOTcuLjA4ZDA1NWY4YTcxNjgyMDBmMmNmZDRjNmE1NDkz
NGYzMGU3M2IxMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC03MSw3ICs3MSwxNiBAQCBXRUJLSVRf
QVBJIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3Jl
cXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2NoYXIq
ICBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiAgb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpOwog
CiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBz
ZXJpYWxpemVkX2FyZyk7Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmFp
c2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogIHNlcmlhbGl6ZWRfYXJnLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX25vX3JhaXNlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRf
YXJnKTsKKworV0VCS0lUX0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIAord2Vi
a2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFs
dWVfcmV0dXJuX25vX3JhaXNlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiBXRUJLSVRfQVBJ
IHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYzNGQ5Mzk2YmZmNDVmNzkwM2U3YWUzODQ2MDRlNDVjZGQxMjE0ODgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RQT0RPYmouY3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgi
CisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvV2ViS2l0RE9NVGVzdFBPRE9iai5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0
UE9ET2JqUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3
ZWJraXRwcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorZ3BvaW50ZXIga2l0
KFdlYkNvcmU6OlRlc3RQT0RPYmoqIG9iaikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChv
YmosIDApOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBET01PYmplY3RDYWNoZTo6cHV0
KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdFBPRE9iaihvYmopKTsKK30KKyAgICAKK30gLy8gbmFtZXNw
YWNlIFdlYktpdCAvLworCitnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9yZWFk
X29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKKyAg
ICByZXR1cm4gcmVzOworfQorCitnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqICByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0
dHIoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X3BvZF9v
Ympfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYsIGdjaGFyKiAgdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKwor
CitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RQT0RPYmosIHdlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
Q29yZTo6VGVzdFBPRE9iaiogY29yZShXZWJLaXRET01UZXN0UE9ET2JqKiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVz
dFBPRE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmoqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9SRUFE
X09OTFlfRkxPQVRfQVRUUiwKKyAgICBQUk9QX1NUUklOR19BVFRSLAorfTsKKworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2Jq
ZWN0KTsKKyAgICAKKyAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgeworICAgICAgICBX
ZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dFBPRE9iaiAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRl
cmVmKCk7CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQor
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3Bv
ZF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYgPSBX
RUJLSVRfRE9NX1RFU1RfUE9EX09CSihvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoq
IGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJvcF9pZCkgewor
ICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRT
dHJpbmdBdHRyKFdlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X3BvZF9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERPTVRlc3RQT0RPYmoqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFU1RfUE9EX09CSihvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNv
cmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAg
IGNhc2UgUFJPUF9SRUFEX09OTFlfRkxPQVRfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVf
c2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+cmVhZE9ubHlGbG9hdEF0dHIoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxm
LT5zdHJpbmdBdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9wb2Rfb2JqX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAg
IGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3Bv
ZF9vYmpfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0UE9ET2Jq
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0
X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rl
c3RfcG9kX29ial9jb25zdHJ1Y3RlZDsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9SRUFEX09OTFlfRkxPQVRfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgicmVhZC1vbmx5LWZsb2F0LWF0dHIiLCAvKiBuYW1l
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X3BvZF9vYmpfcmVhZC1vbmx5LWZsb2F0LWF0dHIiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnZmxvYXQgVGVzdFBPRE9iai5yZWFkLW9ubHktZmxv
YXQtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYg
aGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtR19NQVhGTE9BVCwgLyogbWluICovCitHX01BWEZMT0FULCAvKiBtYXggKi8K
KzAuMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSU5HX0FUVFIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJpbmctYXR0ciIsIC8q
IG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3RfcG9kX29ial9zdHJpbmctYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0
aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZWFkLXdyaXRlICBnY2hhciogIFRlc3RQT0RPYmouc3RyaW5nLWF0dHIiLCAv
KiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiIsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfaW5pdChXZWJLaXRET01UZXN0UE9E
T2JqKiByZXF1ZXN0KQoreworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRlc3RQ
T0RPYmoqIHdyYXBUZXN0UE9ET2JqKFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVPYmplY3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBj
YWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3
ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmpl
Y3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1h
dGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICBy
ZXR1cm4gIFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9E
T01fVEVTVF9QT0RfT0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZlYWMzZWMxNzA1
MTFlNjFhYjU3ZjFmNmQ1ZTc0MmQwMWJiYTkxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFBPRE9iai5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01U
ZXN0UE9ET2JqX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdFBPRE9ial9oCisKKyNpbmNsdWRlICJ3
ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5oIgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
T2JqZWN0LmgiCisKKworR19CRUdJTl9ERUNMUworI2RlZmluZSBXRUJLSVRfVFlQRV9ET01fVEVT
VF9QT0RfT0JKICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkos
IFdlYktpdERPTVRlc3RQT0RPYmopKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfUE9EX09CSl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
VFlQRV9ET01fVEVTVF9QT0RfT0JKLCBXZWJLaXRET01UZXN0UE9ET2JqQ2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9QT0RfT0JKKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkopKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1RFU1RfUE9EX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX1BPRF9PQkpfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSiwgV2ViS2l0
RE9NVGVzdFBPRE9iakNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXN0UE9ET2JqIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01UZXN0UE9ET2JqQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF90
eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2Jq
X2dldF9yZWFkX29ubHlfZmxvYXRfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmKTsKKwor
V0VCS0lUX0FQSSBnY2hhciogCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV90ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RQT0RPYmoqIHNl
bGYsIGdjaGFyKiAgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9N
VGVzdFBPRE9ial9oICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmM5NWU3MWQ3ZmRiZmNiODdjZWY1MDk4NjE0M2U1NWQ3ZWMxNzMxZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdFBPRE9ialByaXZhdGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9QT0RfT0JKX1BSSVZBVEVfSAorI2RlZmlu
ZSBXRUJfS0lUX0RPTV9URVNUX1BPRF9PQkpfUFJJVkFURV9ICisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlICJU
ZXN0UE9ET2JqLmgiCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICBXZWJLaXRET01UZXN0UE9ET2Jq
ICoKKyAgICB3cmFwVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqICpjb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKgorICAgIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9i
aiAqcmVxdWVzdCk7CisKKyAgICBncG9pbnRlcgorICAgIGtpdChXZWJDb3JlOjpUZXN0UE9ET2Jq
KiBub2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXRUJfS0lUX0RP
TV9URVNUX1BPRF9PQkpfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCAzNjA3ODJkODY4ZjVhZGIwMTFlYzczMzgwNmY0
MjBhMTAzYWEyNWY1Li4yNzM0ZDhkZDE5YThkOGRjNGQxMjkxNmNjYjcwZWY1MDQ0N2M1NDdlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAg
LTE0NCw3ICsxNDQsNyBAQCBib29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19H
RU5FUkFUT1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0gPQorc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMzXSA9CiB7CiAgICAgeyAi
dm9pZE1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpLCAo
aW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ2b2lkTWV0aG9kV2l0aEFy
Z3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MpLCAo
aW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE1NCw3ICsxNTQsMTAgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMw
XSA9CiAgICAgeyAib2JqTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PYmpNZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKSwgKGludHB0cl90KTIgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJz
ZXJpYWxpemVkVmFsdWUiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWUpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzZXJpYWxp
emVkVmFsdWVSYWlzZXMiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVk
VmFsdWVSYWlzZXMpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJz
ZXJpYWxpemVkVmFsdWVOb1JhaXNlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlTm9SYWlzZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAor
ICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyksIChpbnRwdHJfdCkwIFRIVU5L
X0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UiLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNl
KSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aEV4
Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRp
b24pLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRo
b2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QpLCAoaW50cHRy
X3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2RXaXRoQXJncyIs
IERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGlu
dHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNzksNyArMTgyLDcgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9
CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJM
RSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDY5LCA2MywgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhh
c2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTMxLCAxMjcsIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlw
ZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNzg0LDE5ICs3ODcs
NjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVz
dE9iajo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogCi0gICAgaW1wLT5zZXJpYWxpemVkVmFs
dWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2VyaWFs
aXplZEFyZywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZU5vUmFp
c2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNf
aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhleGVj
LCBleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2Uo
c2VyaWFsaXplZEFyZyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisKKworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNl
cyhlYyk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICBlYyA/IGpzVW5kZWZpbmVkKCkgOiAg
c2VyaWFsaXplZFNjcmlwdFZhbHVlID8gc2VyaWFsaXplZFNjcmlwdFZhbHVlLT5kZXNlcmlhbGl6
ZWQoKSA6IGpzTnVsbCgpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuTm9S
YWlzZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6
c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisKKworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFp
c2UoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA/
IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS0+ZGVzZXJpYWxpemVkKCkgOiBqc051bGwoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgK
aW5kZXggM2IyMWM4NTYwMWMwYTM3YjdjZGZmZjFlZTVmYTM2MTQxMjhhNDY3MC4uMDFkNzQ0OTI0
MjVkZjFiN2Y2NmFiNjMzNTEyNmNiOTJmMmZiNGYxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTk0LDcgKzk0LDEwIEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhv
ZChKU0M6OkV4ZWNTCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXpl
ZFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSYWlzZXMoSlNDOjpF
eGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoSlNDOjpFeGVjU3RhdGUqKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGNlODg0NGJjOTA3N2E2ZDUwZjJlOGYwODgyMzg5YjMyMzk3OTExNgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5j
cHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFBPRE9iai5oIgorCisjaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTTnVtYmVyQ2Vs
bC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RQT0RPYmopOworCisvKiBIYXNoIHRhYmxlICov
CisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBn
ZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5k
aWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFBPRE9ialRhYmxlVmFsdWVz
WzRdID0KK3sKKyAgICB7ICJyZWFkT25seUZsb2F0QXR0ciIsIERvbnREZWxldGUgfCBSZWFkT25s
eSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RQT0RPYmpSZWFkT25seUZsb2F0QXR0ciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAorICAgIHsgInN0cmluZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFBPRE9ialN0cmluZ0F0dHIpLCAo
aW50cHRyX3Qpc2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
KyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0UE9ET2JqQ29uc3RydWN0
b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7IDAsIDAsIDAsIDAg
VEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBUSFVOS19HRU5FUkFUT1IKK3N0YXRp
YyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RQT0RPYmpUYWJsZSA9IHsgOCwg
NywgSlNUZXN0UE9ET2JqVGFibGVWYWx1ZXMsIDAgfTsKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0
cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0
b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFBPRE9iakNv
bnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5F
UkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05T
VF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGUgPSB7IDEs
IDAsIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK2NsYXNzIEpTVGVz
dFBPRE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6
SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rv
ck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0UE9E
T2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RQT0RPYmpDb25zdHJ1Y3RvciIsIDAsICZK
U1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCAwIH07CisKK0pTVGVzdFBPRE9iakNvbnN0cnVj
dG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU1Rlc3RQ
T0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJv
dG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCitib29sIEpTVGVzdFBPRE9i
akNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yLCBET01PYmplY3Q+
KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworfQorCitib29sIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4
ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKyNpZiBFTkFC
TEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgor
I2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9ET2JqUHJvdG90eXBlVGFibGVWYWx1ZXNb
MV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdFBPRE9ialByb3RvdHlwZVRhYmxlID0geyAxLCAwLCBKU1Rlc3RQT0RPYmpQcm90b3R5
cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9ialByb3RvdHlw
ZTo6c19pbmZvID0geyAiVGVzdFBPRE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RQT0RPYmpQcm90
b3R5cGVUYWJsZSwgMCB9OworCitKU09iamVjdCogSlNUZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxm
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFBPRE9iaj4oZXhlYywgZ2xvYmFsT2JqZWN0KTsK
K30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9iajo6c19pbmZvID0geyAiVGVzdFBPRE9i
aiIsIDAsICZKU1Rlc3RQT0RPYmpUYWJsZSwgMCB9OworCitKU1Rlc3RQT0RPYmo6OkpTVGVzdFBP
RE9iaihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQ
T0RPYmo+ID4gaW1wbCkKKyAgICA6IERPTU9iamVjdFdpdGhHbG9iYWxQb2ludGVyKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pbXBsKGltcGwpCit7Cit9CisKK0pTVGVzdFBPRE9i
ajo6fkpTVGVzdFBPRE9iaigpCit7CisgICAgZm9yZ2V0RE9NT2JqZWN0KHRoaXMsIGltcGwoKSk7
Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmo6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIG5ldyAo
ZXhlYykgSlNUZXN0UE9ET2JqUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgSlNUZXN0UE9ET2JqUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkp
OworfQorCitib29sIEpTVGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RQT0RPYmosIEJhc2U+KGV4
ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwor
Ym9vbCBKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0
UE9ET2JqLCBCYXNlPihleGVjLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRoaXMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNUZXN0UE9ET2JqUmVhZE9ubHlGbG9hdEF0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikK
K3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RP
YmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBU
ZXN0UE9ET2JqIGltcCgqY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
ICBqc051bWJlcihleGVjLCBpbXAucmVhZE9ubHlGbG9hdEF0dHIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0UE9E
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdFBPRE9iaiBpbXAoKmNh
c3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSAganNTdHJpbmcoZXhlYywg
aW1wLnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rl
c3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNv
bnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdFBPRE9iaiogZG9tT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICByZXR1cm4gSlNU
ZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgp
KTsKK30KK3ZvaWQgSlNUZXN0UE9ET2JqOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRoaXMsIHNsb3QpOworfQorCit2b2lkIHNl
dEpTVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBKU1NWR1BPRFR5cGVX
cmFwcGVyPFRlc3RQT0RPYmo+ICogaW1wID0gc3RhdGljX2Nhc3Q8SlNTVkdQT0RUeXBlV3JhcHBl
cjxUZXN0UE9ET2JqPiAqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIFRlc3RQT0RPYmogcG9k
SW1wKCppbXApOworICAgIHBvZEltcC5zZXRTdHJpbmdBdHRyKHZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wLT5jb21taXRDaGFuZ2UocG9kSW1wLCBjYXN0
ZWRUaGlzKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RQT0RPYmo6OmdldENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBvYmplY3QsIFNWR0VsZW1lbnQq
IGNvbnRleHQpCit7CisgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNUZXN0UE9ET2Jq
LCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4oZXhlYywgZ2xvYmFsT2JqZWN0LCBv
YmplY3QsIGNvbnRleHQpOworfQorVGVzdFBPRE9iaiB0b1Rlc3RQT0RPYmooSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0UE9ET2JqOjpzX2lu
Zm8pID8gKFRlc3RQT0RPYmopICpzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihhc09iamVjdCh2
YWx1ZSkpLT5pbXBsKCkgOiBUZXN0UE9ET2JqKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRlNGZmZWJh
NTQzMWI1Yzg5OGYxOTUxOWM1NDI1NjlmODM2YzdlOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1Rlc3RQT0RPYmpfaAorI2Rl
ZmluZSBKU1Rlc3RQT0RPYmpfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVj
dFdpdGhHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdFBPRE9iaiA6IHB1YmxpYyBE
T01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciB7CisgICAgdHlwZWRlZiBET01PYmplY3RXaXRoR2xv
YmFsUG9pbnRlciBCYXNlOworcHVibGljOgorICAgIEpTVGVzdFBPRE9iaihOb25OdWxsUGFzc1Jl
ZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxKU1NW
R1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4pOworICAgIHZpcnR1YWwgfkpTVGVzdFBPRE9i
aigpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cisg
ICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5v
bnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIEpT
U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8
VGVzdFBPRE9iaj4gPiBtX2ltcGw7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+
KiwgU1ZHRWxlbWVudCopOworVGVzdFBPRE9iaiB0b1Rlc3RQT0RPYmooSlNDOjpKU1ZhbHVlKTsK
KworY2xhc3MgSlNUZXN0UE9ET2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
IEJhc2U7CitwdWJsaWM6CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlND
OjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90
Q291bnQpOworICAgIH0KKyAgICBKU1Rlc3RQT0RPYmpQcm90b3R5cGUoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3Ry
dWN0dXJlKSA6IEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKKy8vIEF0dHJpYnV0ZXMKKwor
SlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9ialJlYWRPbmx5RmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBj
b25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgK
aW5kZXggZDg4NjJkYTE1ZWFjNGU4MWEyZWIxMWFiZWEzYTA1ZDMzZmIyYzFiYi4uNzgzYTI2NzEx
YjJmMjVkNGFjNmVmMmYxYmJhODQ3NDRkN2QxY2QxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTk4LDcgKzk4LDEwIEBACiAtIChE
T01UZXN0T2JqICopb2JqTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmlu
ZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0T2JqICop
bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnczooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01U
ZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFy
ZzsKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7Cist
ICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwor
LSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmc7
CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlczsKKy0gKE5TU3RyaW5n
ICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZTsKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2Vw
dGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRob2RXaXRoQXJn
czooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9i
aiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2OWZiOTZhNDBmNDE0OWQ4MDU5NGNlZjdkZmI4
Li4xOTc5YTM4YmNlOTVmZmYwOTc0NWM4MWE3N2RiYWY1MzgyNDBiNTY1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC00NDUsMTAg
KzQ0NSwzMyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKHZvaWQpc2VyaWFsaXplZFZh
bHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKKy0gKHZvaWQpc2VyaWFsaXplZFZhbHVlUmFp
c2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJn
KSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIElNUEwtPnNlcmlh
bGl6ZWRWYWx1ZVJhaXNlcyhXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShX
ZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpLCBlYyk7CisgICAgV2ViQ29yZTo6cmFpc2VP
bkRPTUVycm9yKGVjKTsKK30KKworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNlOihOU1N0
cmluZyAqKXNlcmlhbGl6ZWRBcmcKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgSU1QTC0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykp
KTsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTlNTdHJpbmcgKnJlc3VsdCA9IGtpdChXVEY6OmdldFB0
cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKSk7CisgICAgV2ViQ29yZTo6
cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1N0cmlu
ZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT5z
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogLSAodm9pZCltZXRob2RXaXRo
RXhjZXB0aW9uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNDU2YTY2Yzc1Zjk0YmViMDE2MGE3NzdjOGM5MGFk
MGI5YjcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RQT0RPYmouaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0u
d2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4K
KworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVT
VAorCitAY2xhc3MgTlNTdHJpbmc7CisKK0BpbnRlcmZhY2UgRE9NVGVzdFBPRE9iaiA6IERPTU9i
amVjdAorLSAoZmxvYXQpcmVhZE9ubHlGbG9hdEF0dHI7CistIChOU1N0cmluZyAqKXN0cmluZ0F0
dHI7CistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3RyaW5nICopbmV3U3RyaW5nQXR0cjsKK0Bl
bmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RQT0RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RQT0RPYmoubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY1YjUxZDM5MTQwZmU2OGEyYjM0NDFlYmI4
NGIwMWU0MmVmNDlkMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iai5tbQpAQCAtMCwwICsxLDk4IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJET01UZXN0UE9ET2JqLmgiCisKKyNpbXBvcnQgIkRPTUJsb2JJbnRl
cm5hbC5oIgorI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NW
YWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJE
T01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgorI2lt
cG9ydCAiRE9NVGVzdFBPRE9iakludGVybmFsLmgiCisjaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVy
cy5oIgorI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW1wb3J0ICJLVVJMLmgi
CisjaW1wb3J0ICJUZXN0UE9ET2JqLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9y
dCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViQ29yZTo6VGVzdFBPRE9iaio+KF9pbnRlcm5hbCkKKworQGltcGxlbWVudGF0aW9uIERP
TVRlc3RQT0RPYmoKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2No
ZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtET01UZXN0UE9ET2JqIGNsYXNzXSwgc2VsZikp
CisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBJTVBMOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAgIGRlbGV0ZSBJTVBMOworICAgIFtzdXBl
ciBmaW5hbGl6ZV07Cit9CisKKy0gKGZsb2F0KXJlYWRPbmx5RmxvYXRBdHRyCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5yZWFk
T25seUZsb2F0QXR0cigpOworfQorCistIChOU1N0cmluZyAqKXN0cmluZ0F0dHIKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnN0
cmluZ0F0dHIoKTsKK30KKworLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5ld1N0
cmluZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgSU1QTC0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRyKTsKK30KKworQGVuZAorCitXZWJD
b3JlOjpUZXN0UE9ET2JqIGNvcmUoRE9NVGVzdFBPRE9iaiAqd3JhcHBlcikKK3sKKyAgICByZXR1
cm4gd3JhcHBlciA/ICpyZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmoqPih3cmFw
cGVyLT5faW50ZXJuYWwpIDogV2ViQ29yZTo6VGVzdFBPRE9iaigpOworfQorCitET01UZXN0UE9E
T2JqICpraXQoV2ViQ29yZTo6VGVzdFBPRE9iaiB2YWx1ZSkKK3sKKyAgICB7IERPTV9BU1NFUlRf
TUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRPbmUoKTsgfTsK
KyAgICBET01UZXN0UE9ET2JqICp3cmFwcGVyID0gW1tET01UZXN0UE9ET2JqIGFsbG9jXSBfaW5p
dF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJ
bnRlcm5hbCo+KG5ldyBXZWJDb3JlOjpUZXN0UE9ET2JqKHZhbHVlKSk7CisgICAgcmV0dXJuIFt3
cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9iakludGVybmFsLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmpJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0
Y2ViMGNkYjNjZGUzYzQ3NGFlMWM0ZTNjNTQ0OTk2OGMwOWZkMGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmpJbnRlcm5h
bC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxXZWJDb3JlL0RPTVRlc3RQT0RPYmouaD4KKworI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExP
V0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
Y2xhc3MgVGVzdFBPRE9iajsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiBjb3JlKERPTVRlc3RQ
T0RPYmogKik7CitET01UZXN0UE9ET2JqICpraXQoV2ViQ29yZTo6VGVzdFBPRE9iaik7CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCBlZjRk
YjEwNmYwNzQ2NmY4NDI1OTQxNGQ4OWQ5ZDA0OWY2OTg0MjIyLi4zN2Q1MThlZjEyYjg1NmU2Mjk3
YmVmNWUwODZjMTE2ZmY5MjU2YmRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0CisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKICAqCkBAIC0xMCwxMiArMTAsOSBA
QAogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAogICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKQEAgLTYyLDcgKzU5LDExIEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgW1Jl
cXVpcmVzQWxsQXJndW1lbnRzPVJhaXNlXSBUZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3MoaW4gRE9NU3RyaW5nIHN0ckFyZywgaW4gVGVzdE9iaiBvYmpBcmcpCiAgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotICAgICAgICB2b2lkIHNlcmlhbGl6ZWRW
YWx1ZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZEFyZyk7CisgICAgICAgIC8v
IFRlc3QgdmFyaW91cyBmb3JtcyBvZiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisgICAgICAgIHZv
aWQgc2VyaWFsaXplZFZhbHVlUmFpc2VzKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxp
emVkQXJnKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFs
dWVOb1JhaXNlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAg
ICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcygpIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFs
aXplZFZhbHVlUmV0dXJuTm9SYWlzZSgpOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbnMKICAgICAg
ICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQz
NmM0YWQ1NDE3N2Y5Yzg0NmU1OGFhNDEwOWZlMzA0NDM4ODY3NDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UE9ET2JqLmlkbApAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJp
bmRpbmdzIGNvZGUgZ2VuZXJhdG9yIGFuZCBmb3IgdHJhY2tpbmcKKy8vIGNoYW5nZXMgaW4gaXRz
IG91cHV0LgorbW9kdWxlIHRlc3QgeworICAgIGludGVyZmFjZSBbUE9EVHlwZT1UZXN0UE9ET2Jq
XSBUZXN0UE9ET2JqIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0ICAgICAgICAg
IHJlYWRPbmx5RmxvYXRBdHRyOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgc3RyaW5nQXR0cjsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGE1NGFlMzQwOTUzNzQw
NDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uY2MwOWQ1ZTZhZWVlMWJlZTIzNmI2YzM4OTBjNzIw
NjVhZTFiZTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwCkBAIC01NjEsMTggKzU2MSw1OCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2OAog
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAotc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSYWlz
ZXNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlIik7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5zZXJpYWxpemVkVmFsdWVSYWlzZXMiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IHsKICAgICBib29sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyA9IGZhbHNlOwogICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShhcmdzWzBdLCBzZXJpYWxpemVkQXJnRGlkVGhyb3cpOwogICAgIGlmIChzZXJp
YWxpemVkQXJnRGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
aW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVk
VmFsdWVSYWlzZXMoc2VyaWFsaXplZEFyZywgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisg
ICAgICAgIGdvdG8gZmFpbDsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cisg
ICAgfQorICAgIGZhaWw6CisgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gc2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVO
b1JhaXNlIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJn
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoYXJnc1swXSk7
CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKHNlcmlhbGl6ZWRBcmcpOworICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZh
bHVlUmV0dXJuUmFpc2VzIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0gaW1wLT5zZXJpYWxpemVkVmFs
dWVSZXR1cm5SYWlzZXMoZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8g
ZmFpbDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKS0+ZGVzZXJpYWxpemUoKTsKKyAgICB9
CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1
ZVJldHVybk5vUmFpc2UiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVybk5v
UmFpc2UoKS0+ZGVzZXJpYWxpemUoKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKQEAg
LTk0Niw3ICs5ODYsMTAgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2Fs
bGJhY2tzW10gPSB7CiAgICAgeyJ2b2lkTWV0aG9kIiwgVGVzdE9iakludGVybmFsOjp2b2lkTWV0
aG9kQ2FsbGJhY2t9LAogICAgIHsiaW50TWV0aG9kIiwgVGVzdE9iakludGVybmFsOjppbnRNZXRo
b2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhv
ZENhbGxiYWNrfSwKLSAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2Vy
aWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmFpc2VzIiwgVGVz
dE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSYWlzZXNDYWxsYmFja30sCisgICAgeyJzZXJp
YWxpemVkVmFsdWVOb1JhaXNlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVOb1Jh
aXNlQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzIiwgVGVzdE9i
akludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXNDYWxsYmFja30sCisgICAgeyJz
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVk
VmFsdWVSZXR1cm5Ob1JhaXNlQ2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIs
IFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7ImN1
c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiY3Vz
dG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJh
Y2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9i
ai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThmNmIwZWVmYmI1YTExOTYxNTE0MDYzNjJmNzJl
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0UE9ET2JqLmgiCisKKyNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0UE9ET2JqOjppbmZvID0geyBW
OFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0LCAwIH07
CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVh
ZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RQT0RP
YmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOworICAgIFRlc3RQT0RPYmoqIGltcCA9IFY4VGVz
dFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6
Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7CisgICAgVGVzdFBPRE9iaiogaW1wID0gVjhUZXN0
UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFBP
RE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0UE9ET2JqKiBpbXAgPSBWOFRlc3RQT0RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hl
Y2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0cmluZ0F0dHIodik7CisgICAgcmV0dXJuOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJzW10gPSB7CisgICAgLy8gQXR0cmlidXRlICdy
ZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnJlYWRPbmx5
RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmlu
Z0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVy
LCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVG
QVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8q
IG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJl
PiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RQT0RPYmoi
LCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0UE9ET2JqOjpp
bnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RQT0RPYmpBdHRycywgc2l6ZW9mKFRlc3RQ
T0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RPYmpBdHRycyksCisgICAgICAgIDAsIDApOwor
ICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdl
dFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJldHVybiBkZXNj
OworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2Jq
OjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdDYWNoZSA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0NhY2hlOworfQorCit2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSgpCit7CisgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpD
YWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOwor
ICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsKK30KKworVjhTVkdQT0RUeXBlV3JhcHBlcjxU
ZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOFNWR1BPRFR5cGVXcmFw
cGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9vbCBWOFRlc3RQT0RPYmo6Okhhc0luc3Rh
bmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3VGVt
cGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4qIGlt
cGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworICAgIFY4UHJveHkq
IHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBs
KTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB3
cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
cHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgZ2V0RE9NT2JqZWN0TWFw
KCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBpbXBsKQoreworICAgIHJl
dHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChW
OFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9iajo6d3Jh
cChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVj
dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+Kj4o
b2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2MmE3ZWQ5OGYzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmgKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYgVjhUZXN0UE9ET2JqX2gK
KyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVk
ZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXI7
CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBIYXNJ
bnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKKyAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7Cisg
ICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+KiB0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+Kik7CisgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4qKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4gPik7Cit9
CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDQ3YzRjMmUyM2ViZjE5ZjZlNjU1M2E2NmVkN2Ix
MWIzMzEwYjNjODYuLjVjNTQ1MGVjODY4ZDc5YTMxZDE0NmQyYTMyOTA5ZWVlYmYwZjU1YzMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEw
MjQsMTMgKzEwMjQsMjQgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXpl
QW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmoKIAogUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2NyaXB0VmFsdWUgPSBhZG9wdFJlZihuZXcg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKHNjcmlwdFZhbHVlLT5tX2Rh
dGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VSUik7Cisg
ICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlkVGhyb3cgPSBm
YWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAgIGJvb2wgZGlkVGhyb3c7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7
CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlkVGhyb3cpOworfQorCitQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0
VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CiB9CiAKIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKFN0cmluZyBkYXRhKQpAQCAtMTA1OSwxNyArMTA3MCwxMiBAQCBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7Ci0gICAgZGlkVGhyb3cgPSBmYWxz
ZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNlcmlhbGl6ZXIgc2VyaWFsaXplcih3cml0ZXIp
OwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKSB7Ci0gICAgICAgIHRocm93
RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAgICBkaWRUaHJvdyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVy
LmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSkKKyAgICAgICAg
bV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CiB9CiAKIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdE
YXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2NTBlYTUwOGIwMmI0N2U5ZTBkMi4uYjVmNWY1
NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2JlOGM4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHxkaWRUaHJvd3wg
aXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdyk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdp
cmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAgICBi
b29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc051bGwoKTsg
fQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2YWx1ZSAoaW4gdGhlIGN1cnJlbnQgY29udGV4
dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAgICAgLy8gY2FzZSBvZiBmYWlsdXJlLgogICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlhbGl6ZSgpOwpAQCAtNjgsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKLSAgICBTZXJp
YWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBib29sJiBkaWRUaHJvdyk7
CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVl
Pik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRhTW9k
ZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Q
b3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IGI5
YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFjNzlkMTA5YzguLjc5MmZiMzRkZmI2MDU0NjNk
MTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRl
RXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCkBAIC0zNyw4ICsz
Nyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewogfQogICAgIAotdm9pZCBQb3BTdGF0ZUV2ZW50
Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
dGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMsIHRydWUpOwogICAgIGlmIChkaXNwYXRjaGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAppbmRleCAyZmI4ZDA2ODVi
ZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIyLi43MTFmMGI1ZGFhOWI5NzAwOWI5NjFjMWE5
YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgK
KysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHN0YXRlT2JqZWN0
KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgIGJv
b2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0
KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBiL1dl
YkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmluZGV4IGFkYzkwNzRlYzRmZWIwNzAwODc2NzNm
NmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdiZDA5YTY1ODVmOWMyZjU4MDBlYjMyMGM4MTYz
ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCisrKyBiL1dlYkNv
cmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0yOSw5ICsyOSw5IEBAIG1vZHVsZSBldmVudHMg
ewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIGludGVy
ZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lkIGluaXRQb3BTdGF0ZUV2
ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGVBcmcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdGF0ZUFyZykgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdl
dHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62810</attachid>
            <date>2010-07-28 04:29:47 -0700</date>
            <delta_ts>2011-01-12 14:19:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40835-20100728122943.patch</filename>
            <type>text/plain</type>
            <size>105934</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzODcxMzI3NzE0MWY1OGExMGRhYzIyYjEyODQ2YWE2NzM5NDI2NzdhLi45ZWVkMTM3
ZjUzYzgxYTY3YmU0YmM2OWUyZDdkYzU1Zjc2Y2I1NTZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTAtMDYtMjIgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgdGhyb3dpbmcgYmVoYXZpb3Igb2YgU2VyaWFsaXplZFNjcmlwdFZhbHVlIHRvIGJlIHNwZWNp
ZmllZCBpbiB0aGUgSURMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDA4MzUKKworICAgICAgICBBZGRzIHRlc3RzIGZvciBJbmRleGVkRGF0YWJhc2Ug
YW5kIFBvcFN0YXRlRXZlbnQgdG8gZW5zdXJlIHRoZXkgZm9sbG93IHRoZSBJREwgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
aW5pdHBvcHN0YXRlZXZlbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFs
dWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3No
YXJlZC5qczoKKyAgICAgICAgKHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUV4cGVjdGVk
RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MpOgorICAg
ICAgICAob3BlblN1Y2Nlc3MpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDctMjggIEplcmVt
eSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRpbmcgQ2hyb21p
dW0gdGVzdCBleHBlY3RhdGlvbnMgdG8gZXhwZWN0IDggdGVzdHMgdG8gZmFpbCBzaW5jZQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0
ZWV2ZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0
cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM3Y2QyNjc3YTRh
YmNmMjkwMDcyNzI1MDQzNWE3ZTg4YWRmNDA2NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9pbml0cG9wc3RhdGVldmVudC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw3IEBACitUaGlzIHRlc3Q6CistIENoZWNrcyB0aGF0IGluaXRQb3BTdGF0
ZUV2ZW50IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBzdGF0ZUFyZyBjYW4ndCBiZSBzZXJpYWxp
emVkLgorLSBQcmludHMgVEVTVCBDT01QTEVURSB3aGVuIGRvbmUuCitQQVNTIHNlcmlhbGl6ZWQg
c2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciB1bmRlZmluZWQuCitQQVNTIHNlcmlh
bGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciBlbXB0eSBhcnJheS4KK1BB
U1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgdGhyZXcgYW4gZXhjZXB0aW9uIGR1ZSB0byBhIGN5
Y2xlLgorVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
c3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci9zdGF0ZW9iamVjdHMvaW5pdHBvcHN0YXRlZXZlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWNh
ZWQ1YjI0M2Q5NTg4Yjg0M2U2OTEzNTZmYTk2NzM4OTcxYjQyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL2luaXRwb3BzdGF0ZWV2ZW50Lmh0
bWwKQEAgLTAsMCArMSw0NCBAQAorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyh0eHQpCit7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZ2dlciIpLmlubmVySFRNTCArPSB0eHQgKyAiPGJy
PiI7Cit9CisKK2Z1bmN0aW9uIHN0YXRlUG9wcGVkKCkKK3sKKyAgICBldmVudC5pbml0UG9wU3Rh
dGVFdmVudCgidGVzdCIsIHRydWUsIHRydWUsIHVuZGVmaW5lZCk7CisgICAgbG9nKCJQQVNTIHNl
cmlhbGl6ZWQgc2NyaXB0IHZhbHVlIHdpdGhvdXQgZXhjZXB0aW9uIGZvciB1bmRlZmluZWQuIik7
CisgICAgdmFyIGEgPSB7fTsKKyAgICBldmVudC5pbml0UG9wU3RhdGVFdmVudCgidGVzdCIsIHRy
dWUsIHRydWUsIGEpOworICAgIGxvZygiUEFTUyBzZXJpYWxpemVkIHNjcmlwdCB2YWx1ZSB3aXRo
b3V0IGV4Y2VwdGlvbiBmb3IgZW1wdHkgYXJyYXkuIik7CisgICAgYS5jeWNsZSA9IGE7CisgICAg
dHJ5IHsKKyAgICAgIGV2ZW50LmluaXRQb3BTdGF0ZUV2ZW50KCJ0ZXN0IiwgdHJ1ZSwgdHJ1ZSwg
YSk7CisgICAgICBsb2coIkZBSUwgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24gZHVlIHRvIGEgY3ljbGUuIik7CisgICAgfSBjYXRjaCAoZXJyKSB7Cisg
ICAgICBsb2coIlBBU1Mgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgdGhyZXcgYW4gZXhjZXB0aW9u
IGR1ZSB0byBhIGN5Y2xlLiIpOworICAgIH0KKyAgICBsb2coIlRFU1QgQ09NUExFVEUiKTsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ucG9w
c3RhdGU9InN0YXRlUG9wcGVkKCk7Ij4KKzxwcmU+CitUaGlzIHRlc3Q6CistIENoZWNrcyB0aGF0
IGluaXRQb3BTdGF0ZUV2ZW50IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBzdGF0ZUFyZyBjYW4n
dCBiZSBzZXJpYWxpemVkLgorLSBQcmludHMgVEVTVCBDT01QTEVURSB3aGVuIGRvbmUuCis8L3By
ZT4KKzxwcmUgaWQ9ImxvZ2dlciI+PC9wcmU+Cis8c2NyaXB0PgoraGlzdG9yeS5yZXBsYWNlU3Rh
dGUoIkZpcnN0RW50cnkiLCBudWxsLCAiP0ZpcnN0RW50cnkiKTsKK2hpc3RvcnkucHVzaFN0YXRl
KCJTZWNvbmRFbnRyeSIsIG51bGwsICI/U2Vjb25kRW50cnkiKTsKK2hpc3RvcnkuYmFjaygpOwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWFkZC1zZXJpYWxp
emVkLXNjcmlwdC12YWx1ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBkNzU5ZTIwMWMyZDBm
ZDdhYjk1YTAzMGZjZDA2MDg1NWFlYzA5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK1Rlc3QgSW5kZXhlZERCJ3MgYWRkIHdpdGggU2VyaWFs
aXplZFNjcmlwdFZhbHVlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhl
ZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1
bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ2Fib3J0
JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUK
K0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworb3BlblN1Y2Nlc3MKK1N1Y2Nlc3Mg
ZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUn
IGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFT
UyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlz
IHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29u
ZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gZXZlbnQudGFy
Z2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQ
QVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK2RiID0g
ZXZlbnQucmVzdWx0CitkYi5jcmVhdGVPYmplY3RTdG9yZSgndGVzdCcpCitQQVNTICdvbnN1Y2Nl
c3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQor
UEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1
bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitjcmVhdGVPYmpl
Y3RTdG9yZVN1Y2Nlc3MKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2
ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdl
JyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNT
IGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQu
dGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQ
QVNTICdhYm9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGlu
IGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2
ZW50LnRhcmdldC5ET05FCisKK29iamVjdFN0b3JlID0gZXZlbnQucmVzdWx0CitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUu
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1hZGQtc2VyaWFsaXplZC1z
Y3JpcHQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTgzZGJmNjRhMTE1MDQyMGEyNTk3MjU0ZTRj
MWI3ZTI4ZDQ5ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTMg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12
YWx1ZS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRleCBlNTEwYmUxOGNiYzFk
OGNkY2IzYjc3M2ZjZWI1ZmJkZDA3ZDA4YjA2Li41ZTlkOTJiNTMzYTY2Y2Y5ZmJkZGE2ZjI2YzE1
ZDQ3NTJlNzdmY2MyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9y
ZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jl
c291cmNlcy9zaGFyZWQuanMKQEAgLTQ1LDYgKzQ1LDE0IEBAIGZ1bmN0aW9uIHZlcmlmeVJlc3Vs
dChyZXN1bHQpCiAgICAgZGVidWcoIiIpOwogfQogCitmdW5jdGlvbiB1bmV4cGVjdGVkU3VjY2Vz
c0NhbGxiYWNrKCkKK3sKKyAgICB0ZXN0RmFpbGVkKCJTdWNjZXNzIGZ1bmN0aW9uIGNhbGxlZCB1
bmV4cGVjdGVkbHkiKTsKKyAgICBkZWJ1ZygiIik7CisgICAgdmVyaWZ5UmVzdWx0KGV2ZW50KTsK
KyAgICBkb25lKCk7Cit9CisKIGZ1bmN0aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKIHsK
ICAgICB0ZXN0RmFpbGVkKCJFcnJvciBmdW5jdGlvbiBjYWxsZWQgdW5leHBlY3RlZGx5OiAoIiAr
IGV2ZW50LmNvZGUgKyAiKSAiICsgZXZlbnQubWVzc2FnZSk7CkBAIC01MywzICs2MSw5IEBAIGZ1
bmN0aW9uIHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKK2Z1bmN0
aW9uIGNyZWF0ZVVuc2VyaWFsaXphYmxlVmFsdWUoKQoreworCXZhciBhID0ge307CisJYS5jeWNs
ZSA9IGE7CisJcmV0dXJuIGE7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5qcyBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGItYWRkLXNlcmlh
bGl6ZWQtc2NyaXB0LXZhbHVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYjYxMTM3YWVkNTk4NDA5MDZlNTY0
NzM1YjcxZDdiYzYzODY5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWFkZC1zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5q
cwpAQCAtMCwwICsxLDU3IEBACitkZXNjcmlwdGlvbigiVGVzdCBJbmRleGVkREIncyBhZGQgd2l0
aCBTZXJpYWxpemVkU2NyaXB0VmFsdWUuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rp
b24gc2VyaWFsaXplZFNjcmlwdFZhbHVlRXhwZWN0ZWRFcnJvckNhbGxiYWNrKCkKK3sKKyAgICBk
ZWJ1Zygic2VyaWFsaXplZFNjcmlwdFZhbHVlRXhwZWN0ZWRFcnJvckNhbGxiYWNrIik7CisgICAg
Ly8gRklYTUU6IGVuc3VyZSBpdCdzIGEgc2VyaWFsaXphdGlvbiBlcnJvciBvbmNlIGFkZCBpcyBp
bXBsZW1lbnRlZC4KKyAgICB2ZXJpZnlFcnJvckV2ZW50KGV2ZW50KTsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcygpCit7Cisg
ICAgZGVidWcoImNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyIpOworICAgIHZlcmlmeVN1Y2Nlc3NF
dmVudChldmVudCk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3Rv
cmUgPSBldmVudC5yZXN1bHQiKTsKKyAgICB2YXIgYSA9IGNyZWF0ZVVuc2VyaWFsaXphYmxlVmFs
dWUoKTsKKyAgICB0cnkgeworICAgICAgICByZXN1bHQgPSBvYmplY3RTdG9yZS5hZGQoYSk7Cisg
ICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9ialN0b3JlLmFkZCB0aHJl
dyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbjogIiArIGVycik7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IHJlbW92
ZSB0aGUgbm90aWZ5IGRvbmUgYW5kIGNoZWNrIHRoZSBlcnJvciBjYWxsYmFjayBvbmNlIGFkZCBp
cyBpbXBsZW1lbnRlZC4KKyAgICBkb25lKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IC8vIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIC8vIHJlc3VsdC5vbnN1Y2Nlc3MgPSB1bmV4
cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOworICAgIC8vIHJlc3VsdC5vbmVycm9yID0gc2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3Vj
Y2VzcygpCit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzIik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2
ZW50KGV2ZW50KTsKKyAgICB2YXIgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIp
OworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0Jyki
KTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gY3Jl
YXRlT2JqZWN0U3RvcmVTdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlc3VsdCA9IGV2YWxB
bmRMb2coImluZGV4ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0aW9uJykiKTsKKyAgICB2ZXJp
ZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7Cisg
ICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI4MmI3MTNhNDMzZTAzZDFkZmMyYjcz
OTViNTllZGU1MDM3MWVmMTcuLjUxNjJjMWJiZjY4MmI5YTc3NWM5Y2YzNTdkZDgwNjBkODYxMzA3
OTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTM5IEBACisyMDEwLTA2LTIyICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRzIHN1cHBvcnQgZm9yIHRocm93aW5nIGJlaGF2aW9yIG9mIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIElETC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwODM1CisKKyAgICAgICAgVGhpcyBwYXRjaCBl
bnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBiaW5kaW5ncyB3aWxsIGVpdGhlciB0aHJvdyBhbiBl
eGNlcHRpb24gb3IgYmUgc2lsZW50CisgICAgICAgIHdoZW4gY3JlYXRpbmcgYSBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgYmFzZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcgSURMIGRlZmluaXRpb24uCisg
ICAgICAgIEl0IGFsc28gYWRkcyBUZXN0UE9ET2JqLmlkbCB0byBleGVyY2lzZSB0aGUgYmluZGlu
ZyBnZW5lcmF0b3IgZm9yIGludGVyZmFjZXMgd2l0aCBbUE9EVHlwZT1dIGF0dHJpYnV0ZS4KKyAg
ICAgICAgVGVzdHM6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzIHNob3Vs
ZCBwYXNzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAg
KFdlYkRPTVRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyk6CisgICAgICAgIChXZWJET01U
ZXN0T2JqOjpzZXJpYWxpemVkVmFsdWVOb1JhaXNlKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6
OnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJET01UZXN0T2JqOjpz
ZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkRPTVRlc3RQ
T0RPYmo6OldlYkRPTVRlc3RQT0RPYmpQcml2YXRlOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZSk6
CisgICAgICAgIChXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqKToKKyAgICAgICAg
KFdlYkRPTVRlc3RQT0RPYmo6OmltcGwpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6fldl
YkRPTVRlc3RQT0RPYmopOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6cmVhZE9ubHlGbG9h
dEF0dHIpOgorICAgICAgICAoV2ViRE9NVGVzdFBPRE9iajo6c3RyaW5nQXR0cik6CisgICAgICAg
IChXZWJET01UZXN0UE9ET2JqOjpzZXRTdHJpbmdBdHRyKToKKyAgICAgICAgKHRvV2ViQ29yZSk6
CisgICAgICAgICh0b1dlYktpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9yYWlzZXMpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9ub19yYWlzZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmou
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX2dldF9yZWFkX29ubHlfZmxvYXRfYXR0cik6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3RfcG9kX29ial9nZXRfc3RyaW5nX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X3BvZF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3RfcG9kX29ial9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X3BvZF9vYmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfaW5pdCk6
CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0UE9ET2JqKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmFpc2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9SYWlzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZVJldHVyblJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iakNvbnN0
cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0UE9ET2JqUHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9i
ajo6SlNUZXN0UE9ET2JqKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6fkpTVGVz
dFBPRE9iaik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmNyZWF0ZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBP
RE9iajo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVGVzdFBPRE9iaik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBPRE9iajo6Y2xhc3NJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFBPRE9iajo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFBPRE9iajo6aW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90
b3R5cGU6OmNsYXNzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQT0RPYmpQcm90
b3R5cGU6OkpTVGVzdFBPRE9ialByb3RvdHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZh
bHVlUmFpc2VzOl0pOgorICAgICAgICAoLVtET01UZXN0T2JqIHNlcmlhbGl6ZWRWYWx1ZU5vUmFp
c2U6XSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2Vz
XSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZV0p
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFBPRE9i
ai5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogZGVhbGxvY10pOgorICAgICAg
ICAoLVtET01UZXN0UE9ET2JqIGZpbmFsaXplXSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmog
cmVhZE9ubHlGbG9hdEF0dHJdKToKKyAgICAgICAgKC1bRE9NVGVzdFBPRE9iaiBzdHJpbmdBdHRy
XSk6CisgICAgICAgICgtW0RPTVRlc3RQT0RPYmogc2V0U3RyaW5nQXR0cjpdKToKKyAgICAgICAg
KGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0UE9ET2JqLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNl
cmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJ
bnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVSZXR1
cm5Ob1JhaXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpWOF9VU0Up
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpyZWFkT25seUZsb2F0QXR0
ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdFBPRE9iakludGVybmFsOjpzdHJp
bmdBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0UE9ET2JqSW50ZXJuYWw6
OnN0cmluZ0F0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVz
dFBPRE9ialRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFBPRE9iajo6R2V0UmF3
VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RQT0RPYmo6OnRvTmF0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdFBPRE9iajo6SGFzSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0UE9ET2JqOjp3cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0UE9ET2JqOjpkZXJlZk9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFBPRE9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpzZXJpYWxpemF0aW9uRXJyb3IpOgorICAgICAgICAqIGRvbS9Qb3BT
dGF0ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcFN0YXRlRXZlbnQ6OmluaXRQb3BT
dGF0ZUV2ZW50KToKKyAgICAgICAgKiBkb20vUG9wU3RhdGVFdmVudC5oOgorICAgICAgICAqIGRv
bS9Qb3BTdGF0ZUV2ZW50LmlkbDoKKwogMjAxMC0wNy0yOCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8
bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
NmQ2ZmEyMTIzNTE2MzdjZTFmODgwYmQ4ZjhiZWM0OTE5ODliYjcwOS4uYjU1MmMzMzU3ZGVmYzli
OTRiOGY3YTUwZjRlYjQ5M2I0YWU0Yjk1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTcyLDIwICs5NzIsNDUgQEAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCkKIHsKIH0KIAorUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlV2l0aG91
dFRocm93aW5nKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gbmV3IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpzZXJpYWxpemUo
ZXhlYywgdmFsdWUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgJmVjKTsKK30KKworUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUqIGVjKQorewor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IG5ldyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXpl
KGV4ZWMsIHZhbHVlKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
ICplYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
KmVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgKmVjID0gMDsKKyAgICByZXR1cm4gc2VyaWFsaXpl
ZFZhbHVlLnJlbGVhc2UoKTsKK30KKwogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmlnaW5Db250ZXh0
LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKG9yaWdpbkNvbnRleHQpOwogICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIGFwaVZh
bHVlKTsKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZh
bHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUpOworICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2Vy
aWFsaXplZFZhbHVlOworCisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7CiB9
CiAKIEpTVmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRl
eHRSZWYgZGVzdGluYXRpb25Db250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA5M2JkMGRlOTA4NjRl
ZTdiZDJkMTkwNGMwZTIxMDAzNmIwODk0MzFjLi5lYTYxMjc2Y2E4M2ViMjAwZmJlZDVlYWFiOTEw
MjQ4YzBhMjhjN2EyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgKQEAgLTE3NiwxMCArMTc2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6c2VyaWFsaXpl
KGV4ZWMsIHZhbHVlKSkpOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlV2l0aG91dFRocm93aW5nKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGUqKTsKIAogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDA1ZjUzMmMwMzk4ZjI5
OTdmY2FjNDk4ZTY4OGVhMTM5ZTQwMmI5ZWQuLjFmMjNmMmE3N2EwZTUwODYwMGZmZjFiMDQ5NDE1
ZDgzMjIyZDNlYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTcyNCwxMyArMTcyNCwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBwb2RJ
bXAoKmltcCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RU
eXBlIGVxICJmbG9hdCIpIHsgIyBTcGVjaWFsIGNhc2UgZm9yIEpTU1ZHTnVtYmVyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJ
bXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIikg
LiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBwb2RJbXAgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgInZhbHVlIiwgRkFMU0UpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9kSW1wLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1l
KCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICIp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBwb2RJbXAuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIEpTVmFsdWVU
b05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIsIEZBTFNFKSAuICIpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5jb21taXRDaGFuZ2UocG9k
SW1wLCBjYXN0ZWRUaGlzKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9IEpT
VmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiLCBUUlVFKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXkgJHNldHRlckV4cHJlc3Npb25QcmVmaXggPSAkY29kZUdlbmVyYXRv
ci0+U2V0dGVyRXhwcmVzc2lvblByZWZpeChcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUs
ICRhdHRyaWJ1dGUpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRl
LT5zZXR0ZXJFeGNlcHRpb25zfTsKQEAgLTE5MjQsNyArMTkyNCw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJlc29sdmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJl
KCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwg
ImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9t
U2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBh
cmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIiwgQHskZnVuY3Rpb24tPnJhaXNl
c0V4Y2VwdGlvbnN9KSAuICI7XG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg
SWYgYSBwYXJhbWV0ZXIgaXMgImFuIGluZGV4IiBhbmQgaXQncyBuZWdhdGl2ZSBpdCBzaG91bGQg
dGhyb3cgYW4gSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgQnV0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgYmluZGluZ3MsIGJlY2F1
c2UgdGhlIHR5cGUgaXMgdW5zaWduZWQgYW5kIHRoZSBmYWN0IHRoYXQgaXQKQEAgLTE5MzYsNiAr
MTkzNiwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5
cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgJiYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2Vw
dGlvbnN9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmIChlYykge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYg
JHBhcmFtSW5kZXg7CkBAIC0yMjM3LDggKzIyNDMsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAu
ICJpbXAtPmNvbW1pdENoYW5nZShwb2RJbXAsIGNhc3RlZFRoaXMpO1xuIikgaWYgJHBvZFR5cGU7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbXBsQ2xhc3NOYW1lLCAi
IiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGluZGVudCAuICJzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikg
aWYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9OworICAgICAgICBteSAkaXNTZXJpYWxp
emVkU2NyaXB0VmFsdWUgPSAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSIgb3IgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgImFueSIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIE5hdGl2ZVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVRvSlNWYWx1ZSgkZnVuY3Rpb25TdHJpbmcsIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkpIGlmICRpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwgIiIsICRm
dW5jdGlvblN0cmluZywgImNhc3RlZFRoaXMiKSAuICI7XG4iKSBpZiBub3QgJGlzU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlv
bnN9IGFuZCBub3QgJGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiAgICAgICAgICRjYWxsV2l0
aCA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgi
fTsKICAgICAgICAgaWYgKCRjYWxsV2l0aCBhbmQgJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIp
IHsKQEAgLTIzMTUsNiArMjMyMyw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIHsKICAgICBteSAk
c2lnbmF0dXJlID0gc2hpZnQ7CiAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHJhaXNl
cyA9IHNoaWZ0OwogCiAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUo
JHNpZ25hdHVyZS0+dHlwZSk7CiAKQEAgLTIzNDAsNyArMjM0OSw4IEBAIHN1YiBKU1ZhbHVlVG9O
YXRpdmUKIAogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlw
ZSBlcSAiYW55IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShleGVjLCAkdmFsdWUsICZlYykiIGlmICgkcmFpc2VzKTsKKyAgICAgICAgcmV0dXJu
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhleGVjLCAkdmFs
dWUpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIklEQktleSIpIHsKQEAgLTI0NzEsNiAr
MjQ4MSwyNiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICRn
bG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCR2YWx1ZSkpIjsKIH0KIAorc3ViIE5hdGl2ZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZVRvSlNWYWx1ZQoreworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAg
IG15ICRyYWlzZXMgPSBzaGlmdDsKKworICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIn0gPSAxOworICAgIG15ICRyZXQgPSAiIjsKKyAgICAkcmV0ID0gJHJldCAuICIg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSA9ICR2YWx1ZTtcbiI7CisgICAgaWYgKCRyYWlzZXMpIHsKKyAgICAgICAgJHJldCA9ICRyZXQg
LiAiICAgIGlmIChlYykge1xuIjsKKyAgICAgICAgJHJldCA9ICRyZXQgLiAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpO1xuIjsKKyAgICAgICAgJHJldCA9ICRyZXQgLiAiICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiI7CisgICAgICAgICRyZXQgPSAkcmV0IC4gIiAgICB9
XG4iOworICAgIH0KKyAgICAkcmV0ID0gJHJldCAuICIgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9
IjsKKyAgICAkcmV0ID0gJHJldCAuICIgc2VyaWFsaXplZFNjcmlwdFZhbHVlID8gc2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLT5kZXNlcmlhbGl6ZWQoKSA6IGpzTnVsbCgpO1xuIjsKKworICAgIHJldHVy
biAkcmV0OworfQorCiBzdWIgY2VpbGluZ1RvUG93ZXJPZjIKIHsKICAgICBteSAoJHNpemUpID0g
QF87CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBj
OTYzZTA0OTM1YTE3YTU5Mjc4M2IxZGIxYTI2N2RhNWZmNWJhYmE4Li40MGQ5Y2NiM2QyZDNmNGRh
ZTQxZTgzMDgzZDc5NTJkYTcxYzIxOWQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KQEAgLTExODUsMTcgKzExODUsMTkgQEAgRU5ECiAKICAgICAgICAg
aWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBib29sICR7cGFyYW1ldGVyTmFt
ZX1EaWRUaHJvdyA9IGZhbHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIGJvb2wgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93ID0gZmFsc2U7XG4iKSBpZiAo
JHJhaXNlc0V4Y2VwdGlvbnMpOwogICAgICAgICB9IGVsc2lmIChCYXNpY1R5cGVDYW5GYWlsQ29u
dmVyc2lvbigkcGFyYW1ldGVyKSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1PaztcbiIpOwogICAgICAgICB9CiAKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWdu
YXR1cmUoJHBhcmFtZXRlciwgJHBhcmFtSW5kZXgpIC4gIiAkcGFyYW1ldGVyTmFtZSA9ICIpOwog
Ci0gICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
KSB7CisgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiICYmICRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0s
ICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgaWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdylcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTtcbiIpOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRob3V0VGhyb3dpbmcoYXJnc1skcGFy
YW1JbmRleF0pO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5k
ZXhdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0ZXJO
YW1lfU9rIiA6IHVuZGVmKSAuICI7XG4iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCAxNzliMzAxOTMyYjc4NjA4MTFl
YzQxYjA5OWZmYmEwN2M1YTJlYTMyLi4zMmZiNjY2M2FmMjY2YjNiYWFiN2EwZTk1YjEzMTg2ZmY0
YjEyZWY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwCkBAIC01NzUsMTIgKzU3NSw0MSBAQCBXZWJET01UZXN0T2JqIFdlYkRP
TVRlc3RPYmo6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9N
U3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFs
aXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZykKK3ZvaWQgV2ViRE9N
VGVzdE9iajo6c2VyaWFsaXplZFZhbHVlUmFpc2VzKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFs
aXplZEFyZykKIHsKICAgICBpZiAoIWltcGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW1w
bCgpLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6
ZWRBcmcpKSwgZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhj
ZXB0aW9uQ29kZT4oZWMpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFs
dWVOb1JhaXNlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZykKK3sKKyAgICBpZiAo
IWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWVO
b1JhaXNlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0
cmluZyhzZXJpYWxpemVkQXJnKSkpOworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6
c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCkKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgV2ViRE9NU3RyaW5nIHJlc3VsdCA9IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGlt
cGwoKS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVjKSkpOworICAgIHdlYkRPTVJhaXNl
RXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVl
UmV0dXJuTm9SYWlzZSgpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJE
T01TdHJpbmcoKTsKKworICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPnNl
cmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKSkpOwogfQogCiB2b2lkIFdlYkRPTVRlc3RPYmo6
OmlkYktleShjb25zdCBXZWJET01JREJLZXkmIGtleSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDA5Yzc3ZGI3NTJmNTdjMzA1
NmZhY2I3ODc0OGI1ZTZhNGUyMDBjNTIuLjNlYTgxNGQ3MzU1YjI3Mjg4OGY3MTJjNWZhZGJkN2E5
ZWNmOTk0ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouaApAQCAtMTE5LDcgKzExOSwxMCBAQCBwdWJsaWM6CiAgICAgV2ViRE9NVGVz
dE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBXZWJET01UZXN0T2JqIG1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0
IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBX
ZWJET01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdl
YkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CisgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVSYWlz
ZXMoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICB2b2lkIHNlcmlhbGl6
ZWRWYWx1ZU5vUmFpc2UoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICBX
ZWJET01TdHJpbmcgc2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKCk7CisgICAgV2ViRE9NU3Ry
aW5nIHNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoKTsKICAgICB2b2lkIGlkYktleShjb25z
dCBXZWJET01JREJLZXkmIGtleSk7CiAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7CiAg
ICAgdm9pZCBjdXN0b21NZXRob2QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmMxNGQ4ZGY5
NTQ5ODM5YjE0Yjc3NjA4YTI4NjQ0ZjNhZWYyNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RQT0RPYmouY3BwCkBAIC0wLDAg
KzEsMTAyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkRPTVRlc3RQT0RPYmouaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV2ViRE9N
U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBXZWJET01UZXN0
UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqUHJpdmF0ZSB7CisgICAgV2ViRE9NVGVzdFBPRE9ialBy
aXZhdGUoV2ViQ29yZTo6VGVzdFBPRE9iaiogb2JqZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9i
amVjdCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RQT0RPYmo+IGlt
cGw7Cit9OworCitXZWJET01UZXN0UE9ET2JqOjpXZWJET01UZXN0UE9ET2JqKCkKKyAgICA6IFdl
YkRPTU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkKK3sKK30KKworV2ViRE9NVGVzdFBPRE9iajo6
V2ViRE9NVGVzdFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKiBpbXBsKQorICAgIDogV2ViRE9N
T2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdFBPRE9ialByaXZhdGUoaW1wbCkp
Cit7Cit9CisKK1dlYkRPTVRlc3RQT0RPYmo6OldlYkRPTVRlc3RQT0RPYmooY29uc3QgV2ViRE9N
VGVzdFBPRE9iaiYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7CisgICAgbV9pbXBsID0g
Y29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdFBPRE9ialByaXZhdGUoY29weS5pbXBsKCkpIDog
MDsKK30KKworV2ViQ29yZTo6VGVzdFBPRE9iaiogV2ViRE9NVGVzdFBPRE9iajo6aW1wbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1wbC5nZXQoKSA6IDA7Cit9CisK
K1dlYkRPTVRlc3RQT0RPYmo6On5XZWJET01UZXN0UE9ET2JqKCkKK3sKKyAgICBkZWxldGUgbV9p
bXBsOworICAgIG1faW1wbCA9IDA7Cit9CisKK2Zsb2F0IFdlYkRPTVRlc3RQT0RPYmo6OnJlYWRP
bmx5RmxvYXRBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5yZWFkT25seUZsb2F0QXR0cigpOworfQorCitXZWJE
T01TdHJpbmcgV2ViRE9NVGVzdFBPRE9iajo6c3RyaW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpTdHJpbmcmPihpbXBsKCktPnN0cmluZ0F0dHIoKSk7
Cit9CisKK3ZvaWQgV2ViRE9NVGVzdFBPRE9iajo6c2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01T
dHJpbmcmIG5ld1N0cmluZ0F0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGltcGwoKS0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRyKTsKK30KKworV2Vi
Q29yZTo6VGVzdFBPRE9iaiogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RQT0RPYmomIHdyYXBw
ZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOworfQorCitXZWJET01UZXN0UE9ET2Jq
IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RQT0RPYmoqIHZhbHVlKQoreworICAgIHJldHVybiBXZWJE
T01UZXN0UE9ET2JqKHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NmVlMGU5NWZhNTRh
MDEyNzgyZmEyZmVmMjE4ZmU5NGExYmM0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFBPRE9iai5oCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVRlc3RQT0RPYmpfaAorI2RlZmluZSBXZWJET01UZXN0
UE9ET2JqX2gKKworI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgorI2luY2x1ZGUgPFdlYkRPTVN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0UE9ET2JqOworfTsKKwor
CitjbGFzcyBXZWJET01UZXN0UE9ET2JqIDogcHVibGljIFdlYkRPTU9iamVjdCB7CitwdWJsaWM6
CisgICAgV2ViRE9NVGVzdFBPRE9iaigpOworICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RQT0RPYmoo
V2ViQ29yZTo6VGVzdFBPRE9iaiopOworICAgIFdlYkRPTVRlc3RQT0RPYmooY29uc3QgV2ViRE9N
VGVzdFBPRE9iaiYpOworICAgIH5XZWJET01UZXN0UE9ET2JqKCk7CisKKyAgICBmbG9hdCByZWFk
T25seUZsb2F0QXR0cigpIGNvbnN0OworICAgIFdlYkRPTVN0cmluZyBzdHJpbmdBdHRyKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOworCisgICAg
V2ViQ29yZTo6VGVzdFBPRE9iaiogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgc3Ry
dWN0IFdlYkRPTVRlc3RQT0RPYmpQcml2YXRlOworICAgIFdlYkRPTVRlc3RQT0RPYmpQcml2YXRl
KiBtX2ltcGw7Cit9OworCitXZWJDb3JlOjpUZXN0UE9ET2JqKiB0b1dlYkNvcmUoY29uc3QgV2Vi
RE9NVGVzdFBPRE9iaiYpOworV2ViRE9NVGVzdFBPRE9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0
UE9ET2JqKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggYjRiNjc4NzZjZDIw
ZmZlOWUxNDA2ZmQyMzRkZDFlYzY3OTliYWNkYS4uMzIwYjhkY2MwZGFiYmQ0YTA1NDFiNDE5MWM1
OGRmM2NjMDY1NzA1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCkBAIC0xNjYsNyAr
MTY3LDcgQEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJn
c19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHMKIH0KIAogdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6ZWRfYXJnKQord2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxpemVkX2FyZywgR0Vycm9yICoqZXJy
b3IpCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CkBAIC0xNzQsNyArMTc1LDUzIEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01T
ZXJpYWxpemVkCiAgICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7CiAgICAgV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnID0g
V2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRfYXJnKTsKICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF9zZXJpYWxpemVkX2FyZyk7Ci0gICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlKGNvbnZlcnRl
ZF9zZXJpYWxpemVkX2FyZyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlUmFpc2VzKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZywg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjOworICAgICAgICBXZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24oZWMsIGVjZGVzYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9u
b19yYWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUqICBzZXJpYWxpemVkX2FyZykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBj
b252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKKyAgICBpdGVt
LT5zZXJpYWxpemVkVmFsdWVOb1JhaXNlKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7Cit9CisK
K1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
cmlhbGl6ZWRfdmFsdWVfcmV0dXJuX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJy
b3IgKiplcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKGVj
KSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2M7CisgICAgICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bihlYywgZWNkZXNjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICByZXMgPSBzdGF0aWNf
Y2FzdDxXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqID4oV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUqIAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlX3JldHVybl9ub19y
YWlzZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0
cihpdGVtLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpOworICAgIFdlYktpdERPTVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSogPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOworICAgIHJldHVybiBy
ZXM7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKaW5kZXggYmFmMjc4Y2Y5N2UyNmZjZWFiZjEz
MmVmODRlMTBlODI4OWZlN2ExNS4uM2MxOWIxNjllZjY4N2NkODljNDNhN2M2YzI5YmFlYzg5YWYy
MzVjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTcxLDcgKzcxLDE2IEBAIFdFQktJVF9BUEkgV2Vi
S2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNf
YWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnY2hhciogIHN0cl9h
cmcsIFdlYktpdERPTVRlc3RPYmoqICBvYmpfYXJnLCBHRXJyb3IgKiplcnJvcik7CiAKIFdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogIHNlcmlhbGl6
ZWRfYXJnKTsKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yYWlzZXMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2Vy
aWFsaXplZF9hcmcsIEdFcnJvciAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpOwor
CitXRUJLSVRfQVBJIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWVfcmV0dXJuX3JhaXNlcyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CisKK1dFQktJVF9BUEkgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiAKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZV9yZXR1
cm5fbm9fcmFpc2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CiAKIFdFQktJVF9BUEkgdm9pZAog
d2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTUlEQktleSogIGtleSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MzRkOTM5NmJmZjQ1Zjc5MDNlN2FlMzg0NjA0ZTQ1Y2RkMTIxNDg4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0UE9E
T2JqLmNwcApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlRl
c3RQT0RPYmouaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiZ29i
amVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRl
c3RQT0RPYmouaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFBPRE9ialByaXZhdGUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2dwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0
UE9ET2JqKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiByZXQ7CisKKyAgICByZXR1cm4gRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6
d3JhcFRlc3RQT0RPYmoob2JqKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8K
KworZ2Zsb2F0Cit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfcmVhZF9vbmx5X2Zsb2F0X2F0
dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6VGVzdFBPRE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Zsb2F0IHJlcyA9IGl0ZW0tPnJlYWRPbmx5RmxvYXRBdHRyKCk7CisgICAgcmV0dXJuIHJlczsK
K30KKworZ2NoYXIqIAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RQT0RPYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OlRlc3RQT0RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiAgcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOworICAgIHJl
dHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9zdHJpbmdf
YXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmLCBnY2hhciogIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlN0cmluZyBj
b252ZXJ0ZWRfdmFsdWUgPSBXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0UE9ET2JqLCB3ZWJraXRfZG9tX3Rlc3RfcG9kX29iaiwgV0VCS0lUX1RZ
UEVfRE9NX09CSkVDVCkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvcmU6OlRlc3RQT0RP
YmoqIGNvcmUoV2ViS2l0RE9NVGVzdFBPRE9iaiogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYkNvcmU6OlRlc3RQT0RPYmoqIGNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0UE9ET2JqKj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVP
YmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVBRF9PTkxZX0ZMT0FUX0FU
VFIsCisgICAgUFJPUF9TVFJJTkdfQVRUUiwKK307CisKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X3BvZF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERP
TU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisg
ICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdFBP
RE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmogKj4oZG9t
X29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOworCisgICAg
ICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOworICAgIH0KKworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmID0gV0VCS0lUX0RPTV9URVNU
X1BPRF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlU2VsZiA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1Bf
U1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cihXZWJD
b3JlOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX1BP
RF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlU2VsZiA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfUkVB
RF9PTkxZX0ZMT0FUX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgY29yZVNlbGYtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cigp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfcG9k
X29ial9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisKKyAgICBpZiAoR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQp
CisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9wb2Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdFBPRE9iakNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9t
X3Rlc3RfcG9kX29ial9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9wb2Rfb2JqX2dldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfY29u
c3RydWN0ZWQ7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkVBRF9PTkxZ
X0ZMT0FUX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfZmxvYXQoInJlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogbmFtZSAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9w
b2Rfb2JqX3JlYWQtb25seS1mbG9hdC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtb25seSAgZ2Zsb2F0IFRlc3RQT0RPYmoucmVhZC1vbmx5LWZsb2F0LWF0dHIiLCAvKiBs
b25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdf
TUFYRkxPQVQsIC8qIG1pbiAqLworR19NQVhGTE9BVCwgLyogbWF4ICovCiswLjAsIC8qIGRlZmF1
bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUk9QX1NUUklOR19BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygic3RyaW5nLWF0dHIiLCAvKiBuYW1lICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X3BvZF9vYmpfc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVh
ZC13cml0ZSAgZ2NoYXIqICBUZXN0UE9ET2JqLnN0cmluZy1hdHRyIiwgLyogbG9uZ2VyIC0gY291
bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9wb2Rfb2JqX2luaXQoV2ViS2l0RE9NVGVzdFBPRE9iaiogcmVxdWVzdCkK
K3sKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0UE9ET2JqKiB3cmFwVGVz
dFBPRE9iaihXZWJDb3JlOjpUZXN0UE9ET2JqKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRo
ZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUg
YSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4g
IFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigp
LgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfUE9EX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09C
SiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RQT0RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFBPRE9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZWFjM2VjMTcwNTExZTYxYWI1N2YxZjZk
NWU3NDJkMDFiYmE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmouaApAQCAtMCwwICsxLDYwIEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdFBPRE9ial9oCisj
ZGVmaW5lIFdlYktpdERPTVRlc3RQT0RPYmpfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtpdGRv
bWRlZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgorCisK
K0dfQkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSiAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfUE9EX09CSihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKLCBXZWJLaXRET01UZXN0
UE9ET2JqKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1BPRF9PQkpfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
UE9EX09CSiwgV2ViS2l0RE9NVGVzdFBPRE9iakNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFU1RfUE9EX09CSihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9QT0RfT0JKKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19URVNUX1BPRF9PQkpfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfUE9EX09CSikpCisjZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9QT0RfT0JKX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX1BPRF9PQkosIFdlYktpdERPTVRlc3RQT0RPYmpD
bGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdFBPRE9iaiB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdFBPRE9iakNs
YXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfdHlwZSAodm9pZCk7CisK
K1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9tX3Rlc3RfcG9kX29ial9nZXRfcmVhZF9vbmx5
X2Zsb2F0X2F0dHIoV2ViS2l0RE9NVGVzdFBPRE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgZ2No
YXIqIAord2Via2l0X2RvbV90ZXN0X3BvZF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRl
c3RQT0RPYmoqIHNlbGYpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9wb2Rf
b2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0UE9ET2JqKiBzZWxmLCBnY2hhciogIHZh
bHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVRlc3RQT0RPYmpfaCAq
LwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0UE9ET2JqUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjOTVlNzFk
N2ZkYmZjYjg3Y2VmNTA5ODYxNDNlNTVkN2VjMTczMWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RQT0RPYmpQcml2
YXRlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IFdFQl9LSVRfRE9NX1RFU1RfUE9EX09CSl9QUklWQVRFX0gKKyNkZWZpbmUgV0VCX0tJVF9ET01f
VEVTVF9QT0RfT0JKX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSAiVGVzdFBPRE9iai5oIgor
bmFtZXNwYWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9NVGVzdFBPRE9iaiAqCisgICAgd3JhcFRl
c3RQT0RPYmooV2ViQ29yZTo6VGVzdFBPRE9iaiAqY29yZU9iamVjdCk7CisKKyAgICBXZWJDb3Jl
OjpUZXN0UE9ET2JqICoKKyAgICBjb3JlKFdlYktpdERPTVRlc3RQT0RPYmogKnJlcXVlc3QpOwor
CisgICAgZ3BvaW50ZXIKKyAgICBraXQoV2ViQ29yZTo6VGVzdFBPRE9iaiogbm9kZSk7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9QT0RfT0JK
X1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKaW5kZXggNWFhNTRkYTAwMzY1Y2RjYzI5OTA2MTVkMTdmMDlkM2FhZDdiN2UwMC4u
ZGQwNzk1YmZhNWM1ZjkxYWI4ZjYxN2JlMWMxM2Y3YjMxNDA3MjA2MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xNzIsNyArMTcyLDcg
QEAgYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbNDJdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0NV0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVFXzAi
LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LApAQCAtMTkzLDcgKzE5MywxMCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDJdID0KICAgICB7ICJvYmpNZXRob2RXaXRoQXJn
cyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKSwgKGlu
dHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kVGhhdFJlcXVpcmVz
QWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyksIChpbnRwdHJfdCkxIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgInNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVOb1JhaXNlKSwgKGludHB0
cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0
dXJuUmFpc2VzKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic2Vy
aWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKICAgICB7ICJpZGJLZXkiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
ZGJLZXkpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RX
aXRoRXhjZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4
Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3Rv
bU1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZCksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMjE5LDcgKzIyMiw3IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0Ml0g
PQogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFC
TEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzQsIDEyNywgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxF
IEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9i
alByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtODU2LDE5ICs4
NTksNzEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6
ZWRWYWx1ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpT
VGVzdE9iajo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQogCi0gICAgaW1wLT5zZXJpYWxpemVk
VmFsdWUoc2VyaWFsaXplZEFyZyk7CisgICAgaW1wLT5zZXJpYWxpemVkVmFsdWVSYWlzZXMoc2Vy
aWFsaXplZEFyZywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZU5v
UmFpc2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlh
bGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZU5vUmFp
c2Uoc2VyaWFsaXplZEFyZyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisKKworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlcyhlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICBKU0M6OkpTVmFs
dWUgcmVzdWx0ID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlID8gc2VyaWFsaXplZFNjcmlwdFZhbHVl
LT5kZXNlcmlhbGl6ZWQoKSA6IGpzTnVsbCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAg
IGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RP
YmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworCisK
KyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZh
bHVlID0gaW1wLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CisgICAgSlNDOjpKU1Zh
bHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA/IHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS0+ZGVzZXJpYWxpemVkKCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAwNjQ4NTI2NDczYzRhZmNjMWYxMTUxZDUyYWRk
ZmMzMjFmZjFmN2I4Li40YzBkNDY1YmYxZmRhYTYzZTcxZmEzOTEzYjFiYTk5NTQwNDA0MTlhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtOTQs
NyArOTQsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEpTQzo6RXhlY1MKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdz
KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhl
Y1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlh
bGl6ZWRWYWx1ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlTm9S
YWlzZShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlUmV0dXJuUmFpc2VzKEpT
Qzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKEpTQzo6RXhl
Y1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25JZGJLZXkoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSop
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9E
T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGNlODg0NGJjOTA3N2E2ZDUwZjJlOGYwODgyMzg5YjMyMzk3OTExNgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBPRE9iai5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFBPRE9iai5oIgorCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmouaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
TnVtYmVyQ2VsbC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RQT0RPYmopOworCisvKiBIYXNo
IHRhYmxlICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0
b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFBPRE9ialRh
YmxlVmFsdWVzWzRdID0KK3sKKyAgICB7ICJyZWFkT25seUZsb2F0QXR0ciIsIERvbnREZWxldGUg
fCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RQT0RPYmpSZWFkT25seUZsb2F0QXR0ciksIChpbnRwdHJfdCkwIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAorICAgIHsgInN0cmluZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFBPRE9ialN0cmlu
Z0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0UE9ET2JqU3RyaW5nQXR0ciBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9ubHksIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0UE9ET2Jq
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7IDAs
IDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBUSFVOS19HRU5FUkFU
T1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RQT0RPYmpUYWJs
ZSA9IHsgOCwgNywgSlNUZXN0UE9ET2JqVGFibGVWYWx1ZXMsIDAgfTsKKy8qIEhhc2ggdGFibGUg
Zm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJB
VE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRP
UihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dFBPRE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBU
SFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFi
bGUgPSB7IDEsIDAsIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK2Ns
YXNzIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICBKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7CisgICAgfQorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01D
b25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Cit9OworCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RQT0RPYmpDb25zdHJ1Y3Rv
ciIsIDAsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCAwIH07CisKK0pTVGVzdFBPRE9i
akNvbnN0cnVjdG9yOjpKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVj
dChKU1Rlc3RQT0RPYmpDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFBPRE9ialByb3RvdHlwZTo6c2VsZihl
eGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCitib29sIEpT
VGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yLCBE
T01PYmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFBPRE9iakNvbnN0cnVjdG9yLCBET01P
YmplY3Q+KGV4ZWMsICZKU1Rlc3RQT0RPYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8K
KyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdl
bmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRp
ZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0UE9ET2JqUHJvdG90eXBlVGFi
bGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQor
fTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUg
SGFzaFRhYmxlIEpTVGVzdFBPRE9ialByb3RvdHlwZVRhYmxlID0geyAxLCAwLCBKU1Rlc3RQT0RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9i
alByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFBPRE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RQ
T0RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OworCitKU09iamVjdCogSlNUZXN0UE9ET2JqUHJvdG90
eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFBPRE9iaj4oZXhlYywgZ2xvYmFs
T2JqZWN0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFBPRE9iajo6c19pbmZvID0geyAi
VGVzdFBPRE9iaiIsIDAsICZKU1Rlc3RQT0RPYmpUYWJsZSwgMCB9OworCitKU1Rlc3RQT0RPYmo6
OkpTVGVzdFBPRE9iaihOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFw
cGVyPFRlc3RQT0RPYmo+ID4gaW1wbCkKKyAgICA6IERPTU9iamVjdFdpdGhHbG9iYWxQb2ludGVy
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9pbXBsKGltcGwpCit7Cit9CisKK0pT
VGVzdFBPRE9iajo6fkpTVGVzdFBPRE9iaigpCit7CisgICAgZm9yZ2V0RE9NT2JqZWN0KHRoaXMs
IGltcGwoKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RQT0RPYmo6OmNyZWF0ZVByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIG5ldyAoZXhlYykgSlNUZXN0UE9ET2JqUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgSlNUZXN0
UE9ET2JqUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSkpOworfQorCitib29sIEpTVGVzdFBPRE9iajo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RQT0RPYmos
IEJhc2U+KGV4ZWMsICZKU1Rlc3RQT0RPYmpUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90
KTsKK30KKworYm9vbCBKU1Rlc3RQT0RPYmo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0
b3I8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRoaXMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNUZXN0UE9ET2JqUmVhZE9u
bHlGbG9hdEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJikKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RQT0RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBUZXN0UE9ET2JqIGltcCgqY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9ICBqc051bWJlcihleGVjLCBpbXAucmVhZE9ubHlGbG9hdEF0dHIoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAg
SlNUZXN0UE9ET2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNP
YmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdFBPRE9i
aiBpbXAoKmNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSAganNTdHJp
bmcoZXhlYywgaW1wLnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNW
YWx1ZSBqc1Rlc3RQT0RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdFBPRE9iaiogZG9tT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0UE9ET2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBy
ZXR1cm4gSlNUZXN0UE9ET2JqOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKK30KK3ZvaWQgSlNUZXN0UE9ET2JqOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0UE9ET2JqLCBCYXNlPihleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0UE9ET2JqVGFibGUsIHRoaXMsIHNsb3QpOworfQor
Cit2b2lkIHNldEpTVGVzdFBPRE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RQT0RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBKU1NW
R1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ICogaW1wID0gc3RhdGljX2Nhc3Q8SlNTVkdQT0RU
eXBlV3JhcHBlcjxUZXN0UE9ET2JqPiAqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIFRlc3RQ
T0RPYmogcG9kSW1wKCppbXApOworICAgIHBvZEltcC5zZXRTdHJpbmdBdHRyKHZhbHVlVG9TdHJp
bmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wLT5jb21taXRDaGFuZ2UocG9k
SW1wLCBjYXN0ZWRUaGlzKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RQT0RPYmo6OmdldENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0UE9ET2JqQ29uc3RydWN0b3I+KGV4ZWMs
IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBvYmplY3QsIFNW
R0VsZW1lbnQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNU
ZXN0UE9ET2JqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBvYmplY3QsIGNvbnRleHQpOworfQorVGVzdFBPRE9iaiB0b1Rlc3RQT0RPYmooSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0UE9E
T2JqOjpzX2luZm8pID8gKFRlc3RQT0RPYmopICpzdGF0aWNfY2FzdDxKU1Rlc3RQT0RPYmoqPihh
c09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiBUZXN0UE9ET2JqKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UE9ET2JqLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTRlNGZmZWJhNTQzMWI1Yzg5OGYxOTUxOWM1NDI1NjlmODM2YzdlOQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBPRE9iai5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1Rlc3RQT0RP
YmpfaAorI2RlZmluZSBKU1Rlc3RQT0RPYmpfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNTVkdQT0RUeXBlV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3RQT0RPYmou
aCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU09iamVjdFdpdGhHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdFBy
b3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdFBPRE9iaiA6
IHB1YmxpYyBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciB7CisgICAgdHlwZWRlZiBET01PYmpl
Y3RXaXRoR2xvYmFsUG9pbnRlciBCYXNlOworcHVibGljOgorICAgIEpTVGVzdFBPRE9iaihOb25O
dWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+ID4pOworICAgIHZpcnR1YWwgfkpT
VGVzdFBPRE9iaigpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19p
bmZvOyB9CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gKiBpbXBsKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEpTU1ZHUE9EVHlw
ZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBtX2ltcGw7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPFRl
c3RQT0RPYmo+KiwgU1ZHRWxlbWVudCopOworVGVzdFBPRE9iaiB0b1Rlc3RQT0RPYmooSlNDOjpK
U1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0UE9ET2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEpTQzo6SlNPYmplY3RXaXRoR2xv
YmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBjb25z
dCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQor
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9u
eW1vdXNTbG90Q291bnQpOworICAgIH0KKyAgICBKU1Rlc3RQT0RPYmpQcm90b3R5cGUoSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVj
dHVyZT4gc3RydWN0dXJlKSA6IEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpKU1ZhbHVlIGpzVGVzdFBPRE9ialJlYWRPbmx5RmxvYXRBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RQT0RPYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0UE9ET2JqU3RyaW5n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlND
OjpKU1ZhbHVlIGpzVGVzdFBPRE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0T2JqLmgKaW5kZXggYTk2YjQ5OTVhZjdhMmVlYjRmOTUzNDQ0ZmQxYjRhZTM5MWE1N2NjNi4u
NjYwYWI2NGJiMGRkZTIwOGYzNWZmNmU1NGI1ZDNjZGE3NjE0NzQzMiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTExNyw3ICsxMTcs
MTAgQEAgZW51bSB7CiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kV2l0aEFyZ3M6KGludClpbnRB
cmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7
CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnczooTlNTdHJpbmcgKilz
dHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAoRE9NVGVzdE9iaiAqKW1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzoo
RE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAq
KXNlcmlhbGl6ZWRBcmc7CistICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZVJhaXNlczooTlNTdHJpbmcg
KilzZXJpYWxpemVkQXJnOworLSAodm9pZClzZXJpYWxpemVkVmFsdWVOb1JhaXNlOihOU1N0cmlu
ZyAqKXNlcmlhbGl6ZWRBcmc7CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVyblJh
aXNlczsKKy0gKE5TU3RyaW5nICopc2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZTsKIC0gKHZv
aWQpaWRiS2V5OihET01JREJLZXkgKilrZXk7CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRpb247
CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA5OWMzY2M2NTVmMTFjZWQxZjMzMDVmZTlhZTdh
MTYxODg3YThmYjBmLi5hNTJkZDY4MzQ2YTI2YzgxNmVlZDY1YmM0YWQwZmU3ZWRiZTQ0YTQ3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1t
CkBAIC00NzEsMTAgKzQ3MSwzMyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKHZvaWQp
c2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKKy0gKHZvaWQpc2VyaWFs
aXplZFZhbHVlUmFpc2VzOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKIHsKICAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2VyaWFsaXplZFZhbHVl
KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdlYkNvcmU6OlN0cmluZyhz
ZXJpYWxpemVkQXJnKSkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IElNUEwtPnNlcmlhbGl6ZWRWYWx1ZVJhaXNlcyhXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpLCBlYyk7CisgICAgV2Vi
Q29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKK30KKworLSAodm9pZClzZXJpYWxpemVkVmFsdWVO
b1JhaXNlOihOU1N0cmluZyAqKXNlcmlhbGl6ZWRBcmcKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2VyaWFsaXplZFZhbHVlTm9SYWlzZShX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2Vy
aWFsaXplZEFyZykpKTsKK30KKworLSAoTlNTdHJpbmcgKilzZXJpYWxpemVkVmFsdWVSZXR1cm5S
YWlzZXMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTlNTdHJpbmcgKnJlc3VsdCA9IGtp
dChXVEY6OmdldFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5SYWlzZXMoZWMpKSk7Cisg
ICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CistIChOU1N0cmluZyAqKXNlcmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2UKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIGtpdChXVEY6Omdl
dFB0cihJTVBMLT5zZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCkpKTsKIH0KIAogLSAodm9p
ZClpZGJLZXk6KERPTUlEQktleSAqKWtleQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTQ1NmE2NmM3NWY5NGJl
YjAxNjBhNzc3YzhjOTBhZDBiOWI3MmIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLmgKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNv
cmUvRE9NT2JqZWN0Lmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJL
SVRfVkVSU0lPTl9MQVRFU1QKKworQGNsYXNzIE5TU3RyaW5nOworCitAaW50ZXJmYWNlIERPTVRl
c3RQT0RPYmogOiBET01PYmplY3QKKy0gKGZsb2F0KXJlYWRPbmx5RmxvYXRBdHRyOworLSAoTlNT
dHJpbmcgKilzdHJpbmdBdHRyOworLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5l
d1N0cmluZ0F0dHI7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2NWI1MWQzOTE0
MGZlNjhhMmIzNDQxZWJiODRiMDFlNDJlZjQ5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmoubW0KQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiRE9NVGVzdFBPRE9iai5oIgorCisjaW1w
b3J0ICJET01CbG9iSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1J1bGVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5h
bC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01TdHlsZVNoZWV0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVRlc3RQT0RPYmpJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgor
I2ltcG9ydCAiS1VSTC5oIgorI2ltcG9ydCAiVGVzdFBPRE9iai5oIgorI2ltcG9ydCAiVGhyZWFk
Q2hlY2suaCIKKyNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3Jp
cHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1Q
TCByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RQT0RPYmoqPihfaW50ZXJuYWwpCisKK0Bp
bXBsZW1lbnRhdGlvbiBET01UZXN0UE9ET2JqCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlm
IChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdFBPRE9i
aiBjbGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgSU1QTDsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBkZWxldGUg
SU1QTDsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistIChmbG9hdClyZWFkT25seUZsb2F0
QXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBy
ZXR1cm4gSU1QTC0+cmVhZE9ubHlGbG9hdEF0dHIoKTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJp
bmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IHJldHVybiBJTVBMLT5zdHJpbmdBdHRyKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nQXR0cjoo
TlNTdHJpbmcgKiluZXdTdHJpbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldFN0cmluZ0F0dHIobmV3U3RyaW5nQXR0cik7Cit9
CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdFBPRE9iaiBjb3JlKERPTVRlc3RQT0RPYmogKndyYXBw
ZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyAqcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpU
ZXN0UE9ET2JqKj4od3JhcHBlci0+X2ludGVybmFsKSA6IFdlYkNvcmU6OlRlc3RQT0RPYmooKTsK
K30KKworRE9NVGVzdFBPRE9iaiAqa2l0KFdlYkNvcmU6OlRlc3RQT0RPYmogdmFsdWUpCit7Cisg
ICAgeyBET01fQVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVj
a1JvdW5kT25lKCk7IH07CisgICAgRE9NVGVzdFBPRE9iaiAqd3JhcHBlciA9IFtbRE9NVGVzdFBP
RE9iaiBhbGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihuZXcgV2ViQ29yZTo6VGVzdFBPRE9iaih2YWx1ZSkp
OworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RQT0RPYmpJbnRlcm5hbC5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0UE9ET2JqSW50ZXJuYWwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNGNlYjBjZGIzY2RlM2M0NzRhZTFjNGUzYzU0NDk5NjhjMDlmZDBiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0UE9ET2JqSW50ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01UZXN0UE9ET2JqLmg+CisKKyNpZiBXRUJLSVRf
VkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIFRlc3RQT0RPYmo7Cit9CisKK1dlYkNvcmU6OlRlc3RQT0RP
YmogY29yZShET01UZXN0UE9ET2JqICopOworRE9NVGVzdFBPRE9iaiAqa2l0KFdlYkNvcmU6OlRl
c3RQT0RPYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwKaW5kZXggYTVkYWEyNGE1OWI5NTNiZmNjYzcwNGQzZjAwZmE2MzYwZThkM2U0Mi4uOWU4
NjJmODEwOTUzYWIzOTcxNTk5N2I5NTBjNjgxZTkwYjczYzI3MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTEsOCArMSw4IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgogICoKQEAg
LTExLDEyICsxMSw5IEBACiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCiAgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCiAgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwpAQCAtNjUsNyArNjIsMTEgQEAgbW9kdWxlIHRlc3Qg
ewogICAgICAgICBbUmVxdWlyZXNBbGxBcmd1bWVudHM9UmFpc2VdIFRlc3RPYmogbWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhpbiBET01TdHJpbmcgc3RyQXJnLCBpbiBUZXN0T2Jq
IG9iakFyZykKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAgIHZv
aWQgc2VyaWFsaXplZFZhbHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJn
KTsKKyAgICAgICAgLy8gVGVzdCB2YXJpb3VzIGZvcm1zIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS4KKyAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWVSYWlzZXMoaW4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHNlcmlhbGl6ZWRBcmcpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lk
IHNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2UoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6
ZWRBcmcpOworICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc2VyaWFsaXplZFZhbHVlUmV0
dXJuUmFpc2VzKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBzZXJpYWxpemVkVmFsdWVSZXR1cm5Ob1JhaXNlKCk7CiAgICAgICAgIHZvaWQgaWRi
S2V5KGluIElEQktleSBrZXkpOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbnMKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFBPRE9iai5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM2YzRhZDU0
MTc3ZjljODQ2ZTU4YWE0MTA5ZmUzMDQ0Mzg4Njc0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQT0RPYmouaWRsCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zdHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3Mg
Y29kZSBnZW5lcmF0b3IgYW5kIGZvciB0cmFja2luZworLy8gY2hhbmdlcyBpbiBpdHMgb3VwdXQu
Cittb2R1bGUgdGVzdCB7CisgICAgaW50ZXJmYWNlIFtQT0RUeXBlPVRlc3RQT0RPYmpdIFRlc3RQ
T0RPYmogeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgICAgICAgICAgcmVhZE9u
bHlGbG9hdEF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyBzdHJpbmdBdHRyOworICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCAwOWQ5OWY4OTFlN2NiZWFhMjhjYzY2
YzRhNjk2NDgwNGI1MzNmMmRiLi41Mzg0YmZiOGY4OTI4MDQ2OTUwNjljNTAzNTFiOGI2MmQyZDk1
ZDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAKQEAgLTU5NSwxOCArNTk1LDU4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0
aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxiYWNrKGNvbnN0IHY4CiAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZVJhaXNlc0NhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5zZXJpYWxpemVkVmFsdWUiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlh
bGl6ZWRWYWx1ZVJhaXNlcyIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgewogICAg
IGJvb2wgc2VyaWFsaXplZEFyZ0RpZFRocm93ID0gZmFsc2U7CiAgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGFyZ3NbMF0sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyk7CiAgICAgaWYgKHNlcmlhbGl6ZWRB
cmdEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPnNl
cmlhbGl6ZWRWYWx1ZShzZXJpYWxpemVkQXJnKTsKKyAgICBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJh
aXNlcyhzZXJpYWxpemVkQXJnLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAg
Z290byBmYWlsOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9Cisg
ICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBzZXJpYWxpemVkVmFsdWVOb1JhaXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2Ui
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZVdpdGhvdXRUaHJvd2luZyhhcmdzWzBdKTsKKyAgICBp
bXAtPnNlcmlhbGl6ZWRWYWx1ZU5vUmFpc2Uoc2VyaWFsaXplZEFyZyk7CisgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZVJldHVyblJhaXNlc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWVSZXR1
cm5SYWlzZXMiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQgPSBpbXAtPnNlcmlhbGl6ZWRWYWx1ZVJldHVy
blJhaXNlcyhlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgZ290byBmYWlsOwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpLT5kZXNlcmlhbGl6ZSgpOworICAgIH0KKyAgICBm
YWlsOgorICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNl
cmlhbGl6ZWRWYWx1ZVJldHVybk5vUmFpc2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VyaWFsaXplZFZhbHVlUmV0dXJu
Tm9SYWlzZSIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CisgICAgcmV0dXJuIGltcC0+c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSgp
LT5kZXNlcmlhbGl6ZSgpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlkYktl
eUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5pZGJLZXkiKTsKQEAgLTk5Myw3ICsxMDMzLDEwIEBAIHN0YXRpYyBjb25zdCBC
YXRjaGVkQ2FsbGJhY2sgVGVzdE9iakNhbGxiYWNrc1tdID0gewogICAgIHsidm9pZE1ldGhvZCIs
IFRlc3RPYmpJbnRlcm5hbDo6dm9pZE1ldGhvZENhbGxiYWNrfSwKICAgICB7ImludE1ldGhvZCIs
IFRlc3RPYmpJbnRlcm5hbDo6aW50TWV0aG9kQ2FsbGJhY2t9LAogICAgIHsib2JqTWV0aG9kIiwg
VGVzdE9iakludGVybmFsOjpvYmpNZXRob2RDYWxsYmFja30sCi0gICAgeyJzZXJpYWxpemVkVmFs
dWUiLCBUZXN0T2JqSW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrfSwKKyAgICB7InNl
cmlhbGl6ZWRWYWx1ZVJhaXNlcyIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmFp
c2VzQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlTm9SYWlzZSIsIFRlc3RPYmpJbnRl
cm5hbDo6c2VyaWFsaXplZFZhbHVlTm9SYWlzZUNhbGxiYWNrfSwKKyAgICB7InNlcmlhbGl6ZWRW
YWx1ZVJldHVyblJhaXNlcyIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJu
UmFpc2VzQ2FsbGJhY2t9LAorICAgIHsic2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZSIsIFRl
c3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlUmV0dXJuTm9SYWlzZUNhbGxiYWNrfSwKICAg
ICB7ImlkYktleSIsIFRlc3RPYmpJbnRlcm5hbDo6aWRiS2V5Q2FsbGJhY2t9LAogICAgIHsibWV0
aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNh
bGxiYWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2Fs
bGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0UE9ET2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFBP
RE9iai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA3MmM5NTU5ZThmNmIwZWVmYmI1YTExOTYxNTE0MDYzNjJm
NzJlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdFBPRE9iai5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0UE9ET2JqLmgiCisKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0UE9ET2JqOjppbmZvID0g
eyBWOFRlc3RQT0RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0LCAw
IH07CisKK25hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwgeworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVhZE9ubHlGbG9hdEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RQ
T0RPYmoucmVhZE9ubHlGbG9hdEF0dHIuX2dldCIpOworICAgIFRlc3RQT0RPYmoqIGltcCA9IFY4
VGVzdFBPRE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4OjpOdW1i
ZXI6Ok5ldyhpbXAtPnJlYWRPbmx5RmxvYXRBdHRyKCkpOworfQorCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RQT0RPYmouc3RyaW5nQXR0ci5fZ2V0Iik7CisgICAgVGVzdFBPRE9iaiogaW1wID0gVjhU
ZXN0UE9ET2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmco
aW1wLT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVz
dFBPRE9iai5zdHJpbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0UE9ET2JqKiBpbXAgPSBWOFRlc3RQ
T0RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFY4UGFyYW1ldGVyPFdpdGhOdWxs
Q2hlY2s+IHYgPSB2YWx1ZTsKKyAgICBpbXAtPnNldFN0cmluZ0F0dHIodik7CisgICAgcmV0dXJu
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0UE9ET2JqSW50ZXJuYWwKKworc3RhdGljIGNvbnN0
IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFBPRE9iakF0dHJzW10gPSB7CisgICAgLy8gQXR0cmlidXRl
ICdyZWFkT25seUZsb2F0QXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6
ICcnKQorICAgIHsicmVhZE9ubHlGbG9hdEF0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnJlYWRP
bmx5RmxvYXRBdHRyQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmli
dXRlICdzdHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nJykKKyAgICB7InN0cmluZ0F0dHIiLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0
cmluZ0F0dHJBdHRyR2V0dGVyLCBUZXN0UE9ET2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0
dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0
dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RQT0RP
YmoiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0UE9ET2Jq
OjppbnRlcm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RQT0RPYmpBdHRycywgc2l6ZW9mKFRl
c3RQT0RPYmpBdHRycykgLyBzaXplb2YoKlRlc3RQT0RPYmpBdHRycyksCisgICAgICAgIDAsIDAp
OworICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVzYy0+U2V0
KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJldHVybiBk
ZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9E
T2JqOjpHZXRSYXdUZW1wbGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RPYmpSYXdDYWNoZSA9IGNyZWF0ZVJhd1RlbXBsYXRl
KCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9ialJhd0NhY2hlOworfQorCit2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0UE9ET2JqOjpHZXRUZW1wbGF0ZSgpCit7Cisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RQT0RP
YmpDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdFBPRE9ialRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkp
OworICAgIHJldHVybiBWOFRlc3RQT0RPYmpDYWNoZTsKK30KKworVjhTVkdQT0RUeXBlV3JhcHBl
cjxUZXN0UE9ET2JqPiogVjhUZXN0UE9ET2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOFNWR1BPRFR5cGVX
cmFwcGVyPFRlc3RQT0RPYmo+Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9vbCBWOFRlc3RQT0RPYmo6Okhhc0lu
c3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3
VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0UE9ET2JqOjp3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4q
IGltcGwpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworICAgIFY4UHJv
eHkqIHByb3h5ID0gMDsKKyAgICAgICAgd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChp
bXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmpl
Y3QocHJveHksICZpbmZvLCBpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB3cmFwcGVyOworCisgICAgaW1wbC0+cmVmKCk7CisgICAgZ2V0RE9NT2JqZWN0
TWFwKCkuc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikp
OworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaj4gPiBpbXBsKQoreworICAg
IHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+KiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdFBPRE9iajo6
d3JhcChpbXBsKTsKK30KKwordm9pZCBWOFRlc3RQT0RPYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9i
amVjdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRlc3RQT0RPYmo+
Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RQT0RPYmouaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNjM1ZTMxYjhhOWU0MzE4ZDA1M2NlMTU0ZDIwZDY2MmE3ZWQ5OGYzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0UE9ET2JqLmgKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYgVjhUZXN0UE9ET2Jq
X2gKKyNkZWZpbmUgVjhUZXN0UE9ET2JqX2gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNp
bmNsdWRlICJUZXN0UE9ET2JqLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5j
bHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZHUE9EVHlwZVdyYXBw
ZXI7CisKK2NsYXNzIFY4VGVzdFBPRE9iaiB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBI
YXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOworICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKKyAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBsYXRlKCk7
CisgICAgc3RhdGljIFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+KiB0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwKFY4U1ZHUE9EVHlwZVdyYXBwZXI8VGVzdFBPRE9iaiA+Kik7CisgICAgc3RhdGljIHZv
aWQgZGVyZWZPYmplY3Qodm9pZCopOworICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsK
KyAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBw
ZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworfTsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoVjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4qKTsKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8VjhTVkdQT0RUeXBlV3JhcHBlcjxUZXN0UE9ET2JqID4gPik7
Cit9CisKKyNlbmRpZiAvLyBWOFRlc3RQT0RPYmpfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDlkYzRkMGZjYmNlYTlkOWUxNDE0M2Q3Yjll
MGQ3MDY5Y2U5NTYxMTEuLmRiNzY0ZWU5YzFjMTY5ZDJlNDI5NTg4YzVhNTYzOTZkOWEzMTU2ZWYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAg
LTEwMjUsMTMgKzEwMjUsMjQgQEAgdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFs
aXplQW5kU2V0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmoKIAogUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgZGlkVGhyb3cpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93KSk7Cisg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2NyaXB0VmFsdWUgPSBhZG9wdFJlZihu
ZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKHNjcmlwdFZhbHVlLT5t
X2RhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VSUik7
CisgICAgICAgIGRpZFRocm93ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlkVGhyb3cg
PSBmYWxzZTsKKyAgICByZXR1cm4gc2NyaXB0VmFsdWUucmVsZWFzZSgpOwogfQogCiBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAgIGJvb2wgZGlkVGhyb3c7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUodmFsdWUsIGRpZFRocm93
KSk7CisgICAgcmV0dXJuIGNyZWF0ZSh2YWx1ZSwgZGlkVGhyb3cpOworfQorCitQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVXaXRo
b3V0VGhyb3dpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHZhbHVlKSk7CiB9CiAKIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZy
b21XaXJlKFN0cmluZyBkYXRhKQpAQCAtMTA2MCwxNyArMTA3MSwxMiBAQCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpCiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSwgYm9vbCYgZGlkVGhyb3cpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB7Ci0gICAgZGlkVGhyb3cgPSBm
YWxzZTsKICAgICBXcml0ZXIgd3JpdGVyOwogICAgIFNlcmlhbGl6ZXIgc2VyaWFsaXplcih3cml0
ZXIpOwotICAgIGlmICghc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpKSB7Ci0gICAgICAgIHRo
cm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAgICBkaWRUaHJvdyA9IHRydWU7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3Jp
dGVyLmRhdGEoKSk7CisgICAgaWYgKHNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSkKKyAgICAg
ICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CiB9CiAKIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJp
bmdEYXRhTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgKaW5kZXggMzcxMGI1YTIzMTA1YTZmMTY5MzE2NTBlYTUwOGIwMmI0N2U5ZTBkMi4uYjVm
NWY1NGRkOTNkZDg4ZmYyNTQ0NDVlNTZhNzk1YTc0Y2JlOGM4YyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSw2ICs0OSw3IEBAIHB1Ymxp
YzoKICAgICAvLyBWOC4gV2hlbiBzZXJpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHxkaWRUaHJv
d3wgaXMgZmFsc2UuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBkaWRUaHJvdyk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6Okhh
bmRsZTx2ODo6VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGNyZWF0ZVdpdGhvdXRUaHJvd2luZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJv
bVdpcmUoU3RyaW5nIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gY3JlYXRlKFN0cmluZyBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSgpOwpAQCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKKyAg
ICBib29sIHNlcmlhbGl6YXRpb25FcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc051bGwo
KTsgfQorCiAgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB2YWx1ZSAoaW4gdGhlIGN1cnJlbnQgY29u
dGV4dCkuIFJldHVybnMgYSBudWxsIHZhbHVlIGluCiAgICAgLy8gY2FzZSBvZiBmYWlsdXJlLgog
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNlcmlhbGl6ZSgpOwpAQCAtNjgsNyArNzEsNyBA
QCBwcml2YXRlOgogICAgIH07CiAKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKLSAgICBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBib29sJiBkaWRUaHJv
dyk7CisgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPik7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdEYXRh
TW9kZSBtb2RlKTsKIAogICAgIFN0cmluZyBtX2RhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Qb3BTdGF0ZUV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4
IGI5YWQ4NjJiYzAyOTM3YzQyOWJmMjM0NGE0M2E5OGFjNzlkMTA5YzguLjc5MmZiMzRkZmI2MDU0
NjNkMTMyYjQ3ZGMzNzExMzhiMTA0YzRjYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0
YXRlRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCkBAIC0zNyw4
ICszNyw5IEBAIFBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQogewogfQogICAgIAotdm9pZCBQb3BTdGF0ZUV2
ZW50Ojppbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2Fu
QnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzdGF0ZU9iamVjdCkKK3ZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIEFTU0VSVF9VTlVTRUQoZWMsIHRydWUpOwogICAgIGlmIChkaXNwYXRj
aGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bv
cFN0YXRlRXZlbnQuaCBiL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAppbmRleCAyZmI4ZDA2
ODViZjBlMGQ1MjJlNDZiMDhiOGFiYWY3MjYzYTRiNDIyLi43MTFmMGI1ZGFhOWI5NzAwOWI5NjFj
MWE5YmNmN2Y2NTIwMjhmNjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50
LmgKKysrIGIvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHN0YXRlT2Jq
ZWN0KSk7CiAgICAgfQogCi0gICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisgICAgdm9pZCBpbml0UG9wU3RhdGVFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAg
IGJvb2wgaXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVPYmplY3Qu
Z2V0KCk7IH0gICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBi
L1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCmluZGV4IGFkYzkwNzRlYzRmZWIwNzAwODc2
NzNmNmFjODhjMDMwYTU4NzI0ZDIuLjZjODY2NTdlMDdiZDA5YTY1ODVmOWMyZjU4MDBlYjMyMGM4
MTYzZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCisrKyBiL1dl
YkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCkBAIC0yOSw5ICsyOSw5IEBAIG1vZHVsZSBldmVu
dHMgewogI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIGlu
dGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lkIGluaXRQb3BTdGF0
ZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGVBcmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdGF0ZUFyZykgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3Rv
bUdldHRlcl0gYW55IHN0YXRlOwogICAgIH07Cg==
</data>
<flag name="review"
          id="51063"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>